![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: Zeos
DataSource und Zeos
Hallo,
ich setze einen Query ab und liefere diesen über eine Funktion als TDataSource zurück, doch leider knallts bzw. zeigt mir .RowsAffected 0 an. Die DB ist nicht leer und der Query müsste etwas zurückgeben. :/ Mein Code: uDB.pas:
Delphi-Quellcode:
andereUnit:
constructor TDB.Create(Database: String ='db.db'; Protocol: String = 'sqlite-3');
begin zc := TZConnection.Create(nil); zc.Protocol := Protocol; zc.Database := Database; zc.Connect; zq := TZQuery.Create(nil); zq.Connection := zc; end; function TDB.GetHosts(): TDataSource; var Data: TDataSource; begin Data := TDataSource.Create(nil); zq.SQL.Text := 'SELECT * FROM host;'; zq.DataSource := Data; zq.Open; Showmessage(IntToStr(zq.RowsAffected)); Result := Data; end;
Delphi-Quellcode:
Wahrscheinlich habe ich nur etwas nicht richtig initialisiert, aber ich probiere mittlerweile ewig rum und komme zu keinem Ergebnis. Falls jemand ausserdem eine einfachere Möglichkeit kennt das Ergebnis eines Querys auszuwerten kann er es ruhig posten :)
procedure TfMain.Button1Click(Sender: TObject);
var DB: TDB; Data: TDataSource; begin DB := TDB.Create(); Data := TDataSource.Create(nil); Data := DB.GetHosts(); Showmessage(IntToStr(Data.DataSet.FieldCount)); // Hier knallts mit ner Accessviolation end; Ich bin für jede Hilfe dankbar :) Edit: Hab den Fehler gefunden: Es muss statt
Delphi-Quellcode:
So heißen:
function TDB.GetHosts(): TDataSource;
var Data: TDataSource; begin Data := TDataSource.Create(nil); zq.SQL.Text := 'SELECT * FROM host;'; zq.DataSource := Data; // DAS HIER zq.Open; Showmessage(IntToStr(zq.RowsAffected)); Result := Data; end;
Delphi-Quellcode:
Weiterhin habe ich aus der Funktion eine Prozedur gemacht, die die eine DataSource Variable per Referenz geliefert bekommt.
function TDB.GetHosts(): TDataSource;
var Data: TDataSource; begin Data := TDataSource.Create(nil); zq.SQL.Text := 'SELECT * FROM host;'; Data.DataSet := zq; // ZU DEM HIER zq.Open; Showmessage(IntToStr(zq.RowsAffected)); Result := Data; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 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-2025 by Thomas Breitkreuz