Deutsch
Forum

Problem mit Datenbank

 

Peter
Gückstock
Hallo,
Ich bin noch nicht lange hier in der Community und komme noch nicht ganz so klar,
wo und wie ich meine Frangen an der richtigen Stelle schreibe. Ich versuche es einfach hier.

Mein Problem ist folgendes: Ich habe eine DB III Datenbank in eien Listbox eingelesen. In der Listbox markiere ich eine Zeile und möchte jetzt die Feldinhalte des entsprechenden Datensatzes für die weitere Berechnung erhalten.
Für einen Lösungsvorschlag wäre ich Euch dankbar.
(Bin Anfänger mit qualmendem Kopf)
KompilierenMarkierenSeparieren
Programm-Kasse
unter Verwendung von Programm-Listbox4, Autor: Gerhard Putschalka
------Deklarationen
Declare LiBox&,BonBox1&,Zeile&,Anzahl&,BOk%,Anz_Spalten%,X%,Feld$,Zeile$,Lv_Liste#
Declare Dlg%,Ende%,InpFile$,SatzN%,OpCod$,Datum$,Betrag$,BOk%,Tx$,LV_Zeile&,Lv_Item#,LV_Selected#
declare LV_ColMask&,Listbox&,Number#,TxtBER#,Bon$,Bon3$,Bbox&,Kassieren%,UBox&
declare Epreis!,Gegeben!,EPreis$,Menge%,Posten!,Summe!,Umsatz!,Zurück!,übernehmen%,Art$,E%,S$
declare Bon2$,Bon1$,Bon0$,Zeilennummer%,Zeilennummer$,Index&,DsNr$,DsNr%
-----Definition der Funktion (link zum API)
Def @CreateWindowEx(12) ! USER32,CreateWindowExA
def GetSysColor(1) !USER32,GetSysColor
Def @GetSelectedCount(1) @Sendmessage(@&(1),$1032,0,0)
Dim TxtBer#,255    max. Textlänge einer Listboxzeile (sollte genügend groß sein)
Dim NumBer#,300    Größe = maximal auszuwählende Zeilen * 4 (bei Bedarf erweitern)
===========
Prozeduren
============
-----Modul1 Spalten für die Listbox erstellen

Proc Erstelle_Spalte

    Parameters Handle&,Maske&,Format&,Pixel&,Text$,Spalte&
    Long Lv_Liste#,0  = Maske&
    Long Lv_Liste#,4  = Format&
    Long Lv_Liste#,8  = Pixel&
    Long Lv_Liste#,12 = @add(Lv_Liste#,36)
    Long Lv_Liste#,16 = 220
    Long Lv_Liste#,20 = Spalte&
    string Lv_Liste#,36 = Text$
    @sendmessage (Handle&,$101B,Spalte&,Lv_Liste#)
    Inc Anz_Spalten%
    Return

Endproc

------Erstellen der Listboxen, Butten u.s.w.

Proc Erstelle_Dialog

    Let Dlg% = @CreateDialog(%Hwnd,Angebot,0,0,800,580)
    let Ende% = @createbutton(Dlg%,beenden,10,500,80,24)
    Let BOk% = @CreateButton(Dlg%,übernehmen,100,410,90,24)
    Let Kassieren% = @CreateButton(Dlg%,Kassieren,8,450,80,20)
    Usefont Ms Sans Serif,16,0,0,0,0
    setdialogfont 1
    Dim Lv_Liste#,256
    String Lv_Liste#,0 = SysListView32  muß SysListView32 lauten
    String Lv_Liste#,20 =
    Let LiBox& = @CreateWindowEx($0000280,Lv_Liste#,Lv_Liste#,$50408205,5,5,290,400,
    Dlg%,1,%hinstance,$200)
    @SendMessage(LiBox&,$1036,0,$00000023)  setze extended Style. $23 ist liniert.
    Let BBox& = control(LISTBOX,,$54A00148,550,50,200,350,
    Dlg%,2001,%HINSTANCE,$00020000)
    let UBox&=control(LISTBOX,,$54200140,250,80,280,60,
    Dlg%,2001,%HINSTANCE,$00020121)
    -------Einfügen der Spalten in die Listbox
    Erstelle_Spalte LiBox&,15,0,40,Nr.,0
    Erstelle_Spalte LiBox&,15,0,120,Artikel,1
    Erstelle_Spalte LiBox&,15,0,100,Preis,2
    Erstelle_Spalte BonBox1&,15,0,40,Nr.,0
    Let Anz_Spalten% = 3    initialisiere Spaltenzähler
    ----- initialisieren der Bereich für spätere Verwendung
    Long Lv_Liste#,0  = 1  Maske
    Long Lv_Liste#,4  = 0
    Long Lv_Liste#,8  = 0
    Long Lv_Liste#,12 = 0
    Long Lv_Liste#,16 = 0
    Long Lv_Liste#,20 = @add(Lv_Liste#,36)
    Long Lv_Liste#,24 = 220
    Long Lv_Liste#,28 = 0
    Long Lv_Liste#,32 = 0
    Return

EndProc

----------------------------------------------------
-----------------------Zeile hinzufügen

Proc Add_Zeile   füge eine Zeile zum Listview hinzu. Zeile& enthält die Zeilennummer.

    Declare X1%
    Long Lv_Liste#,4 = Zeile&  Zeile
    Long Lv_Liste#,8 = 0       Spalte
    Let X1% = 1               Schleifen- und Indexzähler
    String Lv_Liste#,36 = @$(X1%)
    @Sendmessage (LiBox&,$1007,0,Lv_Liste#)  Text in 1. Spalte
    Texte für die Spalten 2 - 3

    While (X1% < 3)

        Long Lv_Liste#,8 = X1%
        Inc X1%
        String Lv_Liste#,36 = @$(X1%)
        @Sendmessage(LiBox&,4142,Zeile&,Lv_Liste#)  Text in Folgespalte

    EndWhile

    Return
    ---------------------------
    Auswerten was selektiert wurde.
    Mit der Message $0190 wird ermittelt wieviele
    Zeilen markiert wurden.
    Mit der Message $0191 werden die Nummern der markierten Zeilen als LongInteger
    (= jeweils 4 Stellen) in die Bereichsvariable NumBer# übernommen.
    danach werden in der 2. Schleife  mit der Message $0189 die gespeicherten
    Zeilennummern ausgelesen und damit die jeweilige Textzeile in die Bereichsvariable
    TxtBer# übernommen.
    Let X%=0
    Let Anzahl&=@Sendmessage(ListBox&,$0190,0,0)
    @Sendmessage(ListBox&,$0191,Anzahl&,NumBer#)

    WhileNot (X% = Anzahl&)

        Let Index& = @Long(NumBer#,@Mul(X%,4))       Zeilennummer holen
        @Sendmessage(ListBox&,$0189,Index&,TxtBer#)  Text aus der Liste holen
        Inc X%

    EndWhile

EndProc

===========================================================
============Hier beginn mein Problem:======================
===========================================================

Proc Berechnen

    ---------------------------jetzt Eingabe, wieviele Artikel
    Menge%=0
    Menge%=@Input$(Anzahl:,ausgewählter Artikel,Menge%) funktioniert
    -------------------------
    Das Einlesen der Datenbank funktioniert auch .
    Jetzt möchte ich die Datensatznummer zur Bearbeitung erhalten, die der markierten
    Zeile in der Listbox entspricht.
    @dbOpen(#1,Sortiment_dbf.dbf)
    @dbUse(#1)
    DsNr$=Index&  mein Gedanke, Datensatznummer gleich Index von markierter Zeile
    @dbgo(DsNr$)  und dann zum entsprechenden Datensatz gehen
    geht aber nicht
    Momentan erhalte ich dummerweise immer den ersten Datensatz.
    die Berechnungen würden mit den richtigen Werten aus der DB auch funktionieren
    Epreis$=@dbGet$(Preis)   jetzt Preise berechnen und in Bon schreiben
    Art$=@dbGet$(Artikel)
    EPreis!=@val(EPreis$)
    Posten!=Menge%*EPreis!
    Decimals 2
    Summe!=Summe!+Posten!
    Decimals 2
    Umsatz!=Summe!
    Decimals 2
    Bon$=str$(Menge%),art$, Str$(EPreis!),  ,str$(Summe!)Str$(TxtBer#,0
    Bon3$=der Umsazt beträgt,str$(Umsatz!)
    @AddString(Bbox&,Bon$)

endproc

-----Modul Rückgeld berechnen

proc Rückgeld

    let Gegeben!=@input$(Bitte den vom Kunden erhaltenen Betrag eingeben,Eingabe,Gegeben!)
    Decimals 2
    Zurück!=Gegeben!-Summe!
    Decimals 2
    UseFont Arial,16,0,0,0,0
    SetDialogFont 1
    @AddString(Ubox&,Bon3$)

endproc

-----Modul Kassierung

proc Summe

    Bon3$=Summe,str$(Summe!)
    Bon2$=Gegeben,str$(Gegeben!)
    Bon1$=Rückgeld,str$(Zurück!)
    @Addstring(BBox&,--------------------)
    @Addstring(BBox&,Bon0$)
    @Addstring(BBox&,Bon3$)
    @Addstring(BBox&,Bon2$)
    @Addstring(BBox&,Bon1$)
    @Addstring(BBox&,Vielen Dank)

endproc

========================
Programm Start
========================
Erstelle_Dialog  erstelle Dialog, ListView, erstelle die Spalten
Let Zeile& = 0
jetzt öffnen wir die Kundendatei und lesen alle Sätze in die Listbox ein.
Let Anzahl& = @dbOpen(#1,Sortiment_dbf.dbf)
@dbUse(#1)
Let SatzN% = 0
Let OpCod$ = |<

While (SatzN% < Anzahl&)

    Inc SatzN% erhöhe Satzzahl
    @dbGo(OpCod$)
    Add_Zeile @dbGet$(lfdNr),@dbGet$(Artikel),@dbGet$(Preis)
    Let OpCod$ = >     für nächster Satz
    Let Zeile& = (Zeile& + 1)   erhöhe Zeilennummer

EndWhile

----------------------------------

WhileNot @GetFocus(Ende%)  1. Schleife bis beenden Button gedrückt wurde

    Hier kommen noch andere Module rein.

    if getfocus(BOK%)

        Berechnen

    Endif

    if getfocus(Kassieren%)

        Rückgeld
        summe

    endif

    -----------------Programm beenden
    waitkey  warte auf Ende-Button
    EndWhile   Ende_Schleife
    let E%=MessageBox(Wirklich beenden?,Programmende,282)
    -----------------Arrays freigeben
    Dispose TxtBer#
    Dispose NumBer#
    Dispose Lv_Liste#
    @dbClose(#1)
    end
 
Peter G.
Win XP, XProfan10
18.02.2007  
 



verschoben nach Programmierung / Allgemein / Einsteigerfragen

Bitte Quelltexte immer mit [ code] quelltext [ /code] einkapseln - habs oben korgieriert.

Welche Profanversion Du nutzt solltest Du in Deine Signatur eintragen.
 
18.02.2007  
 




Thomas
Freier
Siehe dir die Listbox7 an, da wird das erklärt.
Aus allen Feldern einer Zeile wird ein String erzeugt, in dem die Felder (Spalteninhalt) durch ein Tabulatorbyte (oder @Chr$(09) ) getrennt werden. Diese Zeichen werden dann durch / oder Andere .......mit @Translate$(Feld$,, / ) ersetzt.
Der Inhalt eines Feldes wird dann mit @SubStr$(Feld$,N,/) ermittelt (N = Spalte).
Soll direkt auf einen Datensatz der Datenbank zurückgegriffen werden, z.B. um MEMO-Felder auszulesen, ist es sinnvoll, in der 1. Spalte mit BREITE=0, die Datensatznummer (&dbRecNo) zu speichern.

Gruß
Thomas Freier
 
Gruß Thomas
Windows XP SP2, XProfan X2
18.02.2007  
 




Peter
Gückstock
Hallo Thomas,

ich möchte mich für meine späte Antwort entschuldigen, aber ich war betrieblich eingespannt und hatte für meinen PC gar keine Zeit mehr.

vielen Dank für Deine Hilfe, es funktioniert jetzt.
Aber jetzt habe ich zwei weitere Fragen:
1. Wie kann man die Schriftart und die Zeichengröße beim Einlesen der Daten aus der Datenbank in die Listbox verändern (zB. die Schrift vergrößern)? Meine Versuche mit setfont waren ergebnislos.
2. Kann man einzelnen Datensätzen in der Listbox unterschiedliche Schriftfarbe zuordnen? (um z.B. zusammengehörige Datensätze von den anderen farblich zu unterscheiden)

Meine Profanversion: 6.6

Gruß Peter Gückstock
 
Peter G.
Win XP, XProfan10
23.02.2007  
 




Thomas
Freier
Hallo Peter,

Schriftänderung für Dialoge usw. nur über UseFont S,N1,N2,N3,N4,N5
Es können nur Farben für die Tabelle, nicht für eine Spalte oder Zeile vorgegeben werden (mein Kenntnisstand).
Gruppendarstellung hatte ich durch Einsatz von Icons getestet. Die müssen ja nicht die von Profan wie im Beispiel sein. Ist aber Geschmackssache.
Um deine Wünsche umzusetzen, kommst du wie ich nicht um Franks LISTVIEW herum. Lohnt sich für Einsteiger aber erst ab XProfan 8.0 . Die Anpassung für 6.6 ist nicht so einfach. Also SH-Xprofan 8/9 und Franks LISTVIEW hier besorgen und testen.
Da die LISTVIEW Shareware ist, würde ich heute XProfan 10 testen, d.h., die Hilfe Datei hier besorgen und studieren, ob die Version alles das was du realisieren willst ohne Franks LISTVIEW kann.

Gruß
Thomas
 
Gruß Thomas
Windows XP SP2, XProfan X2
23.02.2007  
 




Thomas
Freier
Nachtrag:

soll es bei Profan 6.6 bleiben und Gruppen durch Icons gekennzeichnet werden,
hier nach Iconen suchen ( Michael Wodrich ?) oder mit
> Z-Icon.exe Tool können Sie nicht nur vorhandene Icon-Dateien bearbeiten,
>sondern auch Icons aus Dateien z.B. EXE, DLL und ICL auslesen, editieren.....
beschaffen und im eigenen Programm die Profan-Icon mit
>P-Icon-Changer.exe
(müsste hier zu finden sein) austauschen.

Gruß
Thomas
 
Gruß Thomas
Windows XP SP2, XProfan X2
24.02.2007  
 




Michael
Wodrich
Hallo Thomas,

da hast Du wohl Deine HTML-Info in ein Notepad-Fenster zum Umkopieren gezogen...
Es sind keine Links mehr in Deinem Text.

Ich hab keine Icons auf meiner HP. Und sowas in Datenbanken zu ermöglichen, da hilft die ListView von Frank Abbing. Auch das Einfärben der Zeilen ist damit möglich.

Kannst Dein Posting ja nochmal bearbeiten und die Links hinzufügen. Über dem Editfenster den Globus mit dem Kettenglied benutzen...

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
24.02.2007  
 



Um Links zu posten müssen diese einfach nur reinkopiert werden - URLs werden doch vollautomatisch in Links konvertiert...
 
24.02.2007  
 




Thomas
Freier
Hallo Michael,

verwende eigentlich im Prinzip keine Links. Auch auf den Vereinswebseiten, deren Webmaster ich bin, werden im Gästebuch keine Links zugelassen oder von mir abgeändert. Denke, damit kann man das leidige Thema, gerade hier erst diskutiert, aus dem Weg gehen.
Zu den Icons : hier oder unter profan.de hatte einer eine ZIP mit Iconen angeboten. Wer?
In Gerhards Listview - für Profan 6.6 - kann der 1.Spalte ein Icon zugeordnet werden. Selbst verwendet .
So wie Peter Gückstock es vor hat, Artikelgruppen deutlicher hervorzuheben, würden ja einfarbige Icons reichen, die er gut selbst mit IrfanView.exe oder der Z-Icon.exe von :
Andreas Baumann
Softwareservice
Flottenstr. 58
D-13407 Berlin
erstellen kann. Webadresse im Programm nicht benannt. Ursprung: 1999/2002.
Irgendwo beim Suchen nach Icon-Programmen die Downloadadresse gefunden.

Gruß
Thomas
 
Gruß Thomas
Windows XP SP2, XProfan X2
24.02.2007  
 




Peter
Gückstock
Danke für Eure Tipps. Ich habe das so gelöst:
Jeder Artikel der Gleichen Gruppe bekommt im ersten Feld der Datenbank die gleiche Ziffer zugewiesen. Nach dem Einlesen in die Listbox und anschließendem Sortieren nach dieser Spalte habe ich zusammenhängende Blöcke erhalten.

Gruß Peter G.
 
Peter G.
Win XP, XProfan10
24.02.2007  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.363 Betrachtungen

Unbenanntvor 0 min.
H.Brill12.07.2023
Georg Teles19.03.2016
holmol9324.04.2013
Stephie03.09.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie