Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FIBPLus, DataSet Insert klappt nicht (https://www.delphipraxis.net/138473-fibplus-dataset-insert-klappt-nicht.html)

hoika 11. Aug 2009 07:48

Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus

FIBPLus, DataSet Insert klappt nicht
 
Hallo #,

folgenden Code habe ich hier

Delphi-Quellcode:
dt: TpFIBDataSet

with dt do
begin
  SelectSQL.Text:= 'Insert Into Table1' usw.
  Open;
end;
Es wird aber nichts eingetragen.

OK, ich gehe über SelectSQL statt InsertSQL,
aber muss ich denn jetzt selber jedes SQL-Statement
in das richtige SQL-Dingens reinfummeln ?

Da ich ja die BDE ersetze, würde das heissen,
jede einzelne Abfrage zu prüfen.

So hatte ich mir das mit FIBPlus aber nicht vorgestellt ;(


Da ich jetzt eh einen abgeleitete Klasse habe,
könnte ich ja noch was dran drehen (über StatementType),
nur habe ich noch nicht ein einziges Example gefunden,
wie ich eine im InsertSQL befindliche Abfrage zum Server schicke.
Über Open geht es schon mal nicht, der sucht im SelectSQL.

In den eigentliche Quellen steht was wie

DataSet.QInsert.ExecQuery;

Das kann es doch nicht sein, oder ?


Hilfe !

Danke


Heiko

alex517 11. Aug 2009 08:34

Re: FIBPLus, DataSet Insert klappt nicht
 
im "Normalfall" FibDataSet aufs Formular oder DatenModul ziehen -
rechte Maustaste - "SQL Generator" - und dort alles weitere.

Wenn du die DataSets dynamisch erzeugen willst, dann steht
folgendes in der FibPlus-Hilfe:
Zitat:

TpFIBDataSet.GenerateSQLs

Generates SQLs for inserting, updating, deleting and refreshing records.

procedure GenerateSQLs;

Description

Call the GenerateSQLs procedure to fill the InsertSQL, UpdateSQL, DeleteSQL and RefreshSQL properties. The condition for WHERE construction is made in the following way: at first, the AutoUpdateOptions .KeyFields value is checked. If it is not empty the fields from AutoUpdateOptions.KeyFields are inserted into WHERE condition. Otherwise the existence of a primary key in a table is checked. If it is found the WHERE condition is build by primary key fields. If nothing above-mentioned has happened, all fields are inserted in WHERE condition.

The dataset must be open before calling the GenerateSQLs procedure.
Die üblichen Methoden des DataSets (ds.Open, ds.Append, ds.Edit, ds.Delete ds.Refresh) verwenden dann die entsprechenden SQL-Statements.
Dabei laufen ds.Open und ds.Refresh im Context der Property ds.Transaction, während
ds.Append, ds.Edit und ds.Delete die ds.UpdateTransaction verwenden.

alex

MrSpock 11. Aug 2009 08:41

Re: FIBPLus, DataSet Insert klappt nicht
 
Hallo,

habe zwar FibPlus gerade nicht da, aber ein INSERT Statement wird normalerweise mit Execute und nicht mit Open ausgefüht, da es ja keine Datenmenge zurückgibt.

hoika 11. Aug 2009 12:34

Re: FIBPLus, DataSet Insert klappt nicht
 
Hallo,

Zitat:

im "Normalfall" FibDataSet aufs Formular oder DatenModul ziehen
Komponenten auf Forms/DM ??
neeeh ;)
Dazu habe ich eigene DB-Klassen, dass lässt sich dann auch besser
per dUnit testen.

#MrSpock:
Bei FIBPlus ist es leider etwas anders ;)


Lösung:
Ich habe mir ein DataSet abgeleitet,
dort ein SQL: TStrings definiert, was die Daten in das SelectSQL schickt.
Und ein ExecSQL (Name in der BDE) ruft QSelect.ExecQuery auf.

Ist jetzt leider langsamer als die Original-BDE,
weil jede Query über TXDataSet läuft,
auch die Modify-Queries (I/U/D).


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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