| Autor |
Beitrag |
rob87
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Di 18.11.08 12:31
Hallo,
ich habe folgendes kleine Problem:
Szenario: DBGrid-Formular (mit einem Query als Dataset) und paar weitere Edit-Felder...
Nun sollen beim OnExit eines Edit-Feldes, der Wert in einer bestimmten Zelle des fokusierten DBGrid-Eintrages angezeigt werden, aber dieser Inhalt soll noch nicht per Update-SQL in die DB. Soweit klar?
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.Edit1Exit(Sender: TObject); begin end; |
Ist sowas möglich. Oder muss ich da ein StringGrid nehmen??
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 18.11.08 12:33
Solange Du den Datensatz mit 'Post' nicht speicherst, wird auch nichts in die DB geschrieben. Verwende doch einfach ein TDBEdit und gib den Anwender die Möglichkeit, seine Änderungen per 'Cancel' zu verwerfen. Das TDBEdit macht das 'Edit/Append' von ganz alleine.
Um eine bessere Kontrolle über das Speicherverhalten zu bekommen, verwende ein TClientDataset under bei ADO den LockType 'ltBatchOptimistic'.
_________________ Na denn, dann. Bis dann, denn.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Di 18.11.08 12:58
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 18.11.08 13:03
_________________ Na denn, dann. Bis dann, denn.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Di 18.11.08 13:06
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Di 18.11.08 14:05
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 18.11.08 15:13
Kommt drauf an, ob die Query 'updateable' ist. Dann müsstest du aber mit Cached Updates arbeiten bzw. mit diesem LockType. Prüfe außerdem, ob die Query-Komponente eine Eigenschaft 'ReadOnly' hat, die Du ggf. auf False setzt.
Wenn das alles nicht geht, hilft nur ein TClientDataset
_________________ Na denn, dann. Bis dann, denn.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Di 18.11.08 15:20
alzaimar hat folgendes geschrieben : | Kommt drauf an, ob die Query 'updateable' ist. Dann müsstest du aber mit Cached Updates arbeiten bzw. mit diesem LockType. Prüfe außerdem, ob die Query-Komponente eine Eigenschaft 'ReadOnly' hat, die Du ggf. auf False setzt.
Wenn das alles nicht geht, hilft nur ein TClientDataset |
Ob die Query "updateable" is, weiß ich ned. Is eine TIBQuery-Komponente. Und Cached Updates bzw. LockTypes sagt mir gar nix!!
Die Query-Komponente hat keine Eigenschaft "ReadOnly". Ich verzweifle noch 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 18.11.08 15:22
Also gehts wohl nicht. Spiel mal mit TClientDataset rum.
TClientDataset->TDataProvider->TIBQuery
_________________ Na denn, dann. Bis dann, denn.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Di 18.11.08 15:32
alzaimar hat folgendes geschrieben : | Also gehts wohl nicht. Spiel mal mit TClientDataset rum.
TClientDataset->TDataProvider->TIBQuery |
Ich weiß grad ned so genau, was du meinst? Versteh ned ganz.
Edit: Hab grad was interessantes herausgefunden: Ich hab mal mit meinem DBGrid einmal ein IBQuery verbunden und einmal eine IBTable. Zusätzlich hab ich noch nen DBnavigator dazugeschaltet. Und nun das Ergebnis:
- Mit ner Table-Komponente kann ich Datensätze bearbeiten, anlegen....
- Mit ner Query-Komponente kann ich nur zwischen den einzelnen Datensätzen scrollen.
Daraus folgere ich dass man mit query-komponenten keine datensätze in dbedit-feldern bearbeiten kann, oder? 
|
|
WPs
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 18.11.08 21:57
| Zitat: | | Daraus folgere ich dass man mit query-komponenten keine datensätze in dbedit-feldern bearbeiten kann, oder |
Na,na
ich glaube weder daß Borland uns die ganzen Jahre belogen hat, noch daß ich persönlich bei editierbaren querys immer im Nirwana war.
Aber es stimmt, daß es durchaus querys gibt, die nur read-only, also nicht editierbar sind: z.B. solche über mehrere Tabellen -hast Du leider ncht angegeben-.
Also ich denke Dein Ansatz dies über ein StringGrid zu lösen wäre ok. Doch auch hier mußt Du den Satz ja nach dem-geänderten- (db)edit-Feld ändern.
Bei der Nutzung eines DB-Grids und eines DB-edit solltest Du halt im Kopf behalten, daß dies Daten-sensitive Komponenten sind. D.h. nichts anderes, daß diese zuerst einmal nur für die Sichtbarkeit der dahinterliegenden Daten sorgen.
Willst Du also in einem dbedit Feld Daten ändern und diese im DB-Grid auch ansehen, tauchen diese erst auf wenn sie geschrieben wurden.
Alzaimars Idee dies zurückzusetzen, bei Fehler etc., z.B. über einen button, wäre also die einzige Möglichkeit. Und hier trifft sich deine Arbeit wieder bei der Nutzung eines String-Grids
Dort halt 1. string[i]:=neuer Wert 2. string[i]:=alterWert
oder 1. dbedit feld ändern,verlassen -wird gepostet 2. sowas wie update feld value alter-Wert.
Eine andere Lösung kann ich nicht sehen.
Werner
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mi 19.11.08 15:44
WPs hat folgendes geschrieben : | | Zitat: | | Daraus folgere ich dass man mit query-komponenten keine datensätze in dbedit-feldern bearbeiten kann, oder |
Na,na
ich glaube weder daß Borland uns die ganzen Jahre belogen hat, noch daß ich persönlich bei editierbaren querys immer im Nirwana war.
Aber es stimmt, daß es durchaus querys gibt, die nur read-only, also nicht editierbar sind: z.B. solche über mehrere Tabellen -hast Du leider ncht angegeben-.
Also ich denke Dein Ansatz dies über ein StringGrid zu lösen wäre ok. Doch auch hier mußt Du den Satz ja nach dem-geänderten- (db)edit-Feld ändern.
Bei der Nutzung eines DB-Grids und eines DB-edit solltest Du halt im Kopf behalten, daß dies Daten-sensitive Komponenten sind. D.h. nichts anderes, daß diese zuerst einmal nur für die Sichtbarkeit der dahinterliegenden Daten sorgen.
Willst Du also in einem dbedit Feld Daten ändern und diese im DB-Grid auch ansehen, tauchen diese erst auf wenn sie geschrieben wurden.
Alzaimars Idee dies zurückzusetzen, bei Fehler etc., z.B. über einen button, wäre also die einzige Möglichkeit. Und hier trifft sich deine Arbeit wieder bei der Nutzung eines String-Grids
Dort halt 1. string[i]:=neuer Wert 2. string[i]:=alterWert
oder 1. dbedit feld ändern,verlassen -wird gepostet 2. sowas wie update feld value alter-Wert.
Eine andere Lösung kann ich nicht sehen.
Werner |
OK. Danke euch. Ich werd vermutlich heut nichts mehr mit dem Projekt machen (wurde prioritätsmäßíg nach hinten verschoben). Aber falls ich zu dem Thema mal wieder Ffagen haben sollte, meld ich mich.
Thread gilt somit von meiner Seite aus als beantwortet 
|
|
|