Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Delphi 7 Professional + Zeos-Lib.
SQL-Fehler zum Verzweifeln
Liste der Anhänge anzeigen (Anzahl: 2)
Langsam, aber sicher bin ich am Verzweifeln.
Ich habe folgendes Mini-Programm zum Testen:
Delphi-Quellcode:
Sobald ich auf btQueryClick drücke, kommt folgende Fehlermeldung:
unit main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, ZConnection, Grids, DBGrids; type TForm1 = class(TForm) ZConnection1: TZConnection; ZQuery1: TZQuery; btQuery: TButton; DataSource1: TDataSource; DBGrid1: TDBGrid; procedure btQueryClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormDeactivate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btQueryClick(Sender: TObject); var n: integer; begin n := 4; ZQuery1.Close; ZQuery1.SQL.Text := 'SELECT * FROM Systeme WHERE SystemNr = ' + IntToStr(n); ZQuery1.Open; end; procedure TForm1.FormActivate(Sender: TObject); begin ZConnection1.Connect; end; procedure TForm1.FormDeactivate(Sender: TObject); begin ZConnection1.Disconnect; end; end. Zitat:
Ich hänge hier als Anhang auch noch den QUERY und den SATZAUFBAU an. Vielleicht kann mir jemand behilflich sein, ich kämpfe hier schon seit mehreren Stunden. mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
[edit] Siehe nächtster Beitrag :oops: [/edit]
|
Re: SQL-Fehler zum Verzweifeln
Du hast scheinbar überlesen, was ich geschrieben habe:
Es gibt sehr wohl die Spalte SystemNr in der Datei System ... mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
Hi,
sorry, hab ich echt überlesen. Kommt davon wenn man mehrere Thread parallel liest :oops: . Schonmal versucht den Where abschnitt wegzulassen und nur mal "SELECT * FROM Systeme" aufzurufen, oder gibt es dort auch schon eine Fehlermeldung. Was ich auch grad noch sehe. Du macht die Variable n: Integer und wandelst diese nachher in String um, aber SystemNr ist Integer?!?. Entweder du schreibst gleich:
SQL-Code:
oder du machst das ganze per Parameter:
SELECT * FROM Systeme WHERE SystemNr = 4
Delphi-Quellcode:
Zeos.SQL.Text := 'SELECT * FROM Systeme WHERE SystemNr = :nr';
Zeos.ParamByName('nr'].AsInteger := 4; Zeos.Open; |
Re: SQL-Fehler zum Verzweifeln
Jetzt spielt's GRANADA !!!
Haltet euch an: Wenn ich im Objektinspektor unter SQL eingebe: SELECT * FROM Systeme - dann wird alles richtig ausgegeben. Wenn ich im Quelltext eingebe: SELECT * FROM Systeme - dann kommt auch diese blöde Fehlermeldung mit SystemNr 4, obwohl das gar nicht mehr vorkommt. Hier die Routine:
Delphi-Quellcode:
Und trotzdem kommt:
procedure TForm1.btQueryClick(Sender: TObject);
begin ZQuery1.Close; ZQuery1.SQL.Text := 'SELECT * FROM Systeme'; ZQuery1.Open; end; Zitat:
Muss ich jetzt mein Delphi schmeissen oder was würdet ihr hier machen (ausser Verzweifeln)? mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
Hmm,
lösche mal die DCU's und starte Delphi neu. Bei mir hilft das manchmal. |
Re: SQL-Fehler zum Verzweifeln
So, die DCU's gelöscht, jetzt ist wenigstens wieder Ordnung im System - aber es geht trotzdem nicht.
Der SELECT funktioniert ohne weitere Parameter einwandfrei, z.B.: SELECT * FROM System - zeigt alle Zeilen an SELECT * FROM System WHERE SystemNr = 4 - kommt o.a. Fehlermeldung. Ich habe das jetzt auch versuchsweise mit anderen Tabellen probiert - egal - auch dort kommt, sobald ich den WHERE-Parameter benutze, die Fehlermeldung. Vermutlich mache ich hier grundsätzlich etwas falsch - nur was ? Muss ich bei der Zeos-SQL-Komponente etwas besonderes beachten oder einstellen - ich stelle hier nur die Connection zur ZCOnnection ein und setze Request-Live auf TRUE. Der SQL-Aufruf erfolgt dann per Programm. Muss man sonst noch was einstellen? Das kann doch nicht sein, dass man bei den Grundelementen nicht mehr weiterkommt ... mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
Hmm,
stell mal das RequestLive aus. Mit dem hatte ich auch mal Probleme. Vllt. hast du auch alte Zeos-Komponenten und solltest mal auf die neuen Updaten. |
Re: SQL-Fehler zum Verzweifeln
RequestLive ein oder aus - immer dasselbe
Die ZEOS-Komponenten sind die neuesten, erst vor 14 Tagen heruntergeladen. Liegt es vielleicht an den Tabellen selbst - wie könnte ich es dort überprüfen - ich kann es mir zwar nicht vorstellen, da ja alle Daten ohne der WHERE-Klausel einwandfrei angezeigt werden. mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
So, ich habe jetzt meine SYSTEM-Tabelle auch unter mySQL mit dem gleichen Aufbau erstellt und versucht, über mySQL mit dem gleichen ProgrammCode zuzugreifen und siehe da - hier funktioniert es.
Kann das dann doch vielleicht an den Tabellen von Firebird liegen, wenn ja, was könnte ich hier versuchen ? mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
Firebird handhabt die Gross-Klein-Schreibung bei Feldnamen relativ strickt... entweder Du erstellst alle Felder nur mit Grossbuchstaben (dann ist die Schreibweise in der Query egal), oder Du musst in der Query die Feldnamen mit "" einschliessen (mit korrekter Gross-Klein-Schreibung).
|
Re: SQL-Fehler zum Verzweifeln
Hallo,
probier mal so:
Delphi-Quellcode:
Ich gehe davon aus, daß SystemNr auch eine Zahl ist.
procedure TForm1.btQueryClick(Sender: TObject);
var n: integer; begin n := 4; ZQuery1.Close; ZQuery1.SQL.Clear; ZQuery1.SQL.Add('SELECT * FROM Systeme WHERE SystemNr = ' + IntToStr(n)); ZQuery1.Open; end; Ansonsten halt SystemNr in ' oder " oder was auch immer bei diesem SQL-Dialekt als Anführungszeichen verwendet wird einschliessen... |
Re: SQL-Fehler zum Verzweifeln
GOTTSEIDANK !!! Es funktioniert.
Fragt mich bitte aber nicht, warum. Manchmal funktioniert eben etwas, man weiss aber nicht warum ! Ich kann es nur auf folgendes darauf zurückführen: Bei einigen Tabellen war eine View definiert, so auch bei dieser Tabelle SYSTEME. Nachdem ich diese View gelöscht hatte, funktionierte es plötzlich. Kann mir zwar nicht vorstellen, dass das damit zusammenhängen kann, aber es funktioniert. Ich möchte mich bei allen, die sich an meinem Problem beteiligt hatten, recht herzlich für die Mithilfe danken. mfg Herbert |
Re: SQL-Fehler zum Verzweifeln
Hallo nochmals, allerseits!
Da ich heute nochmals obige Probleme mit Firebird-Tabellen hatte, habe ich mir den SELECT nochmals genauer unter die Lupe genommen und damit Versuche unternommen. Wenn ich SELECT so verwende, wie in diversen Dokumentationen beschrieben, bzw. wie dieser auch mit mySQL-Tabellen einwandfrei funktioniert, so habe ich mit Firebird-Tabellen keinerlei Chance. Es kommt immer der FehlerCode -206 (unbekannte Spalte). Wenn ich aber Schlüsselworte innerhalb eines doppelten Anführungszeichens setze, dann funktioniert es. Beispiele: Zitat:
Zitat:
Was ich noch nicht probiert habe, ist, ob die jetzt unter Firebird funktionierende Version auch ohne Änderung mit mySQL-Tabellen funktioniert, aber das werde ich gleich nachholen. Kennt jemand eine Lektüre, wo man nachlesen kann, wie man die einzelnen Anweisungen richtig verwendet? Nachtrag: Habe soeben Version 2 unter mySQL probiert - wie erwartet - funktioniert dort leider nicht mehr. Gibt es denn keine einheitliche Lösung, sonst ist doch der Vorteil von Zeos wieder weg. mfg Herbert |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 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