AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Edit mit DBQuery

Ein Thema von Luckner · begonnen am 23. Jul 2018 · letzter Beitrag vom 24. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2      
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#1

Edit mit DBQuery

  Alt 23. Jul 2018, 15:20
Datenbank: Firebird • Version: 2.1 • Zugriff über: DBDataset, DBQuery
Hallo,
folgendes Beispiel:
Delphi-Quellcode:
 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;
bekomme als Fehler: IBQueryAuftrag: Eine Datenmenge, die nur zum Lesen ist, kann nicht geändert werden.

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 15:41
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
http://docwiki.embarcadero.com/Libra...ery_Properties
Fand hier jetzt nichts, aber vielleicht geht es da über .UpdateObject
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Jul 2018 um 16:04 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#3

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 15:59
Delphi-Quellcode:
 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
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 ...

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;
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:02
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#5

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:03
TDBQuery ist mir nicht bekannt.
Kein Problem, da DatamodulePlanung.IBQueryAuftrag.SQL
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:03
Oder halt per UpdateObject.
Markus Kinzler
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#7

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:13
TDBQuery ist mir nicht bekannt.
Kein Problem, da DatamodulePlanung.IBQueryAuftrag.SQL
Ja, aber wenn TIBQuery readonly ist, dürften Edit und Post (wie im Ausgangspost genutzt) nicht funktionieren.

Dann muss man ein Updatestatment bauen und das per ExecSQL ausführen
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:15
TDBQuery ist mir nicht bekannt.
Kein Problem, da DatamodulePlanung.IBQueryAuftrag.SQL

Das hab ich schon gesehen. Ich bin halt ein Freund exakter Angaben.
Und so sei mir der dezente Hinweis darauf (1. Zeile) gestattet...

Frank
Frank Reim
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#9

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:24
TDBQuery ist mir nicht bekannt.
Kein Problem, da DatamodulePlanung.IBQueryAuftrag.SQL

Das hab ich schon gesehen. Ich bin halt ein Freund exakter Angaben.
Und so sei mir der dezente Hinweis darauf (1. Zeile) gestattet...

Frank
Mein Kommentar bezug sich auf himitsu Anmerkung. Derweil TIBQuery + SQL (Select ...) + Open + Edit + Post geht halt nicht
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Edit mit DBQuery

  Alt 23. Jul 2018, 16:38
Danke für die Hinweise. Dann werde ich die IBDataset benutzen. Hat IBQuery dann irgendwelche Vorteile gegenüber IBDataset?

Gruß, Luckner
  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 00:33 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