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 steht

    Da 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]
    

    😉


Anmelden zum Antworten