habe ein problem bei der verwendung der sqldb-komponenten, um auf eine sqlite3-db zuzugreifen, genauer gesagt mit der TSQLQuery-Komponente. es funktioniert eigentlich alles wie es soll bis auf folgendes:
wenn ich über TSQLQuery eine select-abfrage absetze (mit .open), und nach verarbeitung des inhalts die query-komponente mit close() schliesse, ist danach trotzdem eine transaktion offen, also meine TSQLTransaction-komponente hat ein Active=True. ich möchte mit diesem select-befehl nur auf ein read-only dataset zugreifen, ich will nichts darin ändern, nur lesen. möglicherweise habe ich zuwenig parameter übergeben um ihm genau das mitzuteilen. hier mein pseudo-code der bis auf das transaktionsdetail funktioniert:
Code: Alles auswählen
// objekte erzeugen
sqlCon:=TSQLite3Connection.CREATE(nil);
sqlTra:=TSQLTransaction.CREATE(nil);
sqlQry:=TSQLQuery.CREATE(nil);
// objekte initialisieren und db-verbindung herstellen
sqlCon.DatabaseName:='/meinedb.db3';
sqlTra.DATABASE:=sqlCon;
sqlQry.DATABASE:=sqlCon;
sqlCon.Connected:=True;
IF sqlTra.Active=True then showmessage('vorher: active'); //feuert nicht -gut
sSQL:='SELECT * FROM tabelle;';
sqlQry.SQL.Text:=sSQL;
sqlQry.ReadOnly:=True; //bewirkt nichts, transaktion nachher trotzdem noch offen
sqlQry.Open;
showmessage( sqlQry.FieldByName('Feldname').AsString );
sqlQry.Close;
IF sqlTra.Active=True then showmessage('nachher: active'); //feuert -schlecht
.ExecSQL;
.Commit;
ausführe, ist die transaktion danach auch korrekt beendet und sqlTra.Active=False. nur bei select´s über die .open-methode nicht. weiss jemand woran das liegen kann, bzw. welche parameter ich vergessen habe?
danke.