Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO GetTableNames mit Excel falsche Werte (https://www.delphipraxis.net/76925-ado-gettablenames-mit-excel-falsche-werte.html)

Sausemann 12. Sep 2006 10:54

Datenbank: Excel • Zugriff über: ADO

ADO GetTableNames mit Excel falsche Werte
 
Hallo,
hab leider mal wieder ein Problem.
Ich greife über ADO auf eine Exceldatei zu.

Delphi-Quellcode:
ADOcon.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0' +
                          ';Data Source='+ DBPATH +
                          ';Extended Properties=Excel 8.0'+
                          ';Persist Security Info=False';
ADOcon.Open;
if ADOcon.Connected then
 begin
  ADOcon.GetTableNames(selTablename.Items);
  ...
 end;
Connection funktioniert.
Jedoch erhalte ich nicht die richtigen Tabellennamen.
- Bei einem Arbeitsblattnamen mit Bindestrich (-) wird der Tabellenname in Anführungszeichen gesetzt.
- Bei allen Arbeitsblättern wird ein $ angefügt
- Bei einem Arbeitsblatt mit festgelegten Druckbereich wird '$Druckbereich' angefügt

Gebe ich bei GetTableNames etwas falsches an, oder gibt es eine andere Funktion die ich Aufrufen kann. Kann man bei GetTableNames die Auflistung des Druckbereichs ausschalten

Danke
Sausemann

Elvis 12. Sep 2006 11:08

Re: ADO GetTableNames mit Excel falsche Werte
 
Er gibt dir die Bereiche so wie er sie selbst versteht.
Ein select macht man dort nunmal von SheetXXX$ und bei einer named Range ist es nunmal andersrum: $Rangename.
GetTableNames ist für diejenigen gedacht, die sich SQL ohne wissen der Datenquelle zusammenbauen.

Das was du da machen willst ließe sich sicherlich auch über Automation von Excel selbst lösen. (Der Excel Jet provider braucht doch auch ein installiertes Excel, oder? :gruebel: )

Sausemann 12. Sep 2006 11:42

Re: ADO GetTableNames mit Excel falsche Werte
 
Hi Elvis,

Zitat:

Zitat von Elvis
Er gibt dir die Bereiche so wie er sie selbst versteht.
Ein select macht man dort nunmal von SheetXXX$ und bei einer named Range ist es nunmal andersrum: $Rangename.

Warum spuckt mir die Funktion dann bei einer Exceldatei mit nur einem Datenblatt einmal den Tabellennamen mit '$' und einmal den Dateinamen in der Liste aus?
Außerdem:
Delphi-Quellcode:
ADOtable.TableName := selTablename.Items[selTablename.ItemIndex];
mußte dann funktionieren ... jedoch Fehlanzeige (Syntexfehler in FROM-Klausel ... bei "Select * FROM Tabelle1$" ist das ja auch logisch, oder?)

Zitat:

Zitat von Elvis
GetTableNames ist für diejenigen gedacht, die sich SQL ohne wissen der Datenquelle zusammenbauen.

wie jetzt? :gruebel: ...
Bezogen auf die "unbekannten" Tabellen, die ich Variabel einbinden möchte oder meine Unkenntnis???

Zitat:

Zitat von Elvis
Das was du da machen willst ließe sich sicherlich auch über Automation von Excel selbst lösen. (Der Excel Jet provider braucht doch auch ein installiertes Excel, oder? :gruebel: )

Ich habe gelesen, daß keine Excel-Installation notwendig ist, wenn man über ADO zugreift ... oder bin ich da auf dem Holzweg :cyclops:
Jedenfalls möchte ich vermeiden, daß Excel installiert sein muß um auf eine .xls-Datei zuzugreifen.

mikhal 12. Sep 2006 12:43

Re: ADO GetTableNames mit Excel falsche Werte
 
Da du den Jet-Treiber verwendest, solltest du die Namen in eckige Klammern fassen. Dann funktioniert es eigentlich (so macht es MS ja auch).

Grüße
Mikhal

Sausemann 12. Sep 2006 14:56

Re: ADO GetTableNames mit Excel falsche Werte
 
Zitat:

Zitat von mikhal
Da du den Jet-Treiber verwendest, solltest du die Namen in eckige Klammern fassen. Dann funktioniert es eigentlich (so macht es MS ja auch).

Grüße
Mikhal

Danke erstmal ... ist soweit klar und funktioniert auch ...
Ich füge die GetTableNames-Ergebnisse in eine Combobox (selTablename.Items) ... und da sieht es einfach *doof* aus, wenn ein $ dahinter ist oder es in Anführungszeichen aufgelistet wird.
Ich könnte die Liste auch durch ein Script anpassen ... ist das aber die einzigste Möglichkeit???
... und wie Filter ich z.B. den Eintrag mit dem Druckbereich? Nach '$Druckbereich' suchen bringt nichts, wenn eine andere Sprache in Windows eingestellt ist.

Danke Sausemann


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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 by Thomas Breitkreuz