![]() |
Re: Datenbank wird nicht aktualisiert
Zitat:
SELECT macht in zusammen mit CommitTrans keinen Sinn. Zitat:
auch SELECT, INSERT usw. behandeln ich glaube Open() Edit() Insert() Append() musst mal gucken, ob es alle waren und wann welcher benutzt werden soll. |
Re: Datenbank wird nicht aktualisiert
Ich will die aktuelle Datenmenge aus der Datenbank in mein Dataset holen. Wenn nämlich in der zwischenzeit von Außen jemand Änderungen in der Datenbank gemacht hat, will ich die aktuellen Daten bekommen. Das passiert aber nicht wenn ich eine Aktualisierung auf meine Datenmenge durchführe. Mit Append, Edit, etc. beginne ich selbst Änderungen an der Datenbank, in diesem Fall will ich das aber nicht. Lediglich die aktuellen Daten aus der Datenbank in mein Dataset laden und per DBGrid anzeigen.
|
Re: Datenbank wird nicht aktualisiert
Hallo,
Tyreal Zitat:
Jede Aktion läuft ja in einer Transaktion, ob man es will oder nicht (egal ob select/insert/update). Ja nach benutztem DB-Framework gibt es noch automatische Transaktionen. Um zu verhindern, dass pro Select eine Transaktion gestartet wird, schreibt man das StartTransaction selber. Firebird ist ein schönes Bsp. Benutze ich autocommit (Bde,FIBPlus, Zeos ?), werden ein Haufen Transaktionen erzeugt, auch wenn ich nur Selects mache, das Programm wird langsamer. Zum Thread-Ersteller: Der MySQL-Engine-Typ fehlt noch. Zitat:
Zu der Fehlermeldung gibt es per Google doch eindeutige Aussagen. Dein Programm erzeugt DB-Anweisungen, die nicht mit MySQL kompatibel sind. Du musst erst mal rausbekommen, welche Query das direkt ist, z.B. indem du mal alle Schreibzugriffe rasukommentierst und dann schrittweise wieder reinnimmst. Zitat:
Zum Engine-Typ: Ist das InnoDB, werden Transaktionen unterstützt. Um Änderungen zu sehen, die ein anderes Programm (oder dein eigenes mit anderer Connection) gemacht hat, musst du mit Transaktionen arbeiten. Heiko |
Re: Datenbank wird nicht aktualisiert
1. Ich verwende keine MySQL Datenbank sondern eine Filemaker Datenbank, die über die ODBC Schnittstelle angebunden wird.
2. Während mit der Datenbank in meiner Applikation gearbeitet wird, kann es sein dass von übergeordneter Stelle aus Flags in der Datenbank gesetzt werden, so dass ein Benutzer gewisse Datensätze nicht angezeigt bekommt. Bsp.: Der Benutzer bekommt in der Maske nur Datensätze angezeigt, die er drucken darf (PrintFlag in der DB). Wenn jetzt der Admin währenddessen entscheidet, dass ein Datensatz doch nicht gedruckt werden darf, dann wird das PrintFlag weggesetzt. Somit gibt es eine Änderung an der Datenbank von aussen. Und genau diese Änderung will ich durch die Aktualisierung meiner Datenmenge aufrufen. Was normalerweise lediglich durch ein Requery getan sein sollte, ist aber hier nicht der fall. Warum auch immer. |
Re: Datenbank wird nicht aktualisiert
Hallo,
kein mysql, dann war das der andere Thread ... Nun, warum der Code so gemacht werden soll, hättest du ja mal früher sagen können :) Zitat:
Warum dann die Sache mit dem break (1. Post) Du hast doch da schon das Admin-Tool, also benutze das direkt zum Setzen. Hast du in deinem Programm überhauopt schon mal Tranktionen benutzt ? Teste doch mal mit 2 laufenden Instanzen deines Programmes, ob Prog1 die Änderungen von Prog 2 sieht (bei offen halten). Heiko |
Re: Datenbank wird nicht aktualisiert
Genau der gleiche Codeschnipsel funktioniert bei einer Access und bei der Filemaker nicht. D.h. die geänderte Datenmenge wir bei Access richtig in mein Grid geladen und bei Filemaker nicht.
Welches Admin Tool? ich habe keins. Ich besitze nur meine Applikation und muss zwischenzeitig bei gewissen Aktionen des Benutzers die Datenmenge aktualisieren, was ich mit dem Requery druchführe. Zitat:
|
Re: Datenbank wird nicht aktualisiert
Hallo,
Zitat:
Zu Access/FileMaker. Es wird wohl so sein, dass Access die Transaktionen anders verwendet wir FileMaker. Jede Aktion unter Access wird sofort in die DB geschrieben, wenn man keine Transaktionen benutzt (AutoCommit). Starte doch mal dein Programm 2mal, gehe in ein Form, wo Daten geändert werden können, Prog1 ändert, Prog2 ist offen und schaut danach nach, ob die Änderungen wirklich drinsind. Sind sie es nicht, beende Prog2, wieder starten, schauen. Sind sie immer noch nicht drin, Prog1 und Prog2 schliessen, Prog2 aufmachen, nachschauen. Wenn sie jetzt drinstehen, startet Ado beim Filemaker zu Beginn des Programms eine Transaktion und commited die entweder erst beim Programmende oder nach einem bestimmten Timeout. Dann musst du dich wohl oder übel mal mit Transaktionen / Isolation Levels beschäftigen. Eine Notlösung wäre, als Isolation Level read uncommited zu benutzen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 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