Autor Beitrag
ChrisCross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: Sa 13.10.12 14:50 
Hallo,

ich habe mein Kassenprogramm nocheinmal neu geschrieben (das alte kann man hier sehen: www.entwickler-ecke....rder=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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: ChrisCross
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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: ;)
ausblenden Delphi-Quelltext
1:
Warenliste.Items.SaveToFile('Waren.csv');					

Und bei Programmstart:
ausblenden Delphi-Quelltext
1:
Warenliste.Items.LoadFromFile('Waren.csv');					

Fertig. :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: ChrisCross
ChrisCross Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
// Beispiel für den Code, der die Liste befüllt. Idealerweise sollte das aus der Datei geladen werden.
Warenliste := TObjectlist.Create();
Warenliste.Add(TWare.Create('Algäuer Alm''Käse (100g)'2454660)); // Name, Kategorie, Artikelnummer, Preis in cent
Warenliste.Add(TWare.Create('Haribo Goldbären''Quengelware'1234149));

// Barcode wurde gescannt
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 15.10.12 21:37 
Moin!

user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 15.10.12 23:06 
Wenn Du schon unbedingt bei einer INI bleiben willst wirst Di eine Struktur in der Art brauchen
ausblenden 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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
if ini.ReadBool(Barcode,'Valid',0)=1 then
  begin
            Warenliste.Add(ini.ReadString(Barcode,'Produkt','') + TAB .......
        end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
ChrisCross Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 124
Erhaltene Danke: 12

Windows 10 64 bit
Delphi XE6 Starter
BeitragVerfasst: 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)
Einloggen, um Attachments anzusehen!
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 16.10.12 07:29 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  try

   spe := ArtikelNummer.Text;  // <<< das fehlt in Deinem Code
   IProduktname :=ini.ReadString(Spe, 'Produktname''');

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: ChrisCross