Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Fehler (https://www.delphipraxis.net/92376-sql-fehler.html)

Mackhack 18. Mai 2007 21:19

Datenbank: ADS • Version: 8.1 • Zugriff über: ADS TDataSet

SQL Fehler
 
Hallo DPler,

ich habe hier ne kleine Test Procedure:

Delphi-Quellcode:
procedure TfoMain.LvwInfoSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  I: Integer;
  Index: Integer;
begin
  if ( Selected and (LvwInfo.ItemIndex > -1) ) then
  begin
    for I := 0 to LvwInfo.Items.Count do
    begin
      Index := StrToInt(LvwInfo.Items[I].Caption) + 1;
      with AdsQuery1 do
      begin
        Active := False;
        SQL.Text := 'SELECT * FROM Daten WHERE Index=' + IntToStr(Index);
        ShowMessage(SQL.Text);
        Active := True;
        EdtIndex.Text := FieldByName('Index').AsString;
        EdtBezeichnung.Text := FieldByName('Bezeichnung').AsString;
        EdtDatum.Text := FieldByName('Datum').AsString;
        EdtPreis.Text := FieldByName('Preis').AsString;
      end;
    end;
  end;
end;
Ich bekomme in der SQL.Text.. Zeile immer diese Fehlermeldung und kann mir absolut nicht erklaeren warum!

Zitat:

---------------------------
Sqldemo
---------------------------
AdsQuery1: Error 7200: AQE Error: State = 42000; NativeError = 2115; [Extended Systems][Advantage SQL Engine]Expected lexical element not found: identifier or expression -- Location of error in the SQL statement is: 33 There was a problem parsing the WHERE clause in your SELECT statement.
---------------------------
OK
---------------------------
Weis jemand von euch warum?

Hansa 18. Mai 2007 21:28

Re: SQL Fehler
 
Das wird wohl daran liegen, dass "Index" ein reserviertes Wort ist und deshalb ungeeignet als Feldname.

Mackhack 18. Mai 2007 22:06

Re: SQL Fehler
 
Auch wenn ich Index umbenenne kommt gleicher Fehler!

bttb930 18. Mai 2007 23:01

Re: SQL Fehler
 
könnte mehrere gründe haben:

- Index ist ein besonderer name - vielleicht liegt's daran
- die i-schleife läuft zuweit - tritt der fehler erst im letzten durchlauf auf?
- die query wird nicht geschlossen - tritt der fehler im zweiten durchlauf aus?
- ist der query-text überhaupt okay? gib den mal aus. nicht dass die caption vielleicht leer ist (liefert inttostr dann 0 oder ''?)

all sowas. ist aber doch eigentlich leicht selbst rauszufinden. warum werden hier immer so leichte sachen gefragt???

Mackhack 19. Mai 2007 00:29

Re: SQL Fehler
 
Wenn ich bereits 4 Leute danach ausserhalb der DP gefragt habe und wir das Problem nicht beseitigen konnten darf ich denk ich hier nachfragen oder? Und ich sagte bereits, Index ist zu Counter und in der Tabelle zu Nr geworden und es tritt immer noch auf. Ausserdem hab ich eine ShowMessage drin die mir den SQL Text anzeigt und der ist Korrekt!

So der Fehler ist weg und das ist meine Loesung:

Delphi-Quellcode:
procedure TfoMain.LvwInfoSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  I: Integer;
begin
  if ( Selected and (LvwInfo.ItemIndex > -1) ) then
  begin
    for I := 0 to LvwInfo.Items.Count - 1 do
    begin
      EdtIndex.Text := LvwInfo.Selected.Caption;
      EdtBezeichnung.Text := LvwInfo.Selected.SubItems[0];
      EdtDatum.Text := LvwInfo.Selected.SubItems[1];
      EdtPreis.Text := LvwInfo.Selected.SubItems[2];
    end;
  end;
end;
Falls es hier noch einen Performancebooster gibt bitte sagen!

alzaimar 19. Mai 2007 07:00

Re: SQL Fehler
 
Darf ich fragen, wo die Datenbankabfrage hin verschwunden ist?

Klar, das das so funktioniert. Der Fehler wurde beseitigt, indem die Fehlerquelle entfernt wurde. Das nenn ich mal 'das Übel an der Wurzel packen'. :zwinker:

Du kannst versuchen, das mit einem DBGrid und datensensitiven Eingabecontrols (aka 'TDBEdit') hinzubekommen, dann musst Du nämlich gar keine Zeile Code schreiben: Erstelle eine Query, die alle Daten der Tabelle lädt. Schmeiß ein TDatasource, ein TDBGrid und deine TDBEdit-Teile auf die Form. Datasource mit Query, Grid mit Datasource, alle TDBEdits mit der Datasource und dann den Feldnamen setzen. Fertig.

Zitat:

Zitat von Mackhack
Wenn ich bereits 4 Leute danach ausserhalb der DP gefragt habe und wir das Problem nicht beseitigen konnten darf ich denk ich hier nachfragen oder? Und ich sagte bereits, Index ist zu Counter und in der Tabelle zu Nr geworden

Welcher Typ ist 'Index/Counter/Nr'? Hast Du versucht, die Query mit Parametern zu erstellen? Dazu setzte Du die Eigenschaft 'SQL' zur Designzeit mit'Select * from Daten where Nr=:Nr' (Wenn dein Index-Feld jetzt 'Nr' heißt).

In der Schleife setzt Du dann nur noch:
Delphi-Quellcode:
Query.Parameters.ParamValues['Nr'] := Counter

So stellst Du sicher, das die Syntax korrekt ist. Selbstgebasteltet SQL-Anweisungen sind nur selten 'besser'.

Mackhack 19. Mai 2007 07:04

Re: SQL Fehler
 
Delphi-Quellcode:
procedure TfoMain.BtnAllesZeigenClick(Sender: TObject);
var
  Item: TListItem;
begin
  with AdsQuery1 do
  begin
    Active := False;
    SQL.Text := 'SELECT * FROM Daten';
    Active := True;
    First;
    while not Eof do
    begin
      Item := LvwInfo.Items.Add;
      Item.Caption := FieldByName('Nr').AsString;
      Item.SubItems.Add(FieldByName('Bezeichnung').AsString);
      Item.SubItems.Add(FieldByName('Datum').AsString);
      Item.SubItems.Add(FieldByName('Preis').AsString);
      Next;
    end;
  end;
  PnlCounter.Caption := IntToStr(LvwInfo.Items.Count);
end;

procedure TfoMain.LvwInfoSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  I: Integer;
begin
  if ( Selected and (LvwInfo.ItemIndex > -1) ) then
  begin
    for I := 0 to LvwInfo.Items.Count - 1 do
    begin
      EdtIndex.Text := LvwInfo.Selected.Caption;
      EdtBezeichnung.Text := LvwInfo.Selected.SubItems[0];
      EdtDatum.Text := LvwInfo.Selected.SubItems[1];
      EdtPreis.Text := LvwInfo.Selected.SubItems[2];
    end;
  end;
end;
Na ja ich muss dazusagen dass mir das hier besser gefaellt da ich nicht noch eine Datenbankanfrage schicken muss da die Daten ja bereits in der ListView stehen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 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