![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: DBDataset, DBQuery
Edit mit DBQuery
Hallo,
folgendes Beispiel:
Delphi-Quellcode:
bekomme als Fehler: IBQueryAuftrag: Eine Datenmenge, die nur zum Lesen ist, kann nicht geändert werden.
DatamodulePlanung.IBQueryAuftrag.Close;
DatamodulePlanung.IBQueryAuftrag.SQL.Clear; DatamodulePlanung.IBQueryAuftrag.SQL.Add('select * FROM PLANNUNG where ID_AUFTRAG = ' + IntToStr(id_Auftrag)); DatamodulePlanung.IBQueryAuftrag.Open; DatamodulePlanung.IBQueryAuftrag.Edit; DatamodulePlanung.IBQueryAuftragSTATUS.AsString := ComboBoxStatus.Text; DatamodulePlanung.IBQueryAuftragSTATUSDATUM.Value := now; DatamodulePlanung.IBQueryAuftragSTATUSNAME.AsString := UnitAnmeldung.FormAnmeldung.EditNuname.Text; DatamodulePlanung.IBQueryAuftrag.ExecSQL; Habe sonst die DBQuerys für Datenbankabfragen benutzt. Für Append und Edit dann nur DBDatasets. Kann man dennoch mit einer Query einen Wert in der Tabelle ändern? Danke, Luckner |
AW: Edit mit DBQuery
Schau mal ob es eine ReadOnly-Property/Option gibt, die True ist.
Die Query müsste hier automatisch das UPDATE-Statement erstellen. (ich hoffe mal IB kann sowas) * dafür braucht es die Informationen über das SELECT, bzw. die Fields und woher sie kommen ... wurden solche Zusatzinfos deaktiviert? ** kennt die Query-Komponente das ID-Feld? braucht sie, um das WHERE erweitern zu können. * falls die Automatik nicht geht, kannst du eventuell das Update-Statemant auch manuell übergeben z.B. die pgDAC-Query-Komponenten haben haben neben .Sql noch .SqlUpdate .SqlInsert und .SqlDelete ![]() Fand hier jetzt nichts, aber vielleicht geht es da über .UpdateObject |
AW: Edit mit DBQuery
Delphi-Quellcode:
Mit ExecSQL führt man SQLs aus, Du möchtest aber einen konkreten Datensatz ändern, den zu öffnen, zu editieren und dann das SQL zum Öffnen nochmal per ExecSQL ausführen, ist nicht sinnvoll. ExecSQL nutzt man gewöhnlich für Insert, Update, Delete, Create ...
DatamodulePlanung.IBQueryAuftrag.Close;
DatamodulePlanung.IBQueryAuftrag.SQL.Clear; DatamodulePlanung.IBQueryAuftrag.SQL.Add('select * FROM PLANNUNG where ID_AUFTRAG = ' + IntToStr(id_Auftrag)); DatamodulePlanung.IBQueryAuftrag.Open; DatamodulePlanung.IBQueryAuftrag.Edit; DatamodulePlanung.IBQueryAuftragSTATUS.AsString := ComboBoxStatus.Text; DatamodulePlanung.IBQueryAuftragSTATUSDATUM.Value := now; DatamodulePlanung.IBQueryAuftragSTATUSNAME.AsString := UnitAnmeldung.FormAnmeldung.EditNuname.Text; DatamodulePlanung.IBQueryAuftrag.Post; // und nicht ExecSQL Oder sowas (ungetestet):
Delphi-Quellcode:
DatamodulePlanung.IBQueryAuftrag.SQL.Clear;
DatamodulePlanung.IBQueryAuftrag.SQL.Add('update PLANNUNG set '); DatamodulePlanung.IBQueryAuftrag.SQL.Add('STATUS = :Status, '); DatamodulePlanung.IBQueryAuftrag.SQL.Add('STATUSDATUM = :StatusDatum, '); DatamodulePlanung.IBQueryAuftrag.SQL.Add('STATUSNAME = :StatusName '); DatamodulePlanung.IBQueryAuftrag.SQL.Add('where ID_AUFTRAG = :ID_Auftrag'); DatamodulePlanung.IBQueryAuftrag.ParamByName('STATUS').AsString := ComboBoxStatus.Text; DatamodulePlanung.IBQueryAuftrag.ParamByName('STATUSDATUM').Value := now; DatamodulePlanung.IBQueryAuftrag.ParamByName('STATUSNAME').AsString := UnitAnmeldung.FormAnmeldung.EditNuname.Text; DatamodulePlanung.IBQueryAuftrag.ParamByName('ID_Auftrag').AsInteger := id_Auftrag; DatamodulePlanung.IBQueryAuftrag.ExecSQL; |
AW: Edit mit DBQuery
TDBQuery ist mir nicht bekannt.
Aber wenn ich richtig liege, benutzt du TIBQuery. Das wäre die ReadOnly - Version der Interbase Komponenten. Zum Bearbeiten nutzt man dort TIBDataSet. Frank |
AW: Edit mit DBQuery
Zitat:
|
AW: Edit mit DBQuery
Oder halt per UpdateObject.
|
AW: Edit mit DBQuery
Zitat:
Dann muss man ein Updatestatment bauen und das per ExecSQL ausführen ;-) |
AW: Edit mit DBQuery
Zitat:
Das hab ich schon gesehen. Ich bin halt ein Freund exakter Angaben. Und so sei mir der dezente Hinweis darauf (1. Zeile) gestattet... Frank |
AW: Edit mit DBQuery
Zitat:
|
AW: Edit mit DBQuery
Danke für die Hinweise. Dann werde ich die IBDataset benutzen. Hat IBQuery dann irgendwelche Vorteile gegenüber IBDataset?
Gruß, Luckner |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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