![]() |
Datenbank: MS-SQL • Version: 2005 • Zugriff über: ADO
TADOQuery Komponente unidirektionalen Datenmenge
Hallo,
ich bekomme einen merkwürdigen Fehler bei einer SELECT Abfrage über 2 Tabellen mit einer TADOQuery Komponente. Fehler: Zitat:
Query -> DataSource -> ClientDataSet -> DataSetProvider -> DataSet DataSet -> DataSource DataSet -> Connection Code:
Delphi-Quellcode:
Vielen Dank.
zqPers := TADOQuery.Create(nil);
with zqPers do begin Connection := Form2.ADOConnection; DataSource := Form2.DataSourceADO; CursorLocation := clUseServer; SQL.Clear; SQL.Add('SELECT * FROM Tabelle1, Tabelle2 WHERE Tabelle1.Feld1 = Tabelle2.Feld2 '); Open; end; |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Kann mir den niemand helfen?
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Das CursorLocation mal auskommentiert?
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Zitat:
Delphi-Quellcode:
geht es problemlos und wenn ich die Join Abfrage direkt durch den Server ausführenlasse, bekomme ich auch ein Ergebnis.
SQL.Text := 'SELECT * FROM Per';
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
OK. Zurück. Ich hab glaub ich gar nicht verstanden, was du da machst.
Du gibst der Query eine Connection, über die sie die Abfrage an die DB schickt. Dann gibst du ihr aber noch eine DataSource? Wieso. Sollen die zwei Tabellen über zwei "Wege" kommen? |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Also eigentlich möchte ich nur eine JOIN-Abfrage machen. Ich habe die Data Source auch weggelassen und der selbe Fehler kommt. Ich brauch ja nichts unidirektionales wenn ich nur ein SELECT machen möchte. Oder liege ich da falsch?
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Hallo,
der Fehler könnte die Query sein. Funktioniert folgendes?
Delphi-Quellcode:
SQL.Text:=
'SELECT t1.*, t2.* FROM Tabelle1 t1 INNER JOIN Tabelle2 t2 WHERE t1.Feld1 = t2.Feld2'; |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Hallo,
der Fehler der MS-SQL 2005 DB: Meldung 156, Ebene 15, Status 1, Zeile 1 Falsche Syntax in der Nähe des 'WHERE'-Schlüsselwortes. Der Code der MS-SQL 2005 DB: SELECT t1.*, t2.* FROM Per t1 INNER JOIN ZOrgPer t2 WHERE t1.pkPerID = t2.fkPerID |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Joins mit ON nicht mit Where...
kann es sein dass Du keine Primärschlüssel in den Tabellen hast? |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Und an der "alten" Syntax scheint es auch nicht zu liegen. Ich habe hier einmal ein kleines Testprojekt mit ADO auf SQLExpress 2008 gemacht, das funktioniert ohne Probleme. Bist Du ganz sicher, dass das auch wirklich der fehlerverursachende Code ist?
P.S.: Welchen DB-Treiber hast Du denn ausgewählt? |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Hallo,
mit der normalen Select-Abfrage geht ja alles problemlos. ConnectionString:
Delphi-Quellcode:
Ich greife mit ADO auf die MS-SQL Datenbank zu und schreibe es per Firebird 2.0 in eine andere aktuellere Datenbank.
Provider=SQLOLEDB.1;Password=***;Persist Security Info=True;User ID=***;Initial Catalog=datenbank;Data Source=servername
Das letzte Projekt war genau das selbe, nur habe ich auf Acces via ADO Zugegriffen. Komische Sache :? |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Also ich weiß jetzt, dass wenn ich eine ADOQuery auf die Form ziehe und damit arbeite, geht alles. Hat irgendjemand schoneinmal eine ADOQuery Kompontente im Code erzeugt? Fehlen bei mir evtl. wichtige Eigenschaften?
Kevin |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Zitat:
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Delphi-Quellcode:
So würd ich das machen und so ähnlich hast du das doch auch gemacht.
procedure test;
var q:TADOQuery; Begin q:=TADOQuery.Create(self oder nil oder ...); q.SQL.Text:='Select * From MyTable'; try q.Connection:=MyADOConnection; //gehe mal davon aus, das MyADOConnection konfiguriert auf der Form liegt q.Open; finally q.Close; End; Liegts vllt. an der Connection, dass du den Connection-String anders aufgebaut hast, als du die Connection auf die Form gezogen hast? |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Also ich habe jetzt ein 2. Projekt neu gemacht und baue dort alles Zeile für Zeile nach und dort erzeuge ich alle Querys die ich brauche und es kommt kein Fehler.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Jetzt habe ich Probleme mit der Erstellung von dem TClientDataSet.
Delphi-Quellcode:
Wenn ich den ProviderName so zuweise:
zqJuInsert := TClientDataSet.Create(zqJuInsert);
with zqJuInsert do begin ProviderName := 'Form2.DataSetProviderSQL'; CommandText := 'SELECT * FROM JU_STAMM'; Open; end;
Delphi-Quellcode:
[DCC Fehler] funktionen.pas(515): E2010 Inkompatible Typen: 'string' und 'TDataSetProvider'
515: ProviderName := Form2.DataSetProviderSQL;
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Was sagt die Hilfe dazu?
Zitat:
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Zitat:
Delphi-Quellcode:
Fehler: Fehlernder Daten-Provider oder Datenpaket
zqJuInsert := TClientDataSet.Create(Form2.DataSetProviderSQL);
with zqJuInsert do begin ProviderName := 'Form2.DataSetProviderSQL'; CommandText := 'SELECT * FROM JU_STAMM'; Open; end; |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Und das soll jetzt derselbe Owner sein? Schau nochmal genau hin.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Jetzt kommt der Fehler:
Änderung am CommandText sind nicht gestattet.
Delphi-Quellcode:
zqJuInsert := TClientDataSet.Create(Form2);
with zqJuInsert do begin Close; ProviderName := 'Form2.DataSetProviderSQL'; CommandText := 'SELECT * FROM JU_STAMM'; Open; end; |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Lies doch mal hier:
![]() |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Ja, aber das löst mein Problem nicht. Ich möchte nur wissen was ich machen muss, damit ich meinen CommandText ändern kann. Ich erzeuge bereits für jede Tabelle ein eigenes ClientDataSet.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Wie sehen denn die Options des Providers aus?
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Also alles ist auf False von den Optionen bis auf poUseQuoteChar.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Und wenn Du poAllowCommandText noch dazu nimmst? Ich kenne mich mit dem ganzen Krams auch nicht aus, habe das aber eben im Emba-Diskussionsforum gelesen.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Jetzt ist die Meldung weg, dass man den CommandText nicht ändern kann. Ich sollte wirrklich mal lieber die ganzen Eigenschaften durchschauen, bevor ich Fragen stelle.
Der Fehler "Fehlernder Daten-Provider oder Datenpaket" kommt jetzt wieder. Form2 ist doch Eigentlich Owner von ClientDataSet und DataSetProvider. Auch wenn ich das ClientDataSet im Code erzeuge? |
AW: TADOQuery Komponente unidirektionalen Datenmenge
Das sollte so sein, aber dann musst Du das "Form2." wohl auch aus dem Namen herauslassen.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
Aber wenn ich "Form2." aus dem Namen herauslasse, dann ist Form2 ja nichtmehr der Owner.
|
AW: TADOQuery Komponente unidirektionalen Datenmenge
In der Hilfe steht doch lediglich, dass beide denselben Owner haben müssen, welcher ja beim Erzeugen schon angegeben wird. Vermutlich wird der Provider dann mittels FindComponent oder so ermittelt (könnte man in den Quellen nachlesen, aber dafür fehlt mir die Zeit).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 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-2025 by Thomas Breitkreuz