Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL-Abfrage in Excel-Tabelle via ADO mit Parameter (https://www.delphipraxis.net/183210-sql-abfrage-excel-tabelle-via-ado-mit-parameter.html)

humbuck 19. Dez 2014 16:05

Datenbank: Excel/Access • Version: 2003 • Zugriff über: ADO/ODBC

SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Moin, moin,

weiß irgendjemand, ob und wie man ein SQL-Script formulieren muss, um bei einer SQL-Abfrage via ADO-Komponente, Verbindung via ODBC, auf eine EXCEL-Tabelle zugreifen zu können? Das von mir verwendete Script arbeitet mit Access einwandfrei (allerdings JET4).

Das SQL Script:

SELECT [Standbeschriftung.ID] AS ID, [Standbeschriftung.AdressSortierung] AS AdressSortierung, [Standbeschriftung.Halle] AS Halle, [Standbeschriftung.StandNr] AS StandNr, [Standbeschriftung.Blendentext] AS Blendentext, [Standbeschriftung.Firmensitz] AS Firmensitz, [Standbeschriftung.Standleistung] AS Standleistung, [Standbeschriftung.OAS] AS OAS
FROM [Standbeschriftung]
WHERE
Standbeschriftung.Halle LIKE :Halle

Verwende ich ein Wildcard-String z.B. '%1%' oder ähnlich anstelle des Parameters :Halle, mault die ADO-Komponente nicht bei der Abfrage der EXCEL-Tabelle.

Und sonst erscheint immer die fiese Fehlermeldung:
Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.
Und das passiert, nachdem das SQL-Script an die Komponente übergeben und ExecSQL ausgeführt wurde.

Muss oder kann man im Vorwege die Params vorbereiten um z.B. den DataType vorzugeben? Bzw. welchen DataType muss ich für die Excel-Tabelle ansetzen? Oder wie, oder was, oder geht das mit der Paramterübergabe mit Excel nicht.

Help, help, please...

Bernhard Geyer 19. Dez 2014 16:17

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Auf Excel über ADO und ODBC? Komplizierter geht nicht mehr?

Wenn schon dann über ADO und der JET-Engine "direkt" drauf. Dürfte weniger Probleme verursachen als den Umwegü ber ODBC zu gehen.

humbuck 19. Dez 2014 16:41

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Würde ich ja gerne machen. Aber wie kann ich das mit den Ado-Komponenten einstellen?

Über Jet 4.0 OLE kann ich nur Access-DB ansprechen...:?

Bernhard Geyer 19. Dez 2014 16:48

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Passenden Connectionstring aufbauen: http://www.connectionstrings.com/excel/

humbuck 19. Dez 2014 17:05

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Das hilft mir leider nicht weiter.

Es lässt sich ja eine Verbindung zu Excel aufbauen. Das löst aber immer noch nicht das Problem...

kompi 20. Dez 2014 06:54

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Die Ado Komponente meckert, weil sie den Parameter :Halle nicht auflösen kann. Diese Parameter muss man bei geschlossener Query zunächst einmal setzen.
Ich gehe dabei folgendermaßen vor:
Delphi-Quellcode:
var
  param : Tparameter;
begin
  with abfrage do begin
    Close;
    SQL.clear;
    SQL.add(sqlstring);
    param := Parameters.Parambyname('Halle');
    param.Datatype := ftstring;
    param.value := 'Die Halle';
    execsql;
  end;
end;
Anschließend sollte Adoquery nicht mehr meckern.

Im übrigen ist dein SQL String etwas lang geraten. Es reicht völlig die folgende Abfrage:

Select ID, AdressSortierung,...
from Standbeschriftung
where Halle like :Halle;

Ich würde jedoch den Parameter :Halle durch einen anderen Ausdruck ersetzen. Es könnte sein, dass die Komponente durch die zweimalige Verwendung desselben Wortes etwas durcheinander kommt.

Gruß Kompi

humbuck 21. Dez 2014 02:14

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Zitat:

Zitat von kompi (Beitrag 1284159)
Die Ado Komponente meckert, weil sie den Parameter :Halle nicht auflösen kann. Diese Parameter muss man bei geschlossener Query zunächst einmal setzen.
...

Hallo Kompi,

erst mal vielen Dank für deine Antwort. Ist nachvollziehbar, was du geschrieben hast. Ahnte ich ja schon.
Leider muss ich mir dann allerdings für meinen Bedarf programmiertechnisch etwas ausdenken, um den Datentyp vorher herauszubekommen. Sprich: SQL-Script vom Programm analysieren lassen und dann die ermittelten Daten an die Query-Komponente übergeben.
Danach erst SQLExec....

Dann wird ich mal loslegen...

p80286 21. Dez 2014 06:56

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
SQLExec? Ein
Delphi-Quellcode:
Query.Open
wäre hier wohl richtiger?

Gruß
K-H

Dejan Vu 21. Dez 2014 11:09

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Zitat:

Zitat von humbuck (Beitrag 1284246)
Sprich: SQL-Script vom Programm analysieren lassen und dann die ermittelten Daten an die Query-Komponente übergeben.

Woher bekommst Du den die Query-Anweisung? Wenn das dynamisch zusammengebaut ist, weiss der Zusammenbauer ja, was für ein Datentyp der Parameter haben muss.

humbuck 21. Dez 2014 19:26

AW: SQL-Abfrage in Excel-Tabelle via ADO mit Parameter
 
Zitat:

Zitat von p80286 (Beitrag 1284253)
SQLExec? Ein
Delphi-Quellcode:
Query.Open
wäre hier wohl richtiger?

:?

Hmmm... Wohl kaum. Erst SQLExec und danach Open... Das ist die Reihenfolge.

Zitat:

Zitat von Dejan Vu (Beitrag 1284273)
Woher bekommst Du den die Query-Anweisung? Wenn das dynamisch zusammengebaut ist, weiss der Zusammenbauer ja, was für ein Datentyp der Parameter haben muss.

:) Der 'Zusammenbauer' weiß das vielleicht... . Der brauch dann aber kein Script mit Parameterübergabe. Das brauch nur der, der es nicht weiß. Und der darf dann nicht im Script rumpfuschen.
Ergo: Das Programm muss das dann wissen. :wink: Und das klappt jetzt. War ein bissel getippe, um alle möglichen Variationen eines SQL-Scriptes zu berücksichtigen... aber...

funzt! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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