Lustiger Thread. Und deshalb werde ich mal meinen Senf dazugeben. Mal sehen, ob ich das vor lauter Kopfschütteln richtig verstanden habe.
1. Man darf nur eine Tabelle verwenden.
2. Die Tabelle sieht so aus
name | wert
Test1| 23M Kabel, 50 Karten, 50K Gewicht
Test2| 20M Kabel, 12CM Karten, 10K Gewicht
3. Gesucht ist ein Algorithmus, der zwei Aufzählungen addiert.
Zu 1 und 2: Wenn das so vorgegeben ist, reicht es, einmalig auf den Hirnriss der Vorgabe einzugehen, um dann dem armen Jungen (das ist Ernst gemeint, bei der Aufgabe) zu helfen.
Grundsätzlich gilt aber für alle Fragesteller, lieber Jack23, das man erstens genau lesen, zweitens per se dankbar sein und drittens immer höflich sein sollte.
Nun denn, nun zu Punkt 3.
Wir haben also eine Aufzählung von Elementen. Ein Element besteht aus drei Teilen, nämlich: 'Menge' 'Einheit' 'Sache'. Bei '23M Kabel' wäre die Menge=23, die Einheit='M' und die Sache='Kabel'.
Wenn ich eine Aufzählung in seine Elemente und jedes Element in seine Teile zerlegen kann, dann kann ich zwei Aufzählungen miteinander verknüpfen, sodaß einerseits eine neue Aufzählung entsteht und andererseits die Mengen von Elementen mit identischen 'Sachen' und 'Einheiten' addiert werden.
Ich halte so eine Funktion
Function AddiereAufzaehlung (aAufzaehlung1, aAufzaehlung2 : String; aFaktor : Integer) : String;
für (natürlich) machbar, aber dennoch drei Nummern zu hoch für jemanden, der erst seit ein paar Wochen Delphi in der Schule hat. Nichts gegen dein Können Jack23, aber der Lehrer müsste wissen, das das innerhalb des Lehrplanes einfach nicht zu schaffen ist. Daher auch die Zweifel der Jungs hier bezüglich deines Verständnisses der Aufgabenstellung. Ich persönlich würde auch auf die #44'er Tabelle tippen und annehmen, das der Lehrer eine solche Lösung gemeint hat.
Und wenn nicht, steht die Einladung, sich über den Sinn einer solchen Aufgabenstellung hier im Forum zu unterhalten. Er kann das dann nach Anmeldung durch eine PN an einen der Teilnehmer dieses Threads gerne tun.
Zu Deinem Code:
ComboBox.Items.AddObject(ADOQuery.FieldbyName('Name').AsString,TObject(ADOQuery.FieldByName('Wert').AsString));
Das ist Quatsch, denn du speicherst das Ergebnis einer Funktion ('AsString') in einem dafür nicht vorgesehenen Container. Alles ist möglich, aber ich bezweifle, das beim Addieren dort noch etwas sinnvolles zu finden ist.
Es reicht
ComboBox.Items.Add(ADOQuery.FieldbyName('Name').AsString);
dann die Werte kannst Du anhand der einzelnen Namen ausfindig machen (sofern diese eindeutig sind, aber wenigstens DAS sollte man als Prämisse annehmen).
Wenn Du o.g. Funktion implementiert hast, dann rufst Du sie einfach für jede combobox auf. Du addierst quasi das Ergebnis immer mit dem Wert der Combobox.
Delphi-Quellcode:
Var
sErgebnis : String;
sErgebnis := '';
If ComboBox1.Text<>'' Then sErgebnis := AddiereAufzaehlung (GetWert (Combobox1.Text), sErgebnis, StrToInt (Faktor1Edit.Text));
...
// für die anderen Comboboxes wiederholen
Die Funktion 'GetWert' ermittelt den Inhalt des Feldes 'Wert' anhand des übergebenen Namens.