Arbeiten mit Datenbanken (PARADOX)
-
Hallo,
ich vermute hier liegt der Fehler, warum der Index so unwillkürlich herumspringt.
Mein Code:Variant locvalues[3]; TLocateOptions Opts; Opts.Clear(); if(MaskEdit1->Text.Length()==11 && MaskEdit1->Text.Pos(" ")==0 && MaskEdit2->Text.Length()==4 && MaskEdit2->Text.Pos(" ")==0) { locvalues[0]=Variant(MaskEdit1->Text.SubString(1,2)); locvalues[1]=Variant(MaskEdit1->Text.SubString(3,9)); locvalues[2]=Variant(MaskEdit2->Text); FormDaten->TableKUH->Open(); if(FormDaten->TableKUH->Locate("OrdBegVST;OrdBegLGB;KNr", VarArrayOf(locvalues,2),Opts))
Kann jemand einen Fehler erkennen? Und wie wäre es richtig?
LG
Eliza
-
Was willst du denn erreichen? Dein Quellcode deutet darauf hin, daß du einen Datensatz suchst. Wird der Richtige gefunden? Gibt es vielleicht mehrere Richtige?
-
Es sind zwei MaskEdit-Felder
In der esten steht die Bereichsnummer in der zweiten die Kundennummer
Bei Eingabe einer Knr zu einer Bereichnummer sollen die Datensätze angezeigt werden. Das funktioniert auch.jetzt sollen noch alle Knr innerhalb einer Bereichsnummer gezählt werden.
Also die Anzahl der Knr pro Bereichnummer herausgefunden werden.
Aber dazu springt der Index immer unberechenbar hin und her.
Und es lässt sich deshalb nicht die Knr zählen.LG
Eliza
-
aber den Quellcode für die "Zählung" hast du nicht gepostet, oder? und das scheint doch die Stelle zu sein wo es Probleme gibt...
-
Nein, ich habe Probleme mit dem Code der Zählung.
Deshalb habe ich es immer wieder neu geschrieben wund wieder gelöscht.
Vielleicht kann mir ja jemand helfen, zu jeder Bereichsnummer (zusammengesetzt aus
rdBegVST und OrdBegLGB) soll jeweils die Knr gezählt werden.
-
Der letzte Versuch einer Zählung war dieser hier mit fester Bereichsnummer
Betriebsnr1=FormDaten->DBGridKUH->DataSource->DataSet->FieldByName("OrdBegVST")->AsString;
Betriebsnr2= FormDaten->DBGridKUH->DataSource->DataSet->FieldByName("OrdBegLGB")->AsString;
Betriebsnummer = Betriebsnr1+Betriebsnr2;NextBetriebsnr1=FormDaten->DBGridKUH->DataSource->DataSet->FieldByName("OrdBegVST")->AsString;
NextBetriebsnr2=FormDaten->DBGridKUH->DataSource->DataSet->FieldByName("OrdBegLGB")->AsString;
NextBetriebsnummer= Betriebsnr1+Betriebsnr2;if(NextBetriebsnummer==Betriebsnummer)
{FormDaten->DBGridKUH->DataSource->DataSet->Next(); /*****Next*****
Knrcount++;
ShowMessage(KNr +" "+ Knrcount);Aber es ist sicher falsch. Funktioniert auf jeden Fall nicht.
LG
Eliza
-
NextBetriebsnummer= NextBetriebsnr1+NextBetriebsnr2;
?
-
Query's verwenden?
z. B.: SELECT mit Bereichsnummer( sorry, lange her bei mir, und testen kann ichs momentan auch nicht ), dann Anzahl Sätze = Anzahl Kundennummern( solange eindeutig ).
Aber schau dir mal die SQL Anweisungen durch.
Alternativ geht auch SELECT COUNT ...grüssle
-
ja gute Beobachtung mit dem Next, aber damit klappt es auch nicht,
das Problem ist das der DB-Zeiger nicht kontinuierlich weitergeht, sondern, sobald die nächste Betriebsnummer kommt einfach um 10 in der alten zurückspringt, so würde er endlos in der selben Betriebnummer zählen.
Auch wenn ich NextBetriebsnr1 + NextBetiebsnr2 schreibe.Weiß nicht warum er das macht, aber ich habe den ersten Code mit den Locations in verdacht.
LG
Eliza
-
dein "FormDaten->DBGridKUH->DataSource->DataSet" zeigt nur die an die die gleiche Bereichsnummer haben? dann brauchst du doch nur die Anzahl der Datensätze aus dem DataSet auszulesen:
int Anzahl = FormDaten->DBGridKUH->DataSource->DataSet->RecordCount;
falls nicht kannst du entweder Smittys Vorschlag weiter verfolgen:
select count(kdnr) form deinetabelle where OrdBegVST = :OrdBegVST and OrdBegLGB = :OrdBegLGB
die mit dem Doppelpunkt sind die variablen Parameter
oder du gehst dein DataSet in ner Schleife durch, wie du ja anscheinend schon versucht hast:
FormDaten->DBGridKUH->DataSource->DataSet->First(); while (!FormDaten->DBGridKUH->DataSource->DataSet->Eof) { Betriebsnr1=FormDaten->DBGridKUH->DataSource->DataSet->FieldByName("OrdBegVST")->AsString; Betriebsnr2= FormDaten->DBGridKUH->DataSource->DataSet->FieldByName("OrdBegLGB")->AsString; Betriebsnummer = Betriebsnr1+Betriebsnr2; if (Betriebsnummer == MeineVergleichsNummer) Knrcount++; FormDaten->DBGridKUH->DataSource->DataSet->Next(); }