Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit SELECT und Strings (https://www.delphipraxis.net/178667-probleme-mit-select-und-strings.html)

Puke 20. Jan 2014 16:54

Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS Libary 7.1.2

Probleme mit SELECT und Strings
 
Hi,
Irgendwie scheine ich irgendetwas nicht ganz verstanden zu haben.
Ich versuche mittels Zeos und firebird diese Abfrage zu Starten:
Code:
SELECT * FROM Tabelle WHERE MeinFeld = 'String'
Die Ausführung sieht so aus
Delphi-Quellcode:
Query.sql.clear;
Query.sql.add(...);
Query.open; // hier tritt Dann der Fehler auf
Query.first;
Die Exception
Code:
... Exception class $C0000005 with Message 'Access violaton at 0x1003ba5b: read of address 0x00000000'
Ich habe irgendwie keine Ahnung ...

Danke für Hilfe
Puke

EDIT: Passiert nur bei Strings!!!

mkinzler 20. Jan 2014 17:02

AW: Probleme mit SELECT und Strings
 
Es sihet eher danach aus, dass die Komponente nicht instantiiert ist.

Puke 20. Jan 2014 19:39

AW: Probleme mit SELECT und Strings
 
Ich habe die Abfrage schon einmal auf Integer umgewandelt! Ohne Probleme...

Das kann nicht das Problem sein :(

Union 20. Jan 2014 19:53

AW: Probleme mit SELECT und Strings
 
Ist das wirklich die Query? Oder soll das nur ein Beispiel sein?

vagtler 20. Jan 2014 20:42

AW: Probleme mit SELECT und Strings
 
Zitat:

Zitat von Puke (Beitrag 1244588)
[...] Das kann nicht das Problem sein :(

Famous last words...

nahpets 20. Jan 2014 22:13

AW: Probleme mit SELECT und Strings
 
Zeig' doch mal bitte, was Du hier genau machst:
Delphi-Quellcode:
Query.sql.add(...);
Bei .add passiert doch was anderes als ... und das SQL-Statement steht bestimmt nicht genauso anstelle der ...

Es könnte also z. B. so aussehen:
Delphi-Quellcode:
Query.sql.add('SELECT * FROM Tabelle WHERE MeinFeld = ''String''');
oder eher so?
Delphi-Quellcode:
Query.sql.add('SELECT * FROM Tabelle WHERE MeinFeld = ' + QuotedStr('String'));
oder vielleicht mit Parameter?
Delphi-Quellcode:
Query.sql.add('SELECT * FROM Tabelle WHERE MeinFeld = :Suchbegriff');
ok, dann fehlt in Deinem Beispiel noch das Befüllen des Parameters, dass sollte aber nicht zu dem auftretenden Fehler führen, sondern eher zu einem ungültigen SQL-Statement.

Wenn es mit Integer funktioniert und nicht mit Zeichenfolgen, dann liegt der Fehler genau in an der Stelle, die Du uns durch ... verheimlichst.
Ohne eine Info über die drei ??? (achne, dass sind ja schöne Kinderbücher ;-)), also ohne den Inhalt der drei ... können wir bestenfalls die :glaskugel: bemühen, die Erfolgsaussichten tendieren jedoch gegen 0.

Perlsau 21. Jan 2014 04:28

AW: Probleme mit SELECT und Strings
 
Zitat:

Zitat von mkinzler (Beitrag 1244577)
Es sihet eher danach aus, dass die Komponente nicht instantiiert ist.

Würde in diesem Fall der Fehler nicht bereits bei Query.sql.clear; auftreten?

Perlsau 21. Jan 2014 04:31

AW: Probleme mit SELECT und Strings
 
Zitat:

Zitat von Puke (Beitrag 1244576)
EDIT: Passiert nur bei Strings!!!

Hast du die Strings in deiner Abfrage (Query.sql.add(...); ) auch gequoted (in Hochkommas gesetzt)?

Puke 21. Jan 2014 11:20

AW: Probleme mit SELECT und Strings
 
Sollte eigentlich nur ein Beispiel sein:oops:. 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.

hsg 21. Jan 2014 11:27

AW: Probleme mit SELECT und Strings
 
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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.
Seite 1 von 3  1 23      

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