Autor Beitrag
ElTonno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

XP, Win 7, Ubuntu
Delphi 2007 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Fr 25.02.11 10:08 
user profile iconElTonno hat folgendes geschrieben Zum zitierten Posting springen:
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? :nixweiss: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

XP, Win 7, Ubuntu
Delphi 2007 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 27.02.11 12:28 
user profile iconElTonno hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

XP, Win 7, Ubuntu
Delphi 2007 Enterprise
BeitragVerfasst: 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.
ausblenden volle Höhe Delphi-Quelltext
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 = 13then 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;
//Buttons generieren aus Table
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
query1.SQL.Clear;
query1.SQL.Add(query);


sparen und einfach

ausblenden Delphi-Quelltext
1:
query1.Text:=query;					


schreiben.

Moderiert von user profile iconKlabautermann: Delphi-tags hinzugefügt.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Mo 28.02.11 10:08 
user profile iconSmileySN hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 10:30 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Also ich kann ADO/Access garnicht ausstehen.

Was ich dafür umso mehr empfehlen kann:
SQLite: www.itwriting.com/blog/?page_id=659
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 28.02.11 15:16 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
{...}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 user profile iconElTonno sich nicht interessiert zeigt, sind die Empfehlungen wahrscheinlich eh vergebens ;).

Gruß
Klabautermann
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 15:38 
user profile iconKlabautermann hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
{...}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.
Ich habe kein Wort von Access gesagt, ich dachte da in Verbindung mit Ado eher an MSSQL, Firebird, ... ;-)
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mo 28.02.11 16:25 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconKlabautermann hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

XP, Win 7, Ubuntu
Delphi 2007 Enterprise
BeitragVerfasst: 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?
ausblenden volle Höhe Delphi-Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 96
Erhaltene Danke: 24


Delphi 2010, C# (VS 2012), Objective-C, Java
BeitragVerfasst: Di 08.03.11 18:03 
Quizfrage: Wieviel Felder hat Deine SQL-Query:

ausblenden SQL-Anweisung
1:
SELECT artikel FROM artikel [...]					

?

Übrigens: Fehlermeldungen beinhalten meistens auch weitere Meta-Informationen wie z.B. Zeilennummer o.ä.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Di 08.03.11 18:12 
user profile iconElTonno hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
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;

Du selektierst nur "Artikel" raus, greifst aber auf 2 Felder zu. Ich denk mal, dass geht nicht ;)

Übrigens generierst du in der andren procedure fleißig buttons, die du aber nirgends "festhältst". Du kannst die also nicht mehr (so leicht) ansprechen (und löschen).

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29

XP, Win 7, Ubuntu
Delphi 2007 Enterprise
BeitragVerfasst: 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???
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 08.03.11 22:24 
user profile iconElTonno hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
Buttons.OnClick:=Mausklick;					
Du weißt ja jedem Button den selben Eventhandler zu. Hast du vielleicht vergessen innerhalb von Mausklick zu prüfen welcher der Buttons gedrückt wurde?

(Das Next hast du ja hoffentlich noch in der Schleife dadrunter stehen.)
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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!