![]() |
Datenbank: Paradox / Nexus • Zugriff über: BDE / Nexus Embedded Server
DBGrid bei BDS2006 verhält sich anders als unter D5 ?
Hallo Leute,
ich hab hier ein Problem bei dem ich nicht so wirklich weiterkomme. Die Suche in der DP hat auch nichts verwertbares gebracht. Vielleicht hat jemand ne Idee ?? zum Problem : Bei einer bestehenden Software welche ursprünglich mal mit D5 entwickelt wurde kommt es nach der Umstellung auf BDS 2006 zu Fehlern in einem DBGrid. Der Quellcode wurde nur auf BDS2006 angepasst. Der Zugriff erfolgt nach wie vor über die BDE. Auf der linken Seite hab ich ein DBGrid mit 3 Spalten / Read only zum Anzeigen und auswählen einzelner Datensätze. Die Spalte Termin gehört zum Primärschlüssel, die 2. Spalte wird berechnet (Termin Ende), Bezeichnung ist ein VarChar-Feld. Auf der rechten Seite habe ich verschieden Controls zum ändern anderer Daten des Datensatzes (verschiedene EditControls, DBComboboxen usw.) Wenn ich Daten in den Controls ändere zeigt der Indikator des DBGrid an das er im Edit-Modus ist. Wechsle ich jetzt in einen anderen Datensatz werden die Daten korrekt übernommen. Klicke ich im DBGrid nach Änderung von Daten aber auf keinen Datensatz (der freie Bereich unter den Datensätzen) löscht er mir das Feld Termin (NULL), alle anderen Daten bleiben erhalten und sind in der Datenbank (=dsBrowse). :shock: Das kuriose ist, daß unter D5 diese Probleme nicht auftauchen. Erst bei BDS 2006 tritt der Fehler auf. An der BDE kanns eigentlich auch nicht liegen da ich die Anwendung komplett auf NEXUS umgestellt habe und der Fehler dort genauso auftritt. Ich hab auch schon sämtliche Events der Datasourcen und Querys lahmgelegt. Gleiches Verhalten. :wall: Ist so ein Fehler vom DBGrid bekannt ? Irgendwelche anderen Ideen ?? |
Re: DBGrid bei BDS2006 verhält sich anders als unter D5 ?
Hallo,
ich kann dir berichten, dass bei D7 ein Klicken in den freien Bereich des Grids keine Speicheraktion auslöst. Wenn du also bei D5 und D2006 unterschiedliches Verhalten beobachtest, so könntest du vielleicht durch das Abfangen des Events OnMouseUp() ein Gleichverhalten sicher stellen:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.DBGridMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var cell: TGridCoord; begin with Sender as TDBGrid do cell := MouseCoord(X, Y); // mouse click below last record if cell.X + cell.Y < 0 then begin // ... end; end; |
Re: DBGrid bei BDS2006 verhält sich anders als unter D5 ?
Hallo Marabu,
danke für Deine schnelle Antwort. Ich habe das Problem mal in ein kleines Testprojekt gepackt (..ich dachte ich bin zu blöd) und dort kann ich das Problem eindeutig nachstellen. Die Methode im MouseUp des DBGrid greift leider zu spät. Der Wert wird gelöscht. Dabei wird der Wert des DBGrid (..und das entsprechende Feld) gelöscht welcher zuletzt im Grid markiert war. Im Programm war das das erste Feld (Termin) da ich RowSelect auf true hatte. Wie gesagt tritt das nur unter 2006 auf, D5 ändert mir nichts an den Daten. mfg ConstantGardener |
Re: DBGrid bei BDS2006 verhält sich anders als unter D5 ?
Du hast doch die Quell-Codes der Komponente TDBGrid - vielleicht kannst du mit WinMerge oder etwas ähnlichem einen Unterschied in der Implementierung lokalisieren.
Auch eine Suche in der CodeGear Quality Central ist bestimmt nicht verkehrt. |
Re: DBGrid bei BDS2006 verhält sich anders als unter D5 ?
@Marabu : Ja, ich mach mich mal auf in die Tiefen der VCL. :cyclops: Ich dachte Du hast evtl. den Code im Kopf. :zwinker: Danke erstmal.
[Galgenhumor on] Was mich wundert ist, daß noch niemand außer mir hier diesen Fehler festgestellt hat. Meine Kunden haben ihn sofort gefunden. [/Galgenhumor off] [edit] ...und da ist er wieder 8) mit einem Workaround für das Problem. Da wie oben schon geschrieben MouseUp und MouseDown zu spät kommen habe ich mal
Delphi-Quellcode:
probiert. Und siehe da, es funzt. Ob das jetzt aber der Weißheit letzter Schluß ist ???
procedure TForm_Test.DBGrid1Enter(Sender: TObject);
begin DBGrid1.DataSource.DataSet.CheckBrowseMode; end; mfg Constant Gardener |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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