Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank wird nicht aktualisiert (https://www.delphipraxis.net/135703-datenbank-wird-nicht-aktualisiert.html)

Moony 17. Jun 2009 10:54

Re: Datenbank wird nicht aktualisiert
 
Der SQL Befehl ist ja noch vorhanden:

Delphi-Quellcode:
MyDataset.CommandText
Mit Open und Close aktualisiere ich lediglich das Query. Ich könnte auch Requery aufrufen, das macht nichts anderes als Close und dann Open aufzurufen. Wenn das CommitTrans lediglich nur de Transaktion abschließt, muss ich doch das Query schließen, Öffnen und anschließend die Transaktion abschließen mit CommitTrans. Aber genau das bringt mir die besagte Fehlermeldung.

Jens Hartmann 17. Jun 2009 11:00

Re: Datenbank wird nicht aktualisiert
 
Weiß nicht genau,

aber ich meine, du musst die Query schließen, die Transaktion abschließen und anschließend die oder eine andere Query wieder öffnen, um die Daten wieder einzusehen.

Wenn du mit der selben Query, Daten speichern und öffen willst, musst Du den SQL Befehl ja immer wieder anpassen. Das habe ich immer falsch gemacht, und somit Problem bei Abfragen etc. gehabt. Ich benutze mittlerweile für jede Art eine eigen Query, und somit meine ich zu wissen,

Erst Query schließen, Transaktion abschließen, und anschließend die Query zum Anzeigen der Daten öffnen.

Also ich meine das wäre so. Wenn nicht, lasse ich mich auch gerne belehren.

Gruß Jens

Moony 17. Jun 2009 11:22

Re: Datenbank wird nicht aktualisiert
 
Aber das mache ich doch wenn ich sage Close, dann CommitTrans und dann wieder Open. Aber wenn ich das CommitTrans aufrufe gibts die Fehlermeldung, dass keine Transaktion aktiv ist.

Ich weiß nicht ob das vielleicht am Query liegt, ich aber ein TADODataSet verwende. Leider kann ich das nicht in ein Query umändern, wenn das der Fall ist, da die Anwendung viel zu komplex bereits aufgebaut ist.

Gibts denn vielleicht eine alternative dazu?

Jens Hartmann 17. Jun 2009 11:26

Re: Datenbank wird nicht aktualisiert
 
Zitat:

Zitat von Moony
wenn ich sage Close, dann CommitTrans und dann wieder Open.

Hast Du aber anders gelößt

Delphi-Quellcode:
MyDataset.Close;
MyDataset.Open;
MyConnection.CommitTrans;

hoika 17. Jun 2009 11:26

Re: Datenbank wird nicht aktualisiert
 
Hallo,

ich würde hier auch 2 Queries benutzen.

Query_Vis
=========
Anzeige-Query
Nur Open/Close

Query_DB
========
DB-Code


Ein Update läuft dann so ab.

Transaction läuft noch ... (MyConnection.StartTrans)

Delphi-Quellcode:
with Query_DB do
begin
  SQL.Clear;
  SQL.Add('Update Table 1 ... ');
  ExecSQL;
end;

Query_Vis.Close;
MyConnection.CommitTrans;
Query_Vis.Open;
Ich persönlich habe aber nicht gern Transaktionen offen.
Deshalb benutze ich kein DBGrid, somit muss die Query_Vis auch nicht ständig offen sein.
Ich lade meistens alles in ein normales TStringGrid

MyConnection.StartTrans;
Query_Vis.Open; use.
MyConnection.CommitTrans;

Damit ist die Transaktion nicht offen
und muss vor dem Update (Query_DB) geöffnet werden.



Heiko

Moony 18. Jun 2009 08:40

Re: Datenbank wird nicht aktualisiert
 
Mein Problem ist, dass ich das Programm und vor allem die Struktur und den Aufbau wie auf die Datenbank zugegriffen wird nicht umschrieben kann. Es ist zu komplex und würde viel zu viel Aufwand bedeuten. Deshalb benötige ich eine andere Lösung.

Jens Hartmann 18. Jun 2009 08:48

Re: Datenbank wird nicht aktualisiert
 
Wo liegt den dan genau dein Problem,

Ich weiß nicht so recht, was Du für eine andere Lösung brauchst. Der Vergang muss eigendlich so funktionieren. Was heißt komplex? Warum, soll das so nicht funktionieren.

Gruß Jens

Tyrael Y. 18. Jun 2009 09:07

Re: Datenbank wird nicht aktualisiert
 
Delphi-Quellcode:
Query.Open;
darf man NUR bei einer SELECT-Anweisung anwenden

Delphi-Quellcode:
Query.ExecSQL;
wendet man bei allen anderen SQL-Anwweisungen ausser SELECT an

Delphi-Quellcode:
Connection.CommitTrans;
darf man nur nach einem
Delphi-Quellcode:
Query.ExecSQL;
anwenden


Keine Ahnung, ob euch das bewusst ist, mir schien es ist euch nicht bewusst.

hoika 18. Jun 2009 09:21

Re: Datenbank wird nicht aktualisiert
 
Hallo,

Zitat:

Connection.CommitTrans darf man nur nach einem
Query.ExecSQL; machen
Unsinn, zumindestens bei der 2. Bemerkung ... ;)

Delphi-Quellcode:
XXX.BeginTransaction;
try
  with Query do
  begin
    '' select
    Open;
    try
      while not EOF do
      begin

        Next;
      end;
    finally
      Close;
    end;
  end;
finally
  XXX.EndTransaction
end;
Es kann aber wirklich sein, dass MySQL meckert,
wenn eine Transaktion bei geöffneter Query commited wird.
So etwas komt bei mir nicht vor (try finally)

An den Thread-Ersteller:
Du musst prüfen, ob eine Query noch offen ist.

Mein Link weiter vorn betraf auch DBX.
Wenn der DBX-Treiber "Mist baut", kannst du nur zu einem anderen Treiber wechseln.
Aber meistens sitzt das Problem vor dem Rechner ;)


Heiko

Moony 18. Jun 2009 09:28

Re: Datenbank wird nicht aktualisiert
 
Ich kann meine vorhandene Struktur des Programms und den Zugriff auf die Datenbank nicht ändern. Irgendwann aktualisiere ich die Datenbank, sprich ich rufe entweder ein MyDataset.Requery() oder MyDataset.Close & .Open auf. An dieser Stelle wird innerhalb meines Prozesses nicht die aktualisierte Datenmenge abgerufen, sondern mit meinen jetzigen Werten aus dem Grid überschrieben. Das ist mein Problem.
Mit dem CommitTrans habe ich probiert, aber da gibts Fehlermeldungen. Ich kann aber auch keine Transaktion beginnen ohne die DB wahrscheinlich vorher zu schließen. Auf jeden Fall gibts Fehlermeldungen wenn ich die Transaktionen versuche durchzuführen.

@Tyreal: Ich befürchte, dass hier das zusätzliche Problem liegt. Ich besitze kein Query sondern ein Dataset.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Seite 2 von 3     12 3      

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