Entwickler-Ecke
Dateizugriff - ini - Dateien Lesezugriff mit if then Abfrage
ChrisCross - Sa 13.10.12 14:50
Titel: ini - Dateien Lesezugriff mit if then Abfrage
Hallo,
ich habe mein Kassenprogramm nocheinmal neu geschrieben (das alte kann man hier sehen:
http://www.entwickler-ecke.de/viewtopic.php?t=110289&postorder=asc&start=0 und habe die Buttons weggelassen und sie durch ein Eingabefeld ersetzt)
Jetzt habe ich eine IF THEN abfrage gemacht. Also IF Barcode := '1234' THEN Warenliste.Items.Add('Käse (100g)' + Tab + 'Algäuer Alm' + Tab + '24546' + Tab + '0,60 €'); usw.
Wenn man aber nur die .exe Datei hat kann man ja keine Produkte hinzufügen. Ich habe jetzt einen neuen Tab erstellt mit Neue Produkte. Dort kann man alle nformationen eingeben. Das Funktioniert auch gut.
Ich wollte jetzt '1234' usw. einfach ersetzen. Erstmal einlesen und speichern
Delphi-Quelltext
1: 2: 3:
| INummer := ini.ReadString(Spe, 'Artikelnummer', ''); IF Nam = Nummer THEN Warenliste.Items.Add(Produktname + Tab + Firma + Tab + Nummer + Tab + PreisBon); |
und dann ersetzen. Aber eigendlich funktioniert das ja nicht. Woher soll Delphi wissen welchen Abschnitt und welche "Nummer" ich meine. Wie mache ich das?
jfheins - Sa 13.10.12 15:06
Speichere die ganzen Produkte am besten in einer Datenbank oder einer Datei. (Datenbank ist professioneller, Datei am Anfang einfacher)
Wenn du eine Datei hernimmst, kannst du diese beim Programmstart einlesen und als Liste oder so im Speicher halten.
Sobald ein Barcode eingegeben wird, durchsuchst du die Liste und liest den zugehörigen Text aus.
Ich empfehle dir, eine kleine Klasse zu schreiben die alle Infos zu einem Artikel enthält. Dann deklarierst du eine Variable des Typs TObjectList und speist für jeden Barcode ein Objekt in die Liste ein.
Bei kleinen Datenmengen kannst du die Liste dann einfach von vorne bis hinten durchgehen um zu einem Barcode den Artikel zu finden.
Bei größeren Datenmengen solltest du die Liste sortieren damit du schneller suchen kannst.
Narses - Sa 13.10.12 15:16
Moin!
So wie ich das sehe, hast du doch schon sowas wie ein CSV-Format in deiner Warenliste. Also dürfte der einfachste Weg sein, diese direkt zu speichern. :idea: ;)
Delphi-Quelltext
1:
| Warenliste.Items.SaveToFile('Waren.csv'); |
Und bei Programmstart:
Delphi-Quelltext
1:
| Warenliste.Items.LoadFromFile('Waren.csv'); |
Fertig. :D
cu
Narses
ChrisCross - Mo 15.10.12 18:45
Danke für eure Antworten. Könntet ihr mir aber trotzdem bei der IF THEN Abfrage helfen. Also wo man den Produktcode eingibt, dass er den mit der ini Datei Vergleicht und dann den Namen und den Preis aus der gleichen Gruppe, wo der Produktcode drinsteht ausgiebt.
jfheins - Mo 15.10.12 21:09
Also den konkreten Teil kannst du nicht nur mit einer if-Abfrage lösen, da brauchst du noch eine Schleife:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Warenliste := TObjectlist.Create(); Warenliste.Add(TWare.Create('Algäuer Alm', 'Käse (100g)', 24546, 60)); Warenliste.Add(TWare.Create('Haribo Goldbären', 'Quengelware', 1234, 149));
for i := 0 to Warenliste.Length - 1 do begin if Warenliste[i].Artikelnummer = Barcode then Einkaufskorb.Add(Warenliste[i]); end; |
Wenn dir das nicht hilft ist vielleicht deine Frage etwas wage gestellt. Du solltest auf jeden Fall den Barcode direkt beim Produkt speichern und kannst dann in einer Liste das Produkt suchen sobald du den Barcode kennst.
Narses - Mo 15.10.12 21:37
Moin!
ChrisCross hat folgendes geschrieben : |
Könntet ihr mir aber trotzdem bei der IF THEN Abfrage helfen. Also wo man den Produktcode eingibt, dass er den mit der ini Datei Vergleicht und dann den Namen und den Preis aus der gleichen Gruppe, wo der Produktcode drinsteht ausgiebt. |
Sorry, ich kann dir nicht folgen. :nixweiss: Zeig mal deine INI-Datei. :les:
cu
Narses
bummi - Mo 15.10.12 23:06
Wenn Du schon unbedingt bei einer INI bleiben willst wirst Di eine Struktur in der Art brauchen
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| [123] Produkt=Käse (100g) Firma=Algäuer Alm Nummer=1234 Preis=12.34 Valid=1 [234] Produkt=Wurst (100g) Firma=Schlachter Nummer=815 Preis=33.22 Valid=1 |
Delphi-Quelltext
1: 2: 3: 4:
| if ini.ReadBool(Barcode,'Valid',0)=1 then begin Warenliste.Add(ini.ReadString(Barcode,'Produkt','') + TAB ....... end; |
ChrisCross - Di 16.10.12 07:15
Hier ist das ganze Programm.
Ich glaube ich habe meine Frage dumm gestellt :oops: , im Programm seht ihr dann was ich meinte. Ich habe die alte Variante nur auskommentiert.
(Ich habe auch versucht den Quellcode zu strukturieren. Hoffentlich ist es mir gelungen)
bummi - Di 16.10.12 07:29
Delphi-Quelltext
1: 2: 3: 4:
| try
spe := ArtikelNummer.Text; IProduktname :=ini.ReadString(Spe, 'Produktname', ''); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!