Unzulässige Zeigeraddition
-
Hallo Alle noch wachgebliebenen,

folgende Situation: ich möchte gerne aus einer Tabelle mittels TQuery Daten mir rausholen, so sieht das ganze aus:
int Ab_Kunden_Nr = DataModule1->tAbrechnung->FieldByName("Kunden_Nr")->AsInteger; if (workString != "") { DataModule1->QKontoumsatz->Active=false; DataModule1->QKontoumsatz->SQL->Clear(); DataModule1->QKontoumsatz->SQL->Add ("select * from Konten where Abbuchungskonto = 'Ja' and Kunden_Nr = '" + Ab_Kunden_Nr + "' "); DataModule1->QKontoumsatz->Active=true; } //Kontoumsatz DataModule1->QKontoumsatz->First();Jedoch kriege ich beim Compilieren eine Fehlermeldung
Unzulässige Zeigeraddition an der Stelle wo in der SQL Ab_Kunden_Nr stehtDa schon mal, ich verstehe es nicht warum, wenn ich jetzt aber versuche, Ab_Kunden_Nr als String zu deklarieren, dann klappt es, jedoch kriege ich die Fehlermeldung beim letzten Statement ....->First(), dass unterschiedliche Typen entstehen, erwartet wird SmallInt, und ich bekomme Float.
In der Paradox-Tabelle ist das Feld Kunden_Nr als NUMBER definiert...
Kann mir da jemand weiterhelfen?
Gruss,
chullain
-
Hallo
int Ab_Kunden_Nr = DataModule1->tAbrechnung->FieldByName("Kunden_Nr")->AsInteger; if (workString != "") { DataModule1->QKontoumsatz->Active=false; DataModule1->QKontoumsatz->SQL->Clear(); DataModule1->QKontoumsatz->SQL->Add (AnsiString("select * from Konten where Abbuchungskonto = 'Ja' and Kunden_Nr = '") + IntToStr(Ab_Kunden_Nr) + "' "); DataModule1->QKontoumsatz->Active=true; } //Kontoumsatz DataModule1->QKontoumsatz->First();Alternativ eleganter ist die Verwendung der Eigenschaft TQuery::ParamStr
bis bald
akari
-
Hallo Akari,
ich hab es mal nach Deiner Methode ausprobiert, leider krieg ich die gleiche Fehlermeldung:
QKontoumsatz:Unzulässige Typen von Feld "Kunden_Nr";erwartet:SmallInt, gefunden:Float.Gruss,
chullain
-
Hallo
ich weiß ja nicht was du ausprobiert hast und wo genau du diese Fehlermeldung bekommst, aber bestimmt nicht bei meinem Codebeispiel. Denn dort steht nichts von irgendwelchen float.
bis bald
akari
-
Cut&Paste
int Ab_Kunden_Nr = DataModule1->tAbrechnung->FieldByName("Kunden_Nr")->AsInteger; if (workString != "") { DataModule1->QKontoumsatz->Active=false; DataModule1->QKontoumsatz->SQL->Clear(); DataModule1->QKontoumsatz->SQL->Add (AnsiString("select * from Konten where Abbuchungskonto = 'Ja' and Kunden_Nr = '") + IntToStr(Ab_Kunden_Nr) + "'"); DataModule1->QKontoumsatz->Active=true; } //Kontoumsatz DataModule1->QKontoumsatz->First();
Gruss,
chullain
-
Hallo
Und ich sag nochmal, das in dem Code den ich hier sehe, nichts von float oder dergleichen steht, die Fehlermeldung muß also einen anderen Auslöser haben.
Welchen Datentyp hat den das Feld Kunden_Nr in der Datenbank?
bis bald
akari
-
Das ist eine Paradox-Datenbank, das Feld Kunden_Nr hat als Datentyp Number definiert.
Gruss,
chullain
-
hast du das schonmal versucht?
int Ab_Kunden_Nr = DataModule1->tAbrechnung->FieldByName("Kunden_Nr")->AsInteger; if (workString != "") { DataModule1->QKontoumsatz->Active=false; DataModule1->QKontoumsatz->SQL->Clear(); DataModule1->QKontoumsatz->SQL->Add ("select * from Konten where Abbuchungskonto = 'Ja' and Kunden_Nr = :kdnr"); DataModule1->QKontoumsatz->ParamByName("kdnr")->AsInteger = Ab_Kunden_Nr; //DataModule1->QKontoumsatz->ParamByName("kdnr")->Value= Ab_Kunden_Nr; //als Alternative DataModule1->QKontoumsatz->Active=true; } //Kontoumsatz DataModule1->QKontoumsatz->First();
-
chullain schrieb:
In der Paradox-Tabelle ist das Feld Kunden_Nr als NUMBER definiert...
chullain
Und genau DA liegt der Hase im Pfeffer. Number wird im Cbuilder als Float definiert. Deshalb bekommst du auch diese Fehlermeldung:
QKontoumsatz:Unzulässige Typen von Feld "Kunden_Nr";erwartet:SmallInt, gefunden:Float.Lösung:
[cpp] int Ab_Kunden_Nr = DataModule1->tAbrechnung->FieldByName("Kunden_Nr")->AsFloat; [/cpp]