Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Exeltabelle mit ADODataset - SQL String fehlerhaft (https://www.delphipraxis.net/166456-exeltabelle-mit-adodataset-sql-string-fehlerhaft.html)

AHolzknecht 14. Feb 2012 13:12

Datenbank: Exel • Version: 2007 • Zugriff über: ODBC

Exeltabelle mit ADODataset - SQL String fehlerhaft
 
Hallo Delphi-Praxis Community,

ich hätte eine Frage zu der ich leider nichts gefunden habe. Ich habe ganz nach Anleitung eine Verbindung über ODBC zu einer ExelDatei hergestellt. Die Anleitung habe ich aus der Tiefe der Hilfedateien geholt. Dabei wird eine ADOConnection über einen Connection String letztlich mit der Exel-Tabelle verbunden.

1)
Wie man in dem hier ausgelesenen Quelltext sieht, kann die Verbindung zu der Exel Datei wirklich hergestellt werden. Connected ist "True"! Verbindungstest gelingt ebenfalls.

________________________________________
object ADOConnection1: TADOConnection
Connected = True
ConnectionString =
'Provider=MSDASQL.1;Persist Security Info=False;User ID=Praxis;Da' +
'ta Source=DelphiADO;Mode=ReadWrite;Initial Catalog=C:\Dokumente und Einstellungen\Praxis\Eigene Dateien\Eigene Datenquellen\Exeldatei.xls'
Mode = cmReadWrite
Left = 96
Top = 64
end
________________________________________

2) Im nächsten Schritt wird ein ADODataset eingerichtet und mit ADOConnection verknüpft.
Danach kann ich im "VerbindungsTextEditor" in einem Fenster links oben Benennungen für verschiedene vordefinierte Bereiche aus der ExelTabelle, die ich einmal unter "Exel/Ansichten" definiert hatte sehen. Die sehen etwa so aus.

'Abrechnung 2009$'
'Abrechnung 2009$'Z_E06FF92C_B76F_47CF_B83D_9C3753ED7D4A_#wvu# Fi
'Abrechnung 2009$'Print_Area

Auch die tatsächlich in meiner Exel-Tabelle vorhandenen Spaltenüberschriften im Tabellenblatt "Tabelle1" - F1, F2, F5, F6 kann man sehen. Das ist doch der Beleg dafür, dass ich die Tabelle korrekt eingestellt habe. Bei der SQL Abfrage bekomme ich aber nur noch Fehlermeldungen.

Der VerbindungsTextEditor ist so konstruiert, dass man durch Eingaben oder Klick auf die vorgenannten Zeilen in den Memofeldern lins in einem Textfeld einen SQL Befehl zusammenstellen kann, der etwa folgendermassen aussieht:

"Select F1, F2 from Abrechnung 2009$"
Dieser Befehl führt zu folgender Fehlermeldung
"[Microsoft][ODBC-Treiberfür Excel] Syntaxfehler In Abfrage. Die Abfrage ist unvollständig"

Die Variante "select Index, RE_Datum from Rechnungen$Print_Area"
führt zu folgender Fehlermeldung
[Microsoft][ODBC-Treiberfür Excel] Syntaxfehler in FROM-Klausel

Ich würde erwarten, dass ich auch ein Tabellenblatt insgesamt einstellen kann. Was mache ich falsch?

(Bin am Nachmittag wieder on)

Mit Dank vorab für eine Antwort und
vielen Grüßen,

Alfred

AHolzknecht 14. Feb 2012 13:13

AW: Exeltabelle mit ADODataset - SQL String fehlerhaft
 
P.S. Sorry, ich wollte die Quelltextzeilen farbig hervorheben. Jetzt finden sich in dem Text Tags, die nicht zum Quelltext gehören "COLOR blue" etc.

jobo 14. Feb 2012 13:18

AW: Exeltabelle mit ADODataset - SQL String fehlerhaft
 
Ich würde schon mal vorschlagen, eckige Klammern um Tabellen und Feldnamen zu machen, besonders gut geeignet bei SPace, Umlauten usw.

Dann für den Anfang lieber ein "Select *" und schauen, wie ADO die Felder nennt.

Dann hab ich noch dunkel in Erinnerung, dass die angezeigten Sheetnamen von der internen VBA Benennung abweichen (nicht nur durch das $), normalerweise ist das 1:1, aber wenn man mit Kopieren und Umbenennen von Sheets anfängt, dann eben nicht mehr...

AHolzknecht 15. Feb 2012 10:03

AW: Exeltabelle mit ADODataset - SQL String fehlerhaft
 
Heureka!

Hallo Jo,

vielen vielen Dank für Deine Empfehlung. Mit den von Dir vorgeschlagenen eckigen Klammern kann ich die Verbindung zur Exel-Tabelle herstellen.

Folgender String funktioniert: "Select F3 from [Abrechnung 2009$]".

Ich werde noch präzisere Angaben machen für den Fall, dass es noch jemanden gibt, der sich dafür interessiert. Hier kann ich bis jetzt nur einen definierten Bereich ".....$" darstellen. Ob man ein ganzes Tabellenblatt auch wählen kann, weiss ich nicht nicht. In einem Tutorial wurde gesagt, dass die Bereiche keine Leerzeilen haben dürfen und Spalten nur einen Datentyp, keine Vermischung. Ich könnte damit schon leben. Die hier vorliegende Tabelle hält sich an all diese Regelungen nicht.

Nochmals Dank und Gruß,

Alfred

jobo 15. Feb 2012 10:40

AW: Exeltabelle mit ADODataset - SQL String fehlerhaft
 
Zitat:

Zitat von AHolzknecht (Beitrag 1151161)
Heureka!
..
Ich werde noch präzisere Angaben machen für den Fall, dass es noch jemanden gibt, der sich dafür interessiert.
..
In einem Tutorial wurde gesagt, dass die Bereiche keine Leerzeilen haben dürfen und Spalten nur einen Datentyp, keine Vermischung.
..
Ich könnte damit schon leben.
..

Mach es doch einfach, die Leser freuen sich.

"nur ein Datentyp usw."
Dir ist hoffentlich klar, dass Du Dich auf dünnem Eis bewegst. Excel ist keine Datenbank. Die Möglichkeit, es per SQL abzufragen ist u.U. praktisch, aber die beschriebenen Voraussetzungen gibt es nicht, weil MS zu faul war, das zu implementieren.
In Excel kannst Du den letzten Sch.. reinquetschen, und wenn man es nicht explizit selbst machst, macht Excel es dank der wundervollen Automatik und rät munter vor sich hin.
Was soll ein typbasierendes Objekt wie ein Dataset mit solchen Daten anfangen?

p80286 15. Feb 2012 10:56

AW: Exeltabelle mit ADODataset - SQL String fehlerhaft
 
Wie wäre es wenn Du versuchst über OLE an Excel zu kommen?
Dann hast Du die Treiberhampelei mit ODBC nicht.
Und wie Jobo schon erwähnte, Excel ist nun mal keine Datenbank.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.

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