IBQuery1->ParamByName - max. Stringlänge umgehen/ändern
-
Hallo,
ich verwende die IBQuery und will damit Datensätze auslesen.
Nun habe ich ein Problem, dass ich mit ParamByName nur max 20 Zeichen aufnehmen kann. Das reicht leider nicht aus um eindeutig Datensätze zu bestimmen.
Wie kann ich die max. Zeichenlänge ändern oder umgehen?
-
Hallo,
Du könntest statt ParamByName ja auch Params->Items[] verwenden, wenn du die Nummer des Parameters kennst. Die könnte man ja darüber auch rausbekommen.
Bist du sicher, dass nur 20 Zeichen erlaubt sind oder hast du vielleicht ein Leerzeichen mit drin?
-
Nein, ich habe keine Leerzeichen drinnen nur %-Zeichen als Platzhalter.
Ich habe das mitIBQuery1->Params[0]->AnsiString = user_number_modversucht. Aber leider bekomme ich folgende Fehlermeldung:
Pointer to structure required on left side of -> or ->*In der Hilfe habe ich folgendes gefunden:
IBQuery2.SQL.Clear; IBQuery2.SQL.Add('INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION)'); IBQuery2.SQL.Add('VALUES (:Name, :Capital, :Population)'); IBQuery2.Params[0].AsString := 'Liechtenstein'; IBQuery2.Params[1].AsString := 'Vaduz'; IBQuery2.Params[2].AsInteger := 420000; IBQuery2.ExecSQL;Das sieht nach Delphi aus. Ich habe das AsString als AnsiString interpretiert.
Aber weder mit ->AsString noch mit ->AnsiString funktioniert es.Hier ein kleiner Quellcode Ausschnitt:
IBQuery1->SQL->Clear(); IBQuery1->SQL->Add("select BEZEICHNUNG1 from USER WHERE USERNUMBER LIKE :user_number"); IBQuery1->Params[0]->AsString = user_number_mod; IBQuery1->Open();Bin ein wenig ratlos.
-
Ok, hatte ein dummen Fehler:
IBQuery1->Params[0]->AsString = user_number_mod;So ist es richtig:
IBQuery1->Params->Items[0]->AsString = user_number_mod;Aber trotzdem kann ich nur 20 Zeichen darin speichern, wie bei
IBQuery1->ParamByNameMein Programm bricht immer ab und gibt mir folgende Fehlermeldung raus:
Project Project1.exe raised exception class EIBClientError with message 'Trying to store a sring of length 33 into a field that can only contain 20'. Process stopped. Use Step or Run to continue.
-
Hallo
Die Fehlermeldung ist doch eindeutig. Du hast ein Feld das maximal 20 Zeichen aufnehmen kann aber willst einen längeren Wert drin speichern. Das ist kein Problem vom Builder oder TIBQuery, sondern von deiner Datenbankdefinition. Du must also mit deinem Datenbank-Dienstprogramm den Feldtyp ändern bzw. vergrößern.
/Edit : Wenn die Fehlermeldung sich auf die INSERT-Anweisung bezieht.
bis bald
akari