Autor Beitrag
sekai
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 08.02.09 15:20 
Hallo,

ich habe folgendes Problem:

nach dem Einbinden einer Access Datenbank in Delphi 7 (in eine Kundenstammdaten-Kartei),
werden Änderungen und neue Eingaben automatisch in die Datenbank übergeben und gespeichert.

Da dies aber von meiner Seite her nicht geplant ist (Quelltext mäßig), vermute ich, dass es 'irgendeine' Einstellung
in Delphi gibt, die dafür sorgt, dass die Datenbank automatisch erneuert wird, sobald eine
Änderung vorgenommen wird.

Momentan greife ich über eine ADOConnection auf die Datenbank zu, über eine ADODataSet-Abfrage auf
spezielle Tabellen und einer dazugehörigen DataSource.
Die Anzeige der Felder erfolgt an Hand von DBEdit-Felder.

Daher meine Bitte, ob mir vielleicht jemand sagen kann, an welcher Einstellung das Problem liegen könnte.

Vielen Dank im Voraus.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 08.02.09 16:52 
Hallo und :welcome: hier im Forum!

Ich würde sagen, genau dafür sind die visuellen DB-Komponenten da. Eben damit man das nicht selbst in die DB eintragen muss. Wenn du an einem Eintrag etwas änderst, dann ginge diese Änderung ja verloren sobald du zu einem anderen Eintrag wechselst, wenn das nicht übernommen würde.

Wie genau soll das denn ablaufen? Mehrere Einträge ändern und erst dann in die Datenbank übernehmen oder wieder verwerfen?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 08.02.09 17:52 
Von ADO habe ich leider nicht die meiste Ahnung, aber schau mal, was man an der Transaktionssteuerung so einstellen kann.
sekai Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 08.02.09 19:30 
Danke, Jaenicke.

Und genau darum geht's.

Wenn ich einen Kunden habe und bei ihm zum Beispiel die Adresse ändern möchte, dann ist es ein Eingriff in einen bestehenden Datensatz, so dass Daten verloren gehen könnten.
Also möchte ich, bevor der Datensatz endgültig in der Datenbank aktualisiert / gespeichert wird eine Bestättigung erhalten, dass die Änderung auch wirklich gewünscht und übernommen werden soll.

Um das mal mit Grafiken zu unterstützen:

user defined image

Mal vom Design abgesehen ist das in Etwa das Prinzip, ich habe eine grafische Oberfläche für den Bediener.
Nun möchte dieser den Kundennamen auf "Musterfrau" ändern, dazu geht er auf 'Speichern', was folgende Situation hervorbringt:

user defined image

Jetzt stellt er aber fest, dass aus welchen Gründen auch immer, die Änderung nicht vorgenommen werden soll,
und betättigt die Abbruch funktion:

user defined image

Die aber nicht funktioniert, da Änderungen ohne Speichern übernommen werden und somit eine Speichern-Funktion 'überflüßig' gemacht wird.

Das würde ich gerne abstellen und lieber den manuellen Weg gehen.

----------------------------------------------------------------------------------

Hallo DeddyH,

mit der Transaktionssteuerung habe ich noch keinerlei Erfahrungen gesammelt.
Aber ich schau mal, ob ich damit ein Stück nach vorne komme.

Danke.

Edit: Leider nicht geklappt, aber danke!
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 08.02.09 20:32 
Leider weiß ich nicht genau, wie Du auf die DB zugreifst (über TADODataset?). Wenn ja, gibt es da ja so schöne Ereignisse (BeforePost), wo Du noch Einfluss nehmen könntest.
sekai Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 13.02.09 14:52 
Hallo DeddyH,

ADODataSet ist richtig, hab ich im ersten Post sogar gesagt.
Ich vermute mit deinem BeforePost, bin ich auf dem richtigen Weg, nur leider fehlt mir der entscheidende Hinweis,
da es leider nur mit einem Abort; nicht getan ist.... :(

Hast du vielleicht einen Tipp für mich?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 14.02.09 12:47 
Wie ich schon sagte bin ich nicht der ADO-Experte. Aber es müsste doch im Prinzip so funktionieren:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.ADODataset1BeforePost(DataSet: TDataSet);
begin
  if MessageBox(Handle,'Änderungen speichern?','Bestätigen',MB_YESNO or MB_ICONQUESTION) <> idYes then
    Abort;
end;
aladin60
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20



BeitragVerfasst: So 15.02.09 19:41 
Schau mal in der Delphi-Hilfe nach TADODataSet.Cancel....

Bernd.