![]() |
AW: Probleme mit SELECT und Strings
Delphi-Quellcode:
Da fehlt der Feldtrenner, es komt ja so was raus
SendSQlSelect('SELECT * FROM ' + IN_Table + ' WHERE ' + IN_Table + 'Name = ''' + IN_Data + '''';
Code:
Eine weiter Möglichkeit wäre noch zu prüfen, ob die Abfrage synchron oder asynchron ausgeführt wird.
SELECT * from TABELLE WHERE TABELLENAME = 'Beispiel'
|
AW: Probleme mit SELECT und Strings
das Feld heißt so.
Syncron und Asyncron? Damit kann ich momentan nichts anfangen :?: |
AW: Probleme mit SELECT und Strings
Wie wäre es denn hiermit:
Delphi-Quellcode:
Es soll Komponenten geben, die ein Close vor irgendwelchen Änderungen mögen.
Procedure TFireBird.SendSQLSelect(IN_Command: String);
Begin FdbquerySelect.SQL.Close; FdbquerySelect.SQL.Clear; FdbquerySelect.SQL.Add(IN_Command); FdbquerySelect.Open; // Debugger gibt hier den Fehler aus!!! FdbquerySelect.First; End; Gruß K-H |
AW: Probleme mit SELECT und Strings
Du meinst
Delphi-Quellcode:
???
FdbquerySelect.Close;
Das funktioniert auch nicht! |
AW: Probleme mit SELECT und Strings
Warum nehmt Ihr keine Parameter. Hier braucht man sich keine Sorgen um die Formatierung in der SQL Anweisung machen.
Delphi-Quellcode:
query.sql.text = 'SELECT * FROM Tabelle WHERE Name = :IN_Data';
query.parambyname('IN_Data').AsString := 'blablabla'; {oder} query.parambyname('IN_Data').AsInteger = 1; query.open; |
AW: Probleme mit SELECT und Strings
Dadurch bekomme ich die Fehlermeldung:cry::
Code:
X ist dann der IN_Data Wert.
[...] raised Exception class EDatabaseError with Message 'Parameter 'x' Not found'.
|
AW: Probleme mit SELECT und Strings
Wer steht denn im IN_Data?
Wenn da z.B. \ oder ' drin vorkommt, dann muß es ja knallen. Zitat:
Der Name des Feldes kann ja nicht als Parameter übergeben werden. Nja, oder alternativ die entsprechenden Funktion zum Quoten der Strings und Namen verwenden.
Delphi-Quellcode:
Query.Sql.Text = 'SELECT * FROM &Table WHERE &Field = :Data';
Query.MacroByName('Table').Value := QuoteIdent(IN_Table); // Ich glaub Makros werden nicht automatisch gequotet, bzw. ich bin mir relativ sicher. Query.MacroByName('Field').Value := QuoteIdent(IN_Table + 'Name'); Query.ParamByName('Data').AsString := IN_Data; Query.Open; Query.Sql.Text = 'SELECT * FROM ' + QuoteIdent(IN_Table) + ' WHERE ' + QuoteIdent(IN_Table + 'Name') + ' = ' + QuoteText(IN_Data); Query.Open; // QuoteIdent und QuoteText entsprechend anpassen ... die heißen ja überall irgendwie anders |
AW: Probleme mit SELECT und Strings
Nein, getestet hatte ich mit 'Hallo'.
Bei mir hat die TZQuery kein MacroByName! |
AW: Probleme mit SELECT und Strings
Nicht MakroByName, sondern nur ParamByName. Hier noch mal ein anderes Beispiel, welches definitiv funktioniert :
Delphi-Quellcode:
So mache ich das ständig und es funktioniert.
UniQuery_MessageTypes.SQL.Clear;
UniQuery_MessageTypes.SQL.Add('SELECT * FROM Message_Types WHERE IsStandard = :IsStandard;'); UniQuery_MessageTypes.ParamByName('IsStandard').AsInteger := 1; UniQuery_MessageTypes.Open; while not UniQuery_MessageTypes.Eof do begin tmpIdx := Items.Add(UniQuery_MessageTypes.FieldByName('MessageTypeName').AsString); Items.Objects[tmpIdx] := TObject(UniQuery_MessageTypes.FieldByName('MessageTypeID').AsInteger); UniQuery_MessageTypes.Next; end; UniQuery_MessageTypes.Close; Items.EndUpdate; Edit: Und hier noch die korrigierte Fassung aus Beitrag #15:
Delphi-Quellcode:
Ich hatte zweimal den Doppelpunkt vergessen und habe jetzt mal vorsichtshalber die Unterstriche entfernt.
query.sql.text := 'SELECT * FROM Tabelle WHERE Name = :INData';
query.parambyname('INData').AsString := 'blablabla'; {oder} query.parambyname('INData').AsInteger := 1; query.open; Beide Beispiele funktionieren mit allen gängigen Datenbankkomponenten. |
AW: Probleme mit SELECT und Strings
Danke :thumb:
Funktioniert einwandfrei!:-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz