Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Excel: Tabelleninhalt in DBGrid anzeigen- wie? (https://www.delphipraxis.net/179912-excel-tabelleninhalt-dbgrid-anzeigen-wie.html)

Phillip Pendulina 10. Apr 2014 11:37

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

mkinzler 10. Apr 2014 11:44

AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
 
Öffnest Du das DataSet auch?

Phillip Pendulina 10. Apr 2014 15:52

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:
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;
Meiner Meinung nach werden die Daten von Excel über ADOConnection -> ADOQuery -> ADODatasource an das DBGrid 'durchgereicht'. Trotzdem sehe ich nur eine leere Tabelle.

Oder ist der Ansatz falsch?

Grüße - Phillip

Jumpy 10. Apr 2014 15:59

AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
 
Zitat:

Zitat von Phillip Pendulina (Beitrag 1255217)
Eine Dataset- Komponente habe ich gar nicht :pale:?

Hier ist ja die ADOQuery (ein TDataset NAchfahre) dein Dataset, also das was mkinzler gemeint hat.

mkinzler 10. Apr 2014 16:02

AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
 
Zitat:

Eine Dataset- Komponente habe ich gar nicht?
Doch, die ADOQuery-Komponente ist ein DataSet

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> + '];';

Union 10. Apr 2014 16:03

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;

Phillip Pendulina 10. Apr 2014 16:13

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:
AdoQuery1.SQL.Text:='SELECT * FROM [Tabelle1$]';
steht ja schon in meinem Code ??

Grüße - Phillip

Union 10. Apr 2014 16:21

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?

mkinzler 10. Apr 2014 16:31

AW: Excel: Tabelleninhalt in DBGrid anzeigen- wie?
 
Zitat:

AdoQuery1.SQL.Text:='SELECT * FROM [Tabelle1$]'; steht ja schon in meinem Code ??
Als ich den Beitrag erfasst habe noch nicht.

Phillip Pendulina 10. Apr 2014 21:18

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 03:01 Uhr.
Seite 1 von 2  1 2      

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