![]() |
Datenbank: MySQL • Zugriff über: Zeos
DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DBMemo
Wie der Betreff schon sagt: In einem DBGrid kann ich einen neuen Datensatz anlegen, sodaß sich das DataSet.State in "dsInsert" befindet. Sobald ich aber zB um ein BLOB-Feld zu bearbeiten mit der Maus ein DBMemo anklicke, wird DataSet.State wieder auf dsBrowse gesetzt bzw. DataSet.Cancel intern aufgerufen.
Dieses Problem besteht nur, sofern ich nicht vorher bereits in einem anderen Feld Daten eingegeben habe, also wenn der neue Datensatz noch auf "Modified = False" steht. Daher dachte ich: setze ich doch einfach
Delphi-Quellcode:
und zwar sobald ich mit der Maus ein Blob-Feld angeklickt habe. Das geht aber leider nicht, da Modified eine ReadOnly-Eigenschaft ist. Eine andere Idee war (obschon häßlich), beim Start des dsInsert-Modus alle Blob-Felder mit einem leeren String zu füllen, damit dadurch Modified auf true gesetzt wird. Aber selbst das funktioniert nicht, da Modified wohl nur bei Tastaturanschlägen oder Mausaktionen auf True gesetzt wird.
MeinDataSet.Modified := True;
Gibt es also einen Weg bei einem Fokus-Wechsel von DBGrid auf andere Komponenten den dsInsert-Status zu behalten? |
Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB
Hallo Ansgar,
mir scheint, dein Problem ist hausgemacht. Zumindest die ZEOS Komponenten 6.5.1-alpha enthalten einen solchen Bug nicht. Eventuell hast du event handler geschrieben, in denen Post() oder Cancel() für den Dataset ausgeführt wird. Du könntest Breakpoints an den entsprechenden Stellen setzen um zu erfahren an welcher Stelle der dsBrowse Status gesetzt wird. Grüße vom marabu |
Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB
Ich habe da keinen Handler für ein Post oder Cancel eingebaut - schade sonst wär das die Lösung gewesen :)
Habe das mal genauer untersucht, indem ich eine kleine Anwendung zusammengeklickt habe mit - TClientDataset - TDataSource - TDBGrid - TDBMemo Das Clientdataset habe ich mal stumpf zur Designzeit mit Daten gefüllt. Felder: - 1 x ftInteger - 1 x ftMemo Wenn ich nun, wie in meinem erstem Posting, zur Laufzeit einen neuen Datensatz einfügen will, indem ich zB mit einem DBNavigator auf das Plus klicke, setze ich ja den TClientDataset.State auf "dsInsert". Danach: - mit Maus in das Memo-Feld im DBGrid klicken - in das "angeschlossene" DBMemo klicken, weil ich den Text dort reinschreiben will - und zack: sobald ich in das DBMemo klicke, befindet sich das DBGrid wieder im dsBrowse Modus wo also der neue (bisher leere) Datensatz futsch ist. Das Problem was ich habe, hängt also nicht mit der darunterliegenden ZEOSlib zusammen. Vielmehr frage ich mich, ob das das Standardverhalten diese DB-Komponenten sein kann oder ob ich irgendeine Propery noch setzen muß, damit der dsInsert-Modus im DBGrid behalten wird? |
Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB
Guten Morgen,
Zitat:
Zitat:
Freundliche Grüße |
Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB
Zitat:
ich habe mir eben mal den Code vom TCustomDBGrid angesehen. Dort gibt es ein OnExit das zumindest bei BDS 2006 ein Cancel des TDataSet aufruft. Aber es gibt bei den Optionen des DBGrid die Einstellung dgCancelOnExit. Setze dieses doch einfach mal auf False. |
Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB
Zitat:
Vielen Dank!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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