![]() |
Datenbank: Excel • Version: 2010 • Zugriff über: OLEDB
Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Hallo,
ich hoffe, ich bin hier nicht OT- Excel ist ja eigentlich keine Datenbank. Ich möchte ein Excel-Arbeitsblatt in einem DBGrid anzeigen, sehe dort aber immer nur eine 'leere' Tabelle. Ich habe eine ADOConnection, eine ADOQuery, ein ADODataset, eine ADODatasource und ein DBGrid auf dem Formular. Mit diesem String möchte ich auf die Tabelle zugreifen: AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Provider=Microsoft.Jet.OLEDB.4.0; ' + 'Data Source=C:\Mappe1.xls;' + 'Extended Properties=Excel 8.0; ' + 'Persist Security Info=False'; ausserdem stelle ich das hier ein: AdoConnection1.LoginPrompt := False; AdoQuery1.Connection := AdoConnection1; DataSource1.DataSet := AdoQuery1; DBGrid1.DataSource := DataSource1; DBNavigator1.DataSource := DataSource1; Beim Öffnen der Connection kommt keine Fehlermeldung, aber ich sehe im DBGrid nur eine leere Tabelle. Hab ich hier einen Denkfehler? Ich bin für jeden Tip dankbar. Grüße - Phillip |
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Öffnest Du das DataSet auch?
|
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Hallo Markus,
danke für Deine schnelle Antwort. Eine Dataset- Komponente habe ich gar nicht :pale:? Das hier ist die komplette Prozedur:
Delphi-Quellcode:
Meiner Meinung nach werden die Daten von Excel über ADOConnection -> ADOQuery -> ADODatasource an das DBGrid 'durchgereicht'. Trotzdem sehe ich nur eine leere Tabelle.
procedure TfmHaupt.btmitExcelConnectenClick(Sender: TObject);
begin AdoConnection1.Connected:=False; AdoConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Provider=Microsoft.Jet.OLEDB.4.0; ' + 'Data Source=C:\Mappe1.xls;' + 'Extended Properties=Excel 8.0; ' + 'Persist Security Info=False'; AdoConnection1.LoginPrompt := False; AdoQuery1.Connection := AdoConnection1; DataSource1.DataSet := AdoQuery1; DBGrid1.DataSource := DataSource1; DBNavigator1.DataSource := DataSource1; try AdoConnection1.Open; except ShowMessage('Fehler beim Öffnen der AdsConnection'); raise; end; AdoQuery1.Close; AdoQuery1.SQL.Text:='SELECT * FROM [Tabelle1$]'; try AdoQuery1.Open; except ShowMessage('Fehler beim Öffnen der AdsQuery'); raise; end; end; Oder ist der Ansatz falsch? Grüße - Phillip |
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Zitat:
|
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Zitat:
Oder ist der Ansatz falsch? Nein, nur es fehlt halt etwas. Die Connection stellt nur eine Verbindung zum Exceldokument (WorkBook) her. Jetzt fehlt noch der Zugriff auf das Blatt (Sheet).
Delphi-Quellcode:
AdoQuery1.SQL := 'Select * from [' + <Hier Namen des Tabellenblattes einfügen> + '];';
|
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Wie kommst Du auf die Mappe? Die solltest Du Dir über AdoConnection1.GetTebleNames holen und dann das erste Element verwenden, anstelle Tabelle1$:
Delphi-Quellcode:
var
TableNames : TStringlist; begin TableNames := TStringList.Create; ... ADOConnection1.Active := True; ADOConnection1.GetTableNames(TableNames); ADOQuery1.SQL.Add('Select * from ['+TableNames[0]+']'); ... end; |
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
@Union:
Ich hab vergessen, zu erwähnen, daß mein Datenblatt immer nur Tabelle1 heißt. Und in verschiedenen Codeschnipseln hab ich gefunden, daß dieses Datenblatt über [Tabelle1$] angesprochen wird. Andere Bezeichnungen, z.B. ohne $, führen zu Fehlermeldungen. PS: Hab Deinen Code eben getestet, er führt bei mir zum gleichen Ergebnis (keine Fehlermeldung, aber leere Tabelle) @jumpy: ja, das sehe ich auch so :-) @mkinzler: Das
Delphi-Quellcode:
steht ja schon in meinem Code ??
AdoQuery1.SQL.Text:='SELECT * FROM [Tabelle1$]';
Grüße - Phillip |
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Blöde Frage: Stehen denn Feldnamen in der ersten Zeile des Arbeitsblatts? Siehst Du diese "Metadaten" dann im Grid? Und sind überhaupt Datensätze in dem Worksheet?
|
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
Zitat:
|
AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
@Union:
Das Datenblatt enthält Werte. An Überschriften habe ich nicht gedacht, die Werte fangen gleich 'oben links' in der Zelle A1 an. Muß ich die Tabellenköpfe dem DBGrid irgendwie mitteilen? Ich hab alle Eigenschaften von ADOConnection, ADOQuery usw wie gepostet per Code eingestellt, nichts im Objektinspektor. Braucht mein DBGrid evtl noch bestimmte Eigenschaften? @mkinzler: Ja, nach dem Posten hab ich den ersten Beitrag mehrmals editiert, z.B. den Pfad zur Excel-Datei geändert. Ich denke aber, daß das SELECT- Statement anfangs auch dort stand. Wenn nicht, dann ist es mir versehentlich abhanden gekommen. Ich wollte Euch damit wirklich nicht verwirren, sorry. Muß ich beim Öffnen bzw Aktivieren von ADOConnection, ADOQuery, ADODatasource usw eine bestimmte Reihenfolge beachten? Grüße - Phillip |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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