Arbeiten mit Datenbanken (PARADOX)
-
Danke für deine Antwort.
ich muss leider mit PARADOX arbeiten in meinem Projekt. Später soll es auf Oracle geändert werden. Aber momentan habe ich keine Wahl.
mit zurückpringen meine ich, dass er plötzlich, bei einem bestimmten Datensatz nicht mehr eine Datensatz weitergeht wie mit Next() zu erwarten. Sondern immer 10 Sätze zurück, immer auf den gleichen übrigens.
THKUH ist die Tabelle.
LG
Eliza
-
Hallo
Dann ist in deinem Quellcode ein Fehler. Welcher das ist können wir nicht sagen, da wir keinen Überblick haben.
(Natürlich ist nicht auszuschießen, das der eigentliche Fehler in den veralteten Paradox-Elementen liegt. Dann hilft nur ein Umstieg)bis bald
akari
-
Hallo
kann das sein das dein Index defekt ist
(moeglicherweise loeschen - neu erstellen)aber ansonsten FINGER WEG VON DER BDE usw
Mfg
Klaus
-
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(); }