![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: FireDAC
[FMX] FDQuery.FieldByName leifert falschen String
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich habe unter FMX ein Query welches eine Tabelle einer SQLite-DB abfragt. Es existiert lediglich eine Zeile in der DB. Laut DB-Viewer befindet sich im Feld "username" ein String. (Siehe Bild DBViewer.png im Anhang) In der Routine liefert mir FieldByName('username').AsString aber immer '0' zurück, und ich kann's mir nicht erklären. Mir ist auch nicht klar, wo er sich die '0' herholt. Wenn er irgendwas nicht lesen oder finden kann, dann sollte nur ein Leerstring kommen. ich habe das Feld "username" schon mal umbenannt in "loginname" (vielleicht Schlüsselwort der DB), aber das änderte nichts. Eigentlich sollte das Verhalten gar nicht möglich sein. Es tritt keine Exception auf. Hier mal die Routine:
Delphi-Quellcode:
Im Anhang habe ich noch mal Screenshots vom Debug-Screen und der DB. Da kann man deutlich sehen, was q.FieldByName('loginname').AsString zurückliefert und was in der DB steht.
function TfrmTPMain.GetUsernameFromDB: string;
var q: TFDQuery; begin Result:=''; q:=TFDQuery.Create(nil); try q.Connection:=TPDatenmodul.conLocalsqlConnection; q.SQL.Text:='select * from global'; q.Active:=True; if q.RecordCount>0 then begin q.First; Result:=q.FieldByName('loginname').AsString; end; q.Active:=False; finally q.Free; end; end; Wie gesagt, ich kann's mir nicht erklären. |
AW: [FMX] FDQuery.FieldByName leifert falschen String
Versuch es mal mit
Delphi-Quellcode:
Gruß
q.OPEN;
K-H |
AW: [FMX] FDQuery.FieldByName leifert falschen String
Ersetzte mal
Delphi-Quellcode:
durch
q.Active := True;
Delphi-Quellcode:
und
q.Open;
Delphi-Quellcode:
durch
q.Active:=False;
Delphi-Quellcode:
Heisst das Feld nun username oder loginname?
q.Close;
|
AW: [FMX] FDQuery.FieldByName leifert falschen String
Und schon Problem selber gelöst (leider erst nachdem ich den Thread abgeschickt hatte).
Falls jemand mal änliches Verhalten hat hier die Ursache. Mit ausreicht Kenntnisse über SQLite hätte ich es vielleicht wissen können, aber man kann tatsächlich einen Feldtyp von Text in Real ändern (in diesem Fall ist das versehendlich passiert), und alle Textwerte belieben in der Tabellenspalte vollständig erhalten. Und leider ist mein DB-Viewer so, dass er prompt den Textinhalt anzeigt. FireDAC aber aufgrund des Fehdtypes konsequent 0 zurückliefert. Wie gesagt, auf Grund der Tatsache, dass hinter SQLite keine DB-Server steckt, hätte ich auch eher drauf kommen können. |
AW: [FMX] FDQuery.FieldByName leifert falschen String
Zitat:
Habe bisher immer Active:= verwendet. Zitat:
|
AW: [FMX] FDQuery.FieldByName leifert falschen String
DataSet.Active dient eigentlich nur zur Anzeige des Status.
|
AW: [FMX] FDQuery.FieldByName leifert falschen String
"Eigentlich?"
Active ist eine beschreibbare Property, die intern auf Open/Close routet. Es ist doch wohl egal, ob man eine Query mit Open oder Active öffnet. |
AW: [FMX] FDQuery.FieldByName leifert falschen String
Naja so ganz das gleiche ist das wohl nicht:
Zitat:
Gruß K-H |
AW: [FMX] FDQuery.FieldByName leifert falschen String
1)
![]() 2)
Delphi-Quellcode:
Übersehe ich etwas?
procedure TDataSet.Open;
begin Active := True; end; |
AW: [FMX] FDQuery.FieldByName leifert falschen String
Verdammt gute Frage, so steht's auch im historischen D7.
Dann würde für "Open" nur sprechen, daß eine (Fremd)Komponente noch etwas zwischen "open" und "active" erledigt. Oder in Zukunft ..... Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 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