![]() |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Leider kann ich das mangels Excel auf meiner Maschine nicht überprüfen. Wenn die Treiber auf dem aktuellen Stand sind, dann vermute ich einen Fehler im ConnectionString. Kannst du den mal einstellen?
marabu |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Ich habe es mittlerweile auf einem zweiten Rechner probiert, dito. Hier einfach der betreffende Teil:
Delphi-Quellcode:
Danke für Hilfe!
Datasource1.DataSet := ADODataset1;
ADODataset1.CommandType := cmdTable; ADODataset1.CommandText := tablename; ADODataset1.Connection := ADOConnection1; ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+filename+';ReadOnly=False;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";Persist Security Info=False'; ADOConnection1.LoginPrompt := False; ADODataset1.Active := True; with ADODataset1 do begin Locate('xyz', 'abc',[]); Edit; FieldValues['lnm'] := 99; Post; end; |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Guten Morgen,
bei mir geht es so:
Delphi-Quellcode:
Da sind schon ein paar Unterschiede - kannst du sie sehen?
begin
with TADODataset.Create(self) do begin CommandType := cmdTableDirect; CursorType := ctStatic; LockType := ltPessimistic; ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=.\Mappe1.xls;' + 'Mode=ReadWrite;' + 'Extended Properties="Excel 8.0;HDR=Yes";' + 'Persist Security Info=False'; CommandText := 'SELECT * FROM [Tabelle1$A1:C5]'; Open; Locate('a', '3', []); Edit; FieldValues['c'] := 123; Post; Close; Free; end; end; Grüße vom marabu |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Umfasse mal den Dateinamen mit ", wenn ein Leerzeichen im Dateinamen vorkommt (z.B. \Eigene Dateien\...) bringt das ADO mächtig durcheinander...
Grüße Mikhal |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Liste der Anhänge anzeigen (Anzahl: 1)
Hej!
Danke für die Antworten. Irgendwie funktioniert es trotzdem nicht. Mit ReadOnly=False; im Connection String kommt immer: 'Installierbares ISAM nicht gefunden', unabhängig ob ich cmdTable oder cmdTableDirect nehme. Mit Mode=ReadWrite im Connection String kommt: 'Tabellenname nicht gefunden' bei cmdTableDirect und 'Operation muss eine aktualisierbare Abfrage enthalten' bei cmdTable; Keinen Unterschied macht es, wenn ich den Dateinamen in Anführungszeichen setze. Habe mal auch testweise eine Access-Tabelle gemacht, mit der funktioniert es auf Anhieb. Lese-Zugriff auf diese Excel-Tabelle geht auch tadellos. Hab keine Idee, woran das liegt. Habe mal ein simples Testprojekt angehängt, vielleicht hat jemand Zeit, zu schauen, ob es bei ihm geht. danke im Voraus, ligrü tom |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Ahoi Tom,
nimm den Parameter ReadOnly aus dem ConnectionString, er ist verantwortlich für den ISAM-Fehler - und weg mit IMEX=1 aus den Extended Properties, dadurch verliert der RecordSet seine Update-Fähigkeit. Grüße vom marabu |
Re: ADO | Edit | Post - aktualisierbare Abfrage
jooo!!
Gott sei's gedankt, getrommelt und gepfiffen. Es funktioniert. Danke!! |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Zusatzfrage:
wenn ich eine auf diese Weise veränderte Excel-Datei hinterher wieder auslese erhalte ich noch die Werte vor der Änderung. Erst wenn ich die Datei im Excel öffne und speichere, stimmt's. Die Änderung ist aber nach dem Post da - was spielt's hier? |
Re: ADO | Edit | Post - aktualisierbare Abfrage
Die Methode Post() macht deine Änderungen persistent - das ist völlig in Ordnung so. Vorher solltest du garnicht mit Excel auf die Daten zugreifen können, da der Provider nicht multi-user-fähig ist.
marabu |
Re: ADO | Edit | Post - aktualisierbare Abfrage
hmm, ok. Wie erreiche ich dann, dass die Änderungen übernommen werden?
Hintergrund: anhand des via Edit und Post geschriebenen Wertes soll innerhalb Excel etwas berechnet werden und das Ergebnis sofort wieder ausgelesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:55 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