Entwickler-Ecke

Datenbanken - Zufgriff auf Access Tabelle, ADO; Änderungen nicht übernomme


daywalker0086 - Mi 04.06.14 08:46
Titel: Zufgriff auf Access Tabelle, ADO; Änderungen nicht übernomme
Moin an alle,
ich habe ein großen Problem mit dem Zugriff auf eine Acces Tabelle über ADO.
Was funktioniert:
ICh habe folgende Komponenten: TADOTable, TDatasource, TDBGrid, TDBNavigator
Habe alle Komponenten miteinander verbunden.
Mein Conection String in meiner ADOTable sieht folgendermaßen aus:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\c.hohmann\Documents\Geraetedb1.mdb;Persist Security Info=False
Die Table ist auf active = true gesetzt und ich bekommen somit schon zur Entwurfszeit den Inhalt meiner Tabelle aus der Datenbank im DBGrid angezeigt.
Soweit super!
Kann auch mit dem Navigator durch die einzelnen Datensätze gehen.
DAS PROBLEM:
Wenn ich im Navigator auf Datensatz hinzufügen gehe, dann macht er mir im DBGRif auch eine neue Zeile in die ich auch was eintragen kann.
Wenn ich dann bestätige oder die Zeile verlassen bleibt es auch im DBGrid stehen, aber es wird nicht in meine Access Datenbank übernommen. Auch über den Befehl:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
begin
// Werte aus Stringgrid in DB übernehmen
  with ADOTable1 do
  begin
    insert;
    FieldByName('Barcode').Value := '12345';
    FieldByName('Prüfschritt').Value := 'Widerstand1';
    Post;

  end;
  adotable1.Refresh;
end;

wird zwar das DBGRid gefüllt, wenn ich aber mein Programm schließe und weder öffne sind die Änderungen weg und in der Access DB hat sich nichts geändert.
Ich weis echt nichtmehr woran das jetzt liegen könnte, die Einbindung ging bis hierhin so einfach und dann das.
Es kommt auch keine Fehlermeldung.
Readonly ist überall auf false gestellt.

Wer hat noch eine Idee?


jasocul - Mi 04.06.14 09:11

Ich kenne mich mit ADO nicht aus, aber es sieht für mich auf den ersten Blick nach einem Rollback beim Disconnect aus.
Schau mal nach, wie deine Transactions-Steuerung eingestellt ist. Gegebenenfalls nach dem Post noch ein Commit machen.


daywalker0086 - Mi 04.06.14 10:20

Danke für die Antwort, kannst du "Transactions-Steuerung" noch etwas spezifizieren was das ist? Im Anhang mal die Einstellungen im Objektinspektor:

Kann das was mit dem Locktype zu tun haben? Der stellt sich immer wieder auf das Optimistic um wenn ich active auf true setze.


daywalker0086 - Mi 04.06.14 11:07

Nachtrag:
Es liegt an dem ltBatchoptimistic!
wenn ich auf ltOptimistic umschalte kann ich zwar die Daten in meinem DBGrid zur Entwurfszeit nichtmehr sehen, wenn ich aber
mit einem Button dies ausführe:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button10Click(Sender: TObject);

begin
// Werte aus Stringgrid in DB übernehmen
adotable1.Open;
  with ADOTable1 do
  begin
    insert;
    FieldByName('Barcode').Value := '12345';
    FieldByName('Prüfschritt').Value := 'Widerstand1';
    Post;

  end;

  adotable1.Refresh;
  adotable1.Close;
end;

Dann wird der neue Eintrag in die DB übernommen!
Juhu, mich würde trotzdem interessieren was BatchOptimistic macht oder nicht macht. Falls jemand Infos hat...


Delete - Mi 04.06.14 13:27

Schau doch einfach mal in deiner Online-Hilfe oder in den Emba-Referenz-Seiten nach:

LockType [http://docwiki.embarcadero.com/Libraries/XE5/de/Data.Win.ADODB.TCustomADODataSet.LockType] ... TADOLockType [http://docwiki.embarcadero.com/Libraries/XE5/de/Data.Win.ADODB.TADOLockType]