Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO | Edit | Post - aktualisierbare Abfrage (https://www.delphipraxis.net/73853-ado-%7C-edit-%7C-post-aktualisierbare-abfrage.html)

marabu 25. Jul 2006 21:07

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

cltom 25. Jul 2006 21:48

Re: ADO | Edit | Post - aktualisierbare Abfrage
 
Ich habe es mittlerweile auf einem zweiten Rechner probiert, dito. Hier einfach der betreffende Teil:

Delphi-Quellcode:
  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;
Danke für Hilfe!

marabu 26. Jul 2006 07:07

Re: ADO | Edit | Post - aktualisierbare Abfrage
 
Guten Morgen,

bei mir geht es so:

Delphi-Quellcode:
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;
Da sind schon ein paar Unterschiede - kannst du sie sehen?

Grüße vom marabu

mikhal 26. Jul 2006 08:34

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

cltom 30. Jul 2006 09:53

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

marabu 30. Jul 2006 10:51

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

cltom 30. Jul 2006 14:36

Re: ADO | Edit | Post - aktualisierbare Abfrage
 
jooo!!

Gott sei's gedankt, getrommelt und gepfiffen. Es funktioniert. Danke!!

cltom 30. Jul 2006 15:46

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?

marabu 30. Jul 2006 16:26

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

cltom 30. Jul 2006 17:06

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 03:59 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz