Autor |
Beitrag |
ElTonno
      
Beiträge: 29
XP, Win 7, Ubuntu
Delphi 2007 Enterprise
|
Verfasst: Fr 25.02.11 06:37
Hallo Leute,
schreibe grad nen kleines Kassenprogramm und würde gern wissen wie man die Einträge aus der Table mit dynamisch erzeugten Buttons verknüpfen kann.
Benutze noch BDE und paradox.
Die PLU abfrage funktioniert, was auch nich schwierig war.
Vllt hat ja jemand ne Idee oder ne kleine Code Unterstützung parat.  bis dann
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 25.02.11 10:08
ElTonno hat folgendes geschrieben : | schreibe grad nen kleines Kassenprogramm und würde gern wissen wie man die Einträge aus der Table mit dynamisch erzeugten Buttons verknüpfen kann. |
Versteh ich nicht. Du willst Buttons mit Datenbankeinträgen verknüpfen? Also mit Werten?  Kannst du mal ein Beispiel sagen, wie das aussehen soll?
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ElTonno 
      
Beiträge: 29
XP, Win 7, Ubuntu
Delphi 2007 Enterprise
|
Verfasst: So 27.02.11 01:58
hi,
habe dynamisch erstellte Buttons, die würde ich gern mit datenbankeinträgen verknüpfen via artikelnr.
Coca Cola Button-> verknüpft mit DB Eintrag '1' wenn man diesen drückt soll er in eine Listview den DB eintrag Cola und den Preis schreiben.
Bin grad nich an meinerm rechner schicke dir mal nen code snippet wenn ich @ home bin. jut details dann später. By
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 27.02.11 09:50
Achso. Naja, wenn du die Buttons erstellst, dann setzt du ja die Caption auf den Namen. Setze dabei einfach Button.Tag auf die ArtikelNr. Wenn du dann draufklickst, kannst du mit SQL diese Artikelnummer suchen:
Delphi-Quelltext 1:
| 'SELECT Preis FROM TABELLE WHERE (ARTNR='+inttostr(Button.Tag)+');' |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 27.02.11 12:28
ElTonno hat folgendes geschrieben : | Benutze noch BDE und paradox. |
Wobei du bedenken solltest, dass die BDE seit knapp 10 Jahren nicht mehr weiterentwickelt wird und viele Fehler enthält. Deshalb ist sie eigentlich nur unter Win9x voll nutzbar. Ab 2000/XP braucht man ggf. Adminrechte und es funktioniert in (ok, eher seltenen) Fällen nicht richtig. Und ab Windows Vista/7 ist spätestens bei Netzwerkzugriffen über Dateifreigaben der Ofen aus.
Für neue Projekte sollte man die BDE daher auf keinen Fall noch nutzen. Insofern lohnt es auch nicht kleine Lernprogramme damit zu erstellen (auch wenn die Standardkomponenten natürlich auch mit anderen DBs funktionieren). Nimm besser gleich Alternativen...
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: So 27.02.11 16:04
Ich würde die ADO-Komponenten und die Datenbank Access empfehlen.
Das ist in Delphi und Windows schon vorhanden und man braucht nichts zu installieren.
Wenn man kein Office Paket mit Access hat um die Datenbank und die Tabellen anzulegen, dann kann man das auch im Quellcode machen.
Bei Fragen dazu helfe ich gerne.
|
|
ElTonno 
      
Beiträge: 29
XP, Win 7, Ubuntu
Delphi 2007 Enterprise
|
Verfasst: So 27.02.11 19:20
hallo,
vielen dank für die tips,
das ist erstmal für die PLU nr. das funzt auch super.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| var query, wert1, wert2, wert3, nr : string; li : TListitem; begin if (key = 13) then begin nr := plu.Text; query := 'SELECT * from artikel where Nr = '''+ nr +''';';
query1.SQL.Clear; query1.SQL.Add(query); query1.prepare; query1.open;
wert1 := query1.Fields[1].Text; wert2 := query1.Fields[2].Text; wert3 := query1.Fields[0].text;
Li:=Listview1.items.add; Li.Caption:=Wert3 +' '+ wert1; Li.SubItems.Add(wert2); edit1.Clear; query1.close;
end; end; var i,position:Word; begin position:=4; table1.Open; Table1.First; for i := 0 to table1.RecordCount-1 do begin Buttons:=TButton.create(self); Buttons.parent:=panel6; Buttons.top:=50; Buttons.left:=position; Buttons.Height:=41; Buttons.Width:=100; Buttons.Font.Style:=[fsbold]; Buttons.Font.Size:=12; Buttons.caption:=Table1.FieldByName('artikel').AsString; Buttons.Name:='artnr'+inttostr(i); Buttons.OnClick:=buttonClick; position:=position+105; Table1.Next; end; |
ja ick wees das die schon uralt is, wollte auch langsam mal mit ado anfangen, is gut zu wissen das ich hier nachfragen kann wenn bedarf besteht.mit den tags hab ich noch nich so gearbeitet aber is ne gute idee.
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: So 27.02.11 19:59
Dieser Code funktioniert genauso mit den ADO-Komponenten.
Einfach ADOConnection und ADOQuery rein, die sonstigen Befehle bleiben gleich.
Bei der TextBox plu.txt solltest Du sicherstellen, dass nur korrekte Werte dort eingegeben wurden.
Sonst kann es im SQL-String zu unschönen Erlebnissen kommen
Das Query1.prepare kannst Du Dir sparen, da Du keine Parameter übergibst und hier auch keine Zeitkritischen Operationen stattfinden.
Wenn immer nur ein fester Text an die Query übergeben wird, dann kann man sich das:
Delphi-Quelltext 1: 2:
| query1.SQL.Clear; query1.SQL.Add(query); |
sparen und einfach
Delphi-Quelltext
schreiben.
Moderiert von Klabautermann: Delphi-tags hinzugefügt.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 28.02.11 10:08
SmileySN hat folgendes geschrieben : | Ich würde die ADO-Komponenten und die Datenbank Access empfehlen. |
Also ich kann ADO/Access garnicht ausstehen.
Was ich dafür umso mehr empfehlen kann:
SQLite: www.itwriting.com/blog/?page_id=659
Dort brauchst du garkeine Installation, nur eine kleine dll, die du bei deinem Programm mit in den Ordner reinpackst. Funktioniert etwas anders als die BDE, aber ich hatte mich in 5 Minuten eingearbeitet, denn das mitgelieferte Beispielprojekt sagt alles aus, was man benötigt.
Was für mich besonders genial ist: Größenunabhängige Suche in beliebig großen Textfeldern (BLOBs). Das ging mit der BDE nicht, und hat mich schon bei meinem ersten Projekt gestört.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.02.11 10:30
Das kommt eben auf das Projekt an. Für kleine Progrämmchen ist SQLite super, aber für größere Programme und/oder Netzwerkzugriffe wie z.B. Client-/Server-Anwendungen, Multitier etc. sind ADO & Co sehr interessant. 
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mo 28.02.11 11:07
Hier ist ne tolle Auflistung dazu:
www.sqlite.org/whentouse.html
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 28.02.11 15:16
jaenicke hat folgendes geschrieben : | {...}aber für größere Programme und/oder Netzwerkzugriffe wie z.B. Client-/Server-Anwendungen, Multitier etc. sind ADO & Co sehr interessant.  |
Aber dann nicht mit Access. Sorry, aber das ist eine Datenbank, die ich im Client/Server Bereich genau so wenig sehen möchte wie Paradox. Der Wechsel von Paradox aif SQLight scheint mir auch sinniger als der auf Access aber da ElTonno sich nicht interessiert zeigt, sind die Empfehlungen wahrscheinlich eh vergebens  .
Gruß
Klabautermann
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 28.02.11 15:38
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 28.02.11 16:25
jaenicke hat folgendes geschrieben : | Klabautermann hat folgendes geschrieben : | Aber dann nicht mit Access. | Ich habe kein Wort von Access gesagt, ich dachte da in Verbindung mit Ado eher an MSSQL, Firebird, ...  |
Ich wollte es dir auch gar nicht unterstellen, da ADO in diesem Thread aber bisher ausschließlich im zusammenhang mit Access genannt wurde (auch in deinem Zitat), wollte ich dieses Bundle aufsprengen. Wie dir übrigens sicherlich aufgefallen ist habe ich nichts gegen ADO gesagt  .
Gruß
Klabautermann
|
|
ElTonno 
      
Beiträge: 29
XP, Win 7, Ubuntu
Delphi 2007 Enterprise
|
Verfasst: Di 08.03.11 17:53
sry, keine zeit gehabt um zu antworten.
Danke erstmal für den Tip mit der Ado Komponente, muss mich da dann nochmal belesen.
mache erstmal zu Testzwecken weiter mit BDE und dann umstieg auf Ado.
Ist ne kleine Procedure mit dem SQL Code von "Xion". Ich habe die Artikelnr auf Buttons.tag gelegt bekomme aber immer wieder Meldung Listenindex Überschreitung. finde den Fehler nicht. Kann mal jemand drüber lesen und mir nen Tip geben?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| procedure TMainForm.FormCreate(Sender: TObject); var i,position:Word; begin position:=4; table1.Open; Table1.First; for i := 0 to table1.RecordCount-1 do begin Buttons:=TButton.create(self); Buttons.parent:=panel6; Buttons.top:=50; Buttons.left:=position; Buttons.Height:=41; Buttons.Width:=100; Buttons.Font.Style:=[fsbold]; Buttons.Font.Size:=12; Buttons.caption:=Table1.FieldByName('artikel').AsString; Buttons.Tag:=Table1.FieldByName('nr').AsInteger; Buttons.OnClick:=Mausklick; Buttons.Name:='artnr'+inttostr(i); position:=position+105; Table1.Next; end; end;
procedure TMainform.Mausklick(Sender: TObject); var query, wert1, wert2: string; li : TListitem; begin query:='SELECT artikel FROM artikel WHERE (nr='+inttostr(Buttons.Tag)+');'; query1.SQL.Clear; query1.SQL.Add(query); query1.open;
wert1 := query1.Fields[1].Text; wert2 := query1.Fields[2].Text;
Li:=Listview1.items.add; Li.Caption:=wert1; Li.SubItems.Add(wert2); edit1.Clear; query1.close; end; |
Vielen Dank
|
|
vagtler
      
Beiträge: 96
Erhaltene Danke: 24
Delphi 2010, C# (VS 2012), Objective-C, Java
|
Verfasst: Di 08.03.11 18:03
Quizfrage: Wieviel Felder hat Deine SQL-Query:
SQL-Anweisung 1:
| SELECT artikel FROM artikel [...] |
?
Übrigens: Fehlermeldungen beinhalten meistens auch weitere Meta-Informationen wie z.B. Zeilennummer o.ä.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 08.03.11 18:12
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
ElTonno 
      
Beiträge: 29
XP, Win 7, Ubuntu
Delphi 2007 Enterprise
|
Verfasst: Di 08.03.11 22:16
hab das jetzt mal korrigiert, egal welchen Button ich drücke er benutzt den letzten Button der erstellt wurde ich denke mal wegen Table1.next.!!?? Jetzt mal von dem Speichern der Buttons abgesehen, ne andere schleife benutzen oder was is der Fehler???
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| for i := 0 to table1.RecordCount-1 do begin Buttons:=TButton.create(self); Buttons.parent:=panel6; Buttons.top:=50; Buttons.left:=position; Buttons.Height:=41; Buttons.Width:=100; Buttons.Font.Style:=[fsbold]; Buttons.Font.Size:=12; Buttons.caption:=Table1.FieldByName('artikel').AsString; Buttons.Tag:=Table1.FieldByName('nr').AsInteger; Buttons.OnClick:=Mausklick; position:=position+105; |
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 08.03.11 22:24
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mi 09.03.11 00:45
Das Problem liegt in der Verwendung von "Buttons" - diese Variable beinhaltet letztendlich nur den letzten erzeugten Button.
Warum überhaupt die Nutzung einer klassenweit verfügbaren Variable?
-> Grundlagen!
|
|