![]() |
Datenbank: oracle • Version: 9 • Zugriff über: ado
Parameter werden nicht erkannt?
Hallo zusammen, ich beiße mir jetzt einige Zeit an einem für mich unerklärlichen Fehler die Zähne aus:
Delphi-Quellcode:
Diese Abfrage Funktioniert soweit.
SQL_TEXT1='SELECT COUNT(cases.casekey) '+
'FROM CASES,CASENAME,TABLENAMETYPE '+ 'WHERE CASES.CASEKEY=CASENAME.CASEKEY '+ ' AND CASENAME.NAMEKEY=''1234567'' '+ ' AND CASENAME.NAMETYPEKEY=TABLENAMETYPE.NAMETYPEKEY(+) ' ; begin cases:=''; namekey:='1234567'; Doub_DM.ADOQuery1.Close; Doub_DM.ADOQuery1.SQL.Text:=SQL_TEXT1; // Doub_DM.ADOQuery1.parameters.parambyname('_NAMEKEY').Value:=namekey; Doub_DM.ADOQuery1.Open; if not(Doub_DM.ADOQuery1.eof) then begin.... Nutze ich aber die Parameter kommt nur noch "ORA-00937 not a single group group function"
Delphi-Quellcode:
Ich seh nicht was es ist.
SQL_TEXT1='SELECT COUNT(cases.casekey) '+
'FROM CASES,CASENAME,TABLENAMETYPE '+ 'WHERE CASES.CASEKEY=CASENAME.CASEKEY '+ ' AND CASENAME.NAMEKEY=:_NAMEKEY '+ ' AND CASENAME.NAMETYPEKEY=TABLENAMETYPE.NAMETYPEKEY(+) ' ; begin cases:=''; namekey:='1234567'; Doub_DM.ADOQuery1.Close; Doub_DM.ADOQuery1.SQL.Text:=SQL_TEXT1; Doub_DM.ADOQuery1.parameters.parambyname('_NAMEKEY').Value:=namekey; Doub_DM.ADOQuery1.Open; if not(Doub_DM.ADOQuery1.eof) then begin... Könnt Ihr mir weiter helfen? Gruß K-H |
AW: Parameter werden nicht erkannt?
ADO und Oracle? dann noch der MS ADO-Provider für Oracle - Kann eigentlich nur schief laufen.
|
AW: Parameter werden nicht erkannt?
komm bitte, keine Grundsatzdiskussion....
(Aber ich hab den Oracle-Provider im Einsatz) Selbst die älteste MS/Oracle Kombination sollte doch wohl in der Lage sein, so eine pisselige Abfrage zu interpretieren? Gruß K-H |
AW: Parameter werden nicht erkannt?
steht vielleicht paramcheck auf false?
edit... ach quatsch... namekey ist doch ein string oder, versuch es doch mal so...
Code:
Doub_DM.ADOQuery1.parameters.parambyname('_NAMEKEY').AsString:=namekey;
|
AW: Parameter werden nicht erkannt?
Kann er nicht!
Die Übergabe funlktioniert nur mit Value! Auslesen mit .AsString .AsFloat...... Gruß K-H |
AW: Parameter werden nicht erkannt?
Also ich würde an deiner Stelle die
![]()
Delphi-Quellcode:
Diese neue Syntax hat 2. Vorteile:
SQL_TEXT1='SELECT COUNT(cases.casekey) '+
'FROM CASES JOIN CASENAME ON CASES.CASEKEY=CASENAME.CASEKEY '+ 'LEFT OUTER JOIN TABLENAMETYPE ON CASENAME.NAMETYPEKEY=TABLENAMETYPE.NAMETYPEKEY '+ 'WHERE CASENAME.NAMEKEY=:NameKey'; 1.) Datenbank + Anwendung ist leichter auf andere Datenbanken portierbar und ausserdem leichter zu lesen weil man genau sieht was wie verjoinet wird. 2.) Die SQL-Anweisung wird ja zur Laufzeit von der VCL bzw. ADO geparsed. Dabei wird versucht, Parameter sowie dessen Datentypen zu ermitteln. Dabei dürfte der Parser mit der Standard JOIN Syntax besser zurechkommen als mit der proparitären JOIN-Syntax von Oracle. Um den Parameter zu befüllen würde ich folgenden Weg verwenden (weil kürzeste Schreibweise):
Delphi-Quellcode:
Doub_DM.ADOQuery1.Parameters.ParamValues['_NAMEKEY']:=namekey;
|
AW: Parameter werden nicht erkannt?
Also 9er Clients von Oracle himself sind noch nicht so der Hammer.
Was hat das Oracle Feld für einen Typ? Was ist damit, geht das?
SQL-Code:
Ich würd mal auf Verdacht den Parameternamen ohne Unterstrich verwenden. Außer es ist bekannt, dass es an anderer Stelle unproblematisch ist.
select count(dual.dummy)
from dual, dual d1, dual d2 where d1.dummy = d2.dummy and dual.dummy = d1.dummy and dual.dummy = d2.dummy(+) and dual.dummy = :_myparam |
AW: Parameter werden nicht erkannt?
Zitat:
Delphi-Quellcode:
Doub_DM.ADOQuery1.parameters.parambyname('_NAMEKEY').Value:= ''' + namekey + ''';
|
AW: Parameter werden nicht erkannt?
Also
mit Unterstrich arbeite ich seit "Jahren" da sind bisher noch keine Probleme aufgetreten. Aber ohne zickt er genauso. Nix mit Quoted, das ist ja das gute an Parametern, daß diese Hochkommaorgien wegfallen. Achja es handelt sich um einen Key der als String an die Abfrage übergeben wird, läuft in anderen Abfragen auch seit "Jahren" problemlos. Jetzt hab ich es mit einem numerischen Wert versucht und es klappt auch nicht. OK, letzte Möglichkeit, die Abfrage aus mehreren Teilen zusammengesetzt, jetzt geht's. (warum muß mann immer vom geraden weg abweichen?) Gruß K-H P.S. Ich hab mit dem ADO-Trace drauf geschaut, es sah alles ordentlich aus. |
AW: Parameter werden nicht erkannt?
Zitat:
Deine Abfrage sieht zumindest schon "mehrzeilig" aus.
Code:
SQL_TEXT1='SELECT COUNT(cases.casekey) '+
'FROM CASES,CASENAME,TABLENAMETYPE '+ 'WHERE CASES.CASEKEY=CASENAME.CASEKEY '+ ' AND CASENAME.NAMEKEY=:_NAMEKEY '+ ' AND CASENAME.NAMETYPEKEY=TABLENAMETYPE.NAMETYPEKEY(+) ' |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 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