Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Mi 04.06.14 08:46 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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.
Einloggen, um Attachments anzusehen!
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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:
ausblenden 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...
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.06.14 13:27 
Schau doch einfach mal in deiner Online-Hilfe oder in den Emba-Referenz-Seiten nach:

LockType ... TADOLockType