Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Höchstens ein Datensatz kann bei dieser Unterabfrage zurückgegeben werden???

507 views
Skip to first unread message

Thomas Wenzl

unread,
Jun 11, 2001, 9:59:27 AM6/11/01
to
Hallo Zusammen!

Folgendes Problem:

Folgende SQL-Abfrage funktioniert bei der Ausführung in WinSQL, einem
Windows-Programm zum Absetzen von SQL-Statements über ODBC, tadellos.
Wenn die Abfrage aber über rs.Open in einem Visual Basic OCX ausgeführt wird,
tritt folgende
Fehlermeldung auf:

"[Microsoft][ODBC Microsoft Access Driver]Höchstens ein Datensatz kann bei
dieser Unterabfrage zurückgegeben werden!"

Dies ist die zur Fehlermeldung gehörende Abfrage:

strQuery = "SELECT
f1,f2,f3,f5,f10,f11,f12,f6,f7,f16,f18,f19,f21,f29,f34,f36,f39,f54,f55,f56,f67 "
& _
"FROM mtecs_t_Best " & _
"WHERE trim(f6)=(SELECT tex.OBJATTTEX_CVAL FROM fm_objatttex
tex, fm_objatttyp typ " & _
"WHERE tex.OBJ_ID=" & ObjId & _
" AND
tex.objatttyp_id=typ.objatttyp_id" & _
" AND typ.objatttyp_name='ID');"

An was kann das liegen? Wir haben auch schon versucht, die SQL-Abfrage
aufzusplitten, sodass keine
Unterabfrage mehr vorhanden ist, aber es tritt trotzdem der gleiche Fehler
auf...obwohl gar keine
Unterabfrage mehr vorhanden ist!?

Ich freue mich über jede Antwort!

Vielen Dank im Voraus!

Viele Grüße,

Thom@s :-))


Florian Sauer

unread,
Jun 11, 2001, 11:12:12 AM6/11/01
to
Hallo Thomas,

versuche mal deine Abfrage dahingehend zu ändern:

Where Spalte IN (Unterabfrage)
Statt
Where Spalte = (Unterabfrage)

Gruss
--
Florian Sauer

Floria...@Yahoo.com


"Thomas Wenzl" <thomas...@riwa-gis.de> schrieb im Newsbeitrag
news:9g2ih0$ot0$1...@isis.speedkom.net...

Thomas Wenzl

unread,
Jun 11, 2001, 11:22:39 AM6/11/01
to
Outlook Express hat die SQL-Abfrage leider nicht sehr schön formatiert,
deshalb hier noch ein Versuch:

SELECT f1,f2,f3,f5,f10,f11,f12,f6,
f7,f16,f18,f19,f21,f29,f34,


f36,f39,f54,f55,f56,f67 " & _
"FROM mtecs_t_Best " & _
"WHERE trim(f6)=
(SELECT tex.OBJATTTEX_CVAL
FROM fm_objatttex tex, fm_objatttyp typ " & _
"WHERE tex.OBJ_ID=" & ObjId & _
" AND tex.objatttyp_id=typ.objatttyp_id" & _
" AND typ.objatttyp_name='ID');"

Ich hab' die SQL-Abfrage in mehrere Zeilen geschrieben, damit OE nicht
wieder irgendwo umbricht. Deshalb fehlen hier jetzt auch einige
Zeilenfortsetzungszeichen.

Ich hoffe, es sieht jetzt etwas besser aus.

Viele Grüße,

Thomas

"Thomas Wenzl" <thomas...@riwa-gis.de> schrieb im Newsbeitrag
news:9g2ih0$ot0$1...@isis.speedkom.net...

Thomas Wenzl

unread,
Jun 11, 2001, 11:28:00 AM6/11/01
to
Hallo Florian,

vielen Dank für deine Antwort! Hab' deinen Lösungsvorschlag sofort
ausprobiert. Funktioniert aber leider nicht....

Hast du vielleicht noch eine andere Idee, was ich ausprobieren könnte!

Armin Zingler

unread,
Jun 11, 2001, 11:22:33 AM6/11/01
to
"Thomas Wenzl" <thomas...@riwa-gis.de> schrieb

> "[Microsoft][ODBC Microsoft Access Driver]Höchstens ein
> Datensatz kann bei dieser Unterabfrage zurückgegeben werden!"
>
> Dies ist die zur Fehlermeldung gehörende Abfrage:
>
> strQuery = "SELECT
>
f1,f2,f3,f5,f10,f11,f12,f6,f7,f16,f18,f19,f21,f29,f34,f36,f39,f54,f55,
f56,f67 "
> & _
> "FROM mtecs_t_Best " & _
> "WHERE trim(f6)=(SELECT tex.OBJATTTEX_CVAL
> FROM fm_objatttex
> tex, fm_objatttyp typ " & _
> "WHERE
> tex.OBJ_ID=" & ObjId & _ " AND
> tex.objatttyp_id=typ.objatttyp_id" & _
> " AND
> typ.objatttyp_name='ID');"


Wenn die Unterabfrage mehrere Sätze liefert, ist kein Vergleich per
"WHERE trim(f6)=.." möglich. Ein "=" geht immer auf einen konkreten
Wert und nicht auf eine Liste von Werten, die von der Unterabfrage
geliefert wird. Mit "WHERE trim(f6) IN (select..." könnte es
funktionieren (ungetestet).

Armin

Thomas Wenzl

unread,
Jun 12, 2001, 2:16:32 AM6/12/01
to
Hallo Armin,

vielen Dank für deine Antwort!

> Wenn die Unterabfrage mehrere Sätze liefert, ist kein Vergleich per


> "WHERE trim(f6)=.." möglich. Ein "=" geht immer auf einen konkreten
> Wert und nicht auf eine Liste von Werten, die von der Unterabfrage
> geliefert wird. Mit "WHERE trim(f6) IN (select..." könnte es
> funktionieren (ungetestet).

Das ist ja das seltsame, die zweite Select-Anfrage liefert genau einen Wert
zurück. Deshalb funktioniert es ja auch, wenn die Abfrage über ein Tool
abgesetzt wird.

Nur wenn das Recordset in Visual Basic dazwischen liegt funktioniert es leider
nicht.
Das Problem, dass die Abfrage nur über ein Tool und nicht Visual Basic
funktioniert hatte ich leider schon 'mal, aber in einem anderen Zusammen-
hang.

Hättest du vielleicht noch eine Idee, wie man das Problem evtl. lösen kann?

Viele Grüße,


Thom@s :-))

PS: Die Möglichkeit mit IN hab' ich schon getestet!


Hans Weil

unread,
Jun 12, 2001, 2:46:40 AM6/12/01
to
So wie das ausschaut ist es eine Access DB,

Der ODBC Treiber (WinSQL) löst den SQL anders auf als das Jet. Hast du in VB
per Jet oder ODBC die Datenbank angebunden?
Soweit ich weiss, will der eine bei Unterabfragen als Vergleichkriterium
immer einen Aggregatausdruck. Versuch die Unterabfrage mit MIN oder MAX >>>
(SELECT MAX(tex.OBJATTTEX_CVAL).

"Thomas Wenzl" <thomas...@riwa-gis.de> schrieb im Newsbeitrag

news:9g2ncu$t33$1...@isis.speedkom.net...

Armin Zingler

unread,
Jun 12, 2001, 3:36:56 AM6/12/01
to
"Thomas Wenzl" <thomas...@riwa-gis.de> schrieb

>
> Hättest du vielleicht noch eine Idee, wie man das Problem evtl.
> lösen kann?

Derzeit fällt mir nichts weiter dazu ein.

Armin

Thomas Wenzl

unread,
Jun 12, 2001, 5:07:28 AM6/12/01
to
Schade! Trotzdem Danke!

Gruß,

Thom@s :-))

"Armin Zingler" <armin....@freenet.de> schrieb im Newsbeitrag
news:ebF0oTx8AHA.1832@tkmsftngp02...

0 new messages