AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Probleme mit SELECT und Strings
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit SELECT und Strings

Ein Thema von Puke · begonnen am 20. Jan 2014 · letzter Beitrag vom 21. Jan 2014
Antwort Antwort
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#1

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:20
Sollte eigentlich nur ein Beispiel sein. Na dann:
Delphi-Quellcode:
Function TFireBird.DoRelationExists(IN_Table: String; IN_Data: WideString; Var OUT_Index: Integer):Boolean;
Begin
[...]
// Wenn ich hier das StringFeld durch ein IntegerFeld ersetze und die Werte anpasse funktioniert es
// einwandfrei. Nur der Sinn kommt dann abhanden ...
SendSQlSelect('SELECT * FROM ' + IN_Table + ' WHERE ' + IN_Table + 'Name = ''' + IN_Data + '''';
[...]
End;

Procedure TFireBird.SendSQLSelect(IN_Command: String);
Begin
FdbquerySelect.SQL.Clear;
FdbquerySelect.SQL.Add(IN_Command);
FdbquerySelect.Open; // Debugger gibt hier den Fehler aus!!!
FdbquerySelect.First;
End;
Ich gehe davon aus das die Exception vom Open ausgeht, weil beim durchgehen der Prozedur mit dem Debugger bleibt der dort hängen!
Das Objekt wird während des constructors instanziiert und bleibt bis zum destructor vorhanden.
Gruß Puke
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:27
Mir fällt als erstes ein fehlendes Leerzeichen bzw. Punkt vor dem 'Namen =' auf. Dadurch wird der Inhalt von IN_TABLE mit 'Name' kombiniert. Heißt das Datenbankfeld wirklich so?
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#3

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:31
das Feld heißt so.

Syncron und Asyncron? Damit kann ich momentan nichts anfangen
Gruß Puke
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:34
Wie wäre es denn hiermit:
Delphi-Quellcode:
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;
Es soll Komponenten geben, die ein Close vor irgendwelchen Änderungen mögen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#5

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:41
Du meinst
FdbquerySelect.Close; ???

Das funktioniert auch nicht!
Gruß Puke
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:47
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;
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#7

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:57
Dadurch bekomme ich die Fehlermeldung:
Code:
[...] raised Exception class EDatabaseError with Message 'Parameter 'x' Not found'.
X ist dann der IN_Data Wert.
Gruß Puke
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.258 Beiträge
 
Delphi 12 Athens
 
#8

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 12:00
Wer steht denn im IN_Data?
Wenn da z.B. \ oder ' drin vorkommt, dann muß es ja knallen.

Warum nehmt Ihr keine Parameter.
Und Makros.
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#9

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 12:10
Nein, getestet hatte ich mit 'Hallo'.
Bei mir hat die TZQuery kein MacroByName!
Gruß Puke
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.490 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Probleme mit SELECT und Strings

  Alt 21. Jan 2014, 11:28
SendSQlSelect('SELECT * FROM ' + IN_Table + ' WHERE ' + IN_Table + 'Name = ''' + IN_Data + ''''; Da fehlt der Feldtrenner, es komt ja so was raus
Code:
SELECT * from TABELLE WHERE TABELLENAME = 'Beispiel'
Eine weiter Möglichkeit wäre noch zu prüfen, ob die Abfrage synchron oder asynchron ausgeführt wird.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz