AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DBMemo
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DBMemo

Ein Thema von anse · begonnen am 26. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
194 Beiträge
 
Delphi 11 Alexandria
 
#1

DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DBMemo

  Alt 26. Jan 2007, 00:00
Datenbank: MySQL • Zugriff über: Zeos
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
MeinDataSet.Modified := True; 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.

Gibt es also einen Weg bei einem Fokus-Wechsel von DBGrid auf andere Komponenten den dsInsert-Status zu behalten?
Ansgar Becker
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB

  Alt 26. Jan 2007, 07:41
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
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
194 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB

  Alt 27. Jan 2007, 23:57
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?
Ansgar Becker
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB

  Alt 28. Jan 2007, 07:33
Guten Morgen,

Zitat von marabu:
Zumindest die ZEOS Komponenten 6.5.1-alpha enthalten einen solchen Bug nicht.
das war die Kurzfassung. Getestet hatte ich so, wie du es in deinem letzten Beitrag beschreibst.

Zitat von anse:
Das Problem was ich habe, hängt also nicht mit der darunterliegenden ZEOSlib zusammen.
Wer bin ich, dass ich dir zu widersprechen wage?

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB

  Alt 28. Jan 2007, 07:46
Zitat von anse:
... Gibt es also einen Weg bei einem Fokus-Wechsel von DBGrid auf andere Komponenten den dsInsert-Status zu behalten?
Hai anse,

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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
194 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: DBGrid verliert dsInsert-Status bei Fokus-Wechsel auf DB

  Alt 28. Jan 2007, 10:10
Zitat von Sharky:
Aber es gibt bei den Optionen des DBGrid die Einstellung dgCancelOnExit. Setze dieses doch einfach mal auf False.
Man bin ich dumm... Du hast recht, damit ist das Problem behoben und ich habe einen Bug weniger!

Vielen Dank!!
Ansgar Becker
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:08 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