AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [FMX] FDQuery.FieldByName leifert falschen String
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX] FDQuery.FieldByName leifert falschen String

Ein Thema von Hobbycoder · begonnen am 25. Sep 2019 · letzter Beitrag vom 26. Sep 2019
Antwort Antwort
Seite 1 von 2  1 2      
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#1

[FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:07
Datenbank: SQLite • Version: 3 • Zugriff über: FireDAC
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:
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;
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.

Wie gesagt, ich kann's mir nicht erklären.
Miniaturansicht angehängter Grafiken
code.png   dbviewer.png  
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:12
Versuch es mal mit
q.OPEN; Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:15
Ersetzte mal q.Active := True; durch q.Open; und q.Active:=False; durch q.Close; Heisst das Feld nun username oder loginname?
Markus Kinzler
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#4

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:15
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#5

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:20
Ersetzte mal q.Active := True; durch q.Open; und q.Active:=False; durch q.Close;
Macht das einen Unterschied Open vs Actice:=True bzw. Close vs Active:=False?
Habe bisher immer Active:= verwendet.

Heisst das Feld nun username oder loginname?
Jetzt loginname, weil ich es zum Testen verändert hatte. Screenshot war davor, Code im Thread aber danach. Daher der Unterschied
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:23
DataSet.Active dient eigentlich nur zur Anzeige des Status.
Markus Kinzler
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 17:54
"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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 18:06
Naja so ganz das gleiche ist das wohl nicht:
Zitat:
Call Open to set the Active property for the dataset to true. When Active is true, data can be populated with data. It can read data from a database or other source (such as a provider). Depending on the CanModify property, active datasets can post changes.

Setting Active to true:

Triggers the BeforeOpen event handler if one is defined for the dataset.

Sets the dataset state to dsBrowse.

Establishes a way to fetch data (typically by opening a cursor).

Triggers the After Open event handler if one is defined for the dataset.

If an error occurs during the dataset open, dataset state is set to dsInactive, and any cursor is closed.
Ich pers. würde Anmerkungen von Markus immmer sehr ernst nehmen. Aber das ist meine ganz pers. Ansicht.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 19:35
1) http://docwiki.embarcadero.com/RADSt...osing_Datasets

2)
Delphi-Quellcode:
procedure TDataSet.Open;
begin
  Active := True;
end;
Übersehe ich etwas?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: [FMX] FDQuery.FieldByName leifert falschen String

  Alt 25. Sep 2019, 21:36
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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