![]() |
Datenbank: ADS • Version: 8.1 • Zugriff über: ADS TDataSet
SQL Fehler
Hallo DPler,
ich habe hier ne kleine Test Procedure:
Delphi-Quellcode:
Ich bekomme in der SQL.Text.. Zeile immer diese Fehlermeldung und kann mir absolut nicht erklaeren warum!
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; Zitat:
|
Re: SQL Fehler
Das wird wohl daran liegen, dass "Index" ein reserviertes Wort ist und deshalb ungeeignet als Feldname.
|
Re: SQL Fehler
Auch wenn ich Index umbenenne kommt gleicher Fehler!
|
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??? |
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:
Falls es hier noch einen Performancebooster gibt bitte sagen!
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; |
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:
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'. |
Re: SQL Fehler
Delphi-Quellcode:
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!
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 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 by Thomas Breitkreuz