Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DB-Grid speichert nicht alle geänderten Datensätze (https://www.delphipraxis.net/155462-db-grid-speichert-nicht-alle-geaenderten-datensaetze.html)

khh 25. Okt 2010 09:05

Datenbank: firebird • Version: 2.1 • Zugriff über: Zeos

DB-Grid speichert nicht alle geänderten Datensätze
 
Achtung Lazarus!

Hallo zusammen,

ich habe ein dbgrid welches über eine einfache query gefüllt wird.
Eine einzige tabelle keine Subquery, nichts kompliziertes.
Nun soll durch Bearbeiten eines einzelnen Feldes im Grid der Wert darin geändert werden können.

Das funktioniert soweit und die Änderungen werden auch im Grid angezeigt.
Leider wird aber jeder x-te satz in der DB nicht gespeichert.
Ich kann da leider keine Regelmässigkeit erkennen.
Nach dem erneuten Einlesen aus der DB sind einige Datensätze wieder (noch) mit dem alten Wert gefüllt.

Auch ein explizites Post nach jeder Satzänderung bringt nix :-(

Wo kann ich den Fehler suchen.
PS ich schieb den Post mal noch in LAZ-Forum


Gruss KHH

DeddyH 25. Okt 2010 09:16

AW: DB-Grid spinnt
 
Das könnte möglicherweise an ZEOS liegen. Hast Du nach dem Post einmal testhalber die Verbindung getrennt und neu aufgebaut?

Luckie 25. Okt 2010 09:18

AW: DB-Grid spinnt
 
Bitte gib deinem ersten Beitrag einen aussagekräftigen Titel, damit man weiß, um was es geht.

khh 25. Okt 2010 11:09

AW: DB-Grid spinnt
 
Zitat:

Zitat von DeddyH (Beitrag 1057626)
Das könnte möglicherweise an ZEOS liegen. Hast Du nach dem Post einmal testhalber die Verbindung getrennt und neu aufgebaut?

hab ich gerade probiert.
das Ändert nichts :-(

Die Änderungen der betroffenen DS kommen gar nicht in der DB an :-(

pustekuchen 25. Okt 2010 12:17

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Habe eine ähnliches Problem!

Wenn ich einen Datensatz über Delphi erstelle und diese dann in Delphi wieder abfrage, werden diese angezeigt.
Erstelle ich aber über die isql.exe neue Datensätze( Gleicher befehl wie in Delphi) und frag sie dannach ab, seh ich diese auch(über die selbe Abfrage wie in Delphi).
Doch ich sehe über isql.exe nicht die in Delphi erzeugten Datensätze und andersrum.
Nach einem Neustart der isql.exe und erneuter abfrage seh ich alle Datensätze. Doch in Delphi seh ich weiterhin nur die von sich selbst erstellen Datensätze auch nach einem Neustart nicht.

Ich logge mich in beiden fällen mit dem gleichen User ein.
Woran kann das liegen?

scrat1979 25. Okt 2010 12:40

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Fehlt vielleicht noch ein COMMIT nach Deinen Posts?

khh 26. Okt 2010 10:21

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
nee fehlt kein commit

DeddyH 27. Okt 2010 09:57

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Kann mal jemand den Werbebot rauswerfen? Mich nervt sowas tierisch :evil:

pustekuchen 27. Okt 2010 10:14

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Reicht doch eigentlich, wenn du den Post reportest. Der Admin wird sich dann bestimmt um weiteres kümmern ;)

BTT: Bei mir fehlt auch kein COMMIT

khh 27. Okt 2010 10:16

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
habe jetzt festgestellt, dass es ab und an die gleichen DS sind bei denen die Änderungen nicht gespeichert werden.

Bei manuell eingefügten Sätzen sind die Sätze die sich nicht ändern lassen auch willkürlich.



was kann das denn sein ?:wall:

DeddyH 27. Okt 2010 10:17

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Zitat:

Zitat von pustekuchen (Beitrag 1058081)
Reicht doch eigentlich, wenn du den Post reportest.

Auch wieder wahr.

khh 27. Okt 2010 15:39

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
also nachdem ich explizit nach jedem ds-wechsel ein Post eingefügt habe, habe ich jetzt festgestellt, dass es immer die gleichen Datensätze sind, die sich nicht ändern lassen.
Aus 66 Sätzen sind es folgende 14:
Code:

ARTIKELPREISAENDERUNG_ID   ARTPREISAENDKOPF_ID   ARTIKEL_ID   ARTIKELNUMMER   BEZEICHNUNG   NETTOPREIS   BRUTTOPREIS   NETTONEU   BRUTTONEU   AENDERPROZPOS
112   26   457   100008   Mischbrot 500g   1,4018   1,5000   1,4018   1,5000   0,0000
118   26   497   100014   kl.Weissbrot   1,6821   1,8000   1,6821   1,8000   0,0000
121   26   506   100019   Holzfäller   1,8691   2,0000   1,8691   2,0000   0,0000
122   26   500   200000   Weckmehl   1,4018   1,5000   1,4018   1,5000   0,0000
124   26   489   200002   Brezeln/Groß   0,9345   1,0000   0,9345   1,0000   0,0000
125   26   462   200003   Brötchen   0,2803   0,2999   0,2803   0,2999   0,0000
132   26   464   200010   Spitzwecken   0,2803   0,2999   0,2803   0,2999   0,0000
138   26   486   300001   Donuts Black   0,6542   0,6999   0,6542   0,6999   0,0000
142   26   501   300005   Quarkteig-Hasen   0,6542   0,6999   0,6542   0,6999   0,0000
144   26   492   400001   Bisquitböden   6,5420   7,0000   6,5420   7,0000   0,0000
145   26   475   400002   Hefezopf 600g   1,6821   1,8000   1,6821   1,8000   0,0000
149   26   478   400006   Streuselkuchen/Stück   1,4018   1,5000   1,4018   1,5000   0,0000
154   26   508   400012   Nusszopf 80cm   13,0840   14,0000   13,0840   14,0000   0,0000
156   26   495   500001   MM Sahnessa Joghurt   22,6822   24,2699   22,6822   24,2699   0,0000
ich kann nicht erkennen was daran fehlerhaft ist :-(
jemand von euch?

ach ja die id -felder sind integer, die Bezeichnung char und die Beträge decimal

shmia 27. Okt 2010 17:42

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Da werden wohl Fremdschlüssel verletzt.
Wenn z.B. das Feld "ARTIKEL_ID" in einer anderen Tabelle der Primärschlüssel ist
und eine Beziehung zwischen deiner Tabelle und der Mastertabelle besteht
und du das Feld "ARTIKEL_ID" mit einem Wert füllst zu dem es keinen Datensatz gibt,
dann sagt Firebird "Nada - iss nich" und der Datensatz bleibt unverändert.

Normalerweise sollte der Änderungs-Fehler als Exception bis zur Oberfläche durchdringen,
aber es gibt leider immer Fälle, bei denen die Fehlermeldungen aus dem DBMS verloren gehen.

khh 27. Okt 2010 17:55

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Zitat:

Zitat von shmia (Beitrag 1058170)
Da werden wohl Fremdschlüssel verletzt.
Wenn z.B. das Feld "ARTIKEL_ID" in einer anderen Tabelle der Primärschlüssel ist
und eine Beziehung zwischen deiner Tabelle und der Mastertabelle besteht
und du das Feld "ARTIKEL_ID" mit einem Wert füllst zu dem es keinen Datensatz gibt,
dann sagt Firebird "Nada - iss nich" und der Datensatz bleibt unverändert.

Normalerweise sollte der Änderungs-Fehler als Exception bis zur Oberfläche durchdringen,
aber es gibt leider immer Fälle, bei denen die Fehlermeldungen aus dem DBMS verloren gehen.

schön wärs :-)
die Tabelle hat keinerlei Abhängigkeiten.
Die Tabelle wird aus den Tabellen Artikel und Artikelpreise gefüllt.

Die Artikelid wird nur mitgespeichert um später die Peise ändern zu können.
Soweit bin ich aber noch gar nicht.
Ausserdem habe ich nur versucht das Feld bruttoneu und ,versuchweise, die Bezeichnung zu ändern :-(

wenn ich wüsste, ok ist ein Fehler im Grid, könnte ich damit leben und das Ganze anders lösen, aber so?
ich habe versuchsweise auch andere Daten benutzt.
Da kam es unter 1000 DS ebenfalls zu x Sätzen die sich nicht ändern lassen:-(

skh 27. Okt 2010 19:10

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Bei Mysql muss da "RequestLive auf True" stehen, vielleicht gibts da bei deiner Db was ähnliches...

Hier was aus der Hilfe:
RequestLive ist eine Anforderung an eine SELECT-Abfrage, eine aktualisierbare (live) oder schreibgeschützte Ergebnismenge von der Datenbank zu liefern. Der Wert false für RequestLive (Vorgabe) bewirkt, dass die Ergebnismenge immer schreibgeschützt ist. Es wird keine Anforderung an die Datenbank gesendet, eine aktualisierbare Ergebnismenge zurückzugeben. Der Wert true für RequestLive ist eine Anforderung an die Datenbank, eine aktualisierbare Ergebnismenge zurückzuliefern. Eine aktualisierbare Ergebnismenge kann dem Benutzer der Anwendung zur direkten Datenbearbeitung über visuelle Datensteuerelemente zur Verfügung gestellt werde

khh 29. Okt 2010 07:23

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
alsooo,
Fehler behoben.
Lag wohl an der Einstellung des Datasource.
Da war autoedit auf false gesetzt :-(

Ich danke euch

Gruss KHH

sx2008 29. Okt 2010 07:53

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Ich glaube fast, du speicherst die Daten wirklich über das DBGrid.
Prpgrammiertechnisch ist das natürlich falsch.
Ein DBGrid ist nur dazu gedacht, dem Benutzer am Bildschirm die Daten anzuzeigen und Änderungen zu ermöglichen.
Um Daten über das Programm abzufragen, zu ändern oder einzufügen arbeitet man direkt mit dem TDataset bzw. einer Ableitung davon (TTable, TQuery, TADOQuery, TZeosQuery,...).

Also ich würde das ändern, denn du verlirst bei deinem Umweg über TDataSource und TDBGrid natürlich auch Geschwindigkeit.

khh 29. Okt 2010 08:04

AW: DB-Grid speichert nicht alle geänderten Datensätze
 
Zitat:

Zitat von sx2008 (Beitrag 1058449)
Ich glaube fast, du speicherst die Daten wirklich über das DBGrid.
Prpgrammiertechnisch ist das natürlich falsch.
Ein DBGrid ist nur dazu gedacht, dem Benutzer am Bildschirm die Daten anzuzeigen und Änderungen zu ermöglichen.
Um Daten über das Programm abzufragen, zu ändern oder einzufügen arbeitet man direkt mit dem TDataset bzw. einer Ableitung davon (TTable, TQuery, TADOQuery, TZeosQuery,...).

Also ich würde das ändern, denn du verlirst bei deinem Umweg über TDataSource und TDBGrid natürlich auch Geschwindigkeit.

Es geht tatsächlich nur darum dem Nutzer die Daten anzuzeigen und Änderung dieser Daten zu ermöglichen.
Das Programm ansonsten nutzt im HG natürlich die (Zeos)- Query ;-)

Danke dir für deine Ausführung

Gruss KHH


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 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-2025 by Thomas Breitkreuz