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

Kombifeld in Abhängigkeit eines anderen füllen (odbc)

60 views
Skip to first unread message

Christa Kurschat

unread,
Nov 15, 2002, 5:48:11 AM11/15/02
to
Hallo Silke,

S. Horn <Horn_...@web.de> schrieb:

> Hallo,
> Ich habe eine Access-Datenbank(97) auf einen SQL-Server
> 7.0 umgestellt, wobei die Anwendung weiter in Access
> laufen soll und nur die Datenbanken migriert wurden.
> Nun habe ich ein Formular, in dem ein Kombinationsfeld in
> Abhängigkeit eines anderen Kombinationsfeldes gefüllt wird.
>
> Datensatzherkunft Kombinationsfeld Bnr: select
> BNR,BNR+" "+Kurzname from A_AktiveKassen
> Die Abfrage A_AktiveKassen lautet:
> SELECT DISTINCTROW T_Kassen.*
> FROM T_Kassen
> WHERE ((([Verband]=[screen].[activeform].[Verband])=True)
> AND (([BMALAND]=[Screen].[Activeform].[Land] Or IsNull
> ([Screen].[ActiveForm].[Land]))=True))
> ORDER BY T_Kassen.BNR;
>
> Die Tabelle T_Kassen befindet sich nun auf dem SQL-Server;
> ich müßte die Abfrage A_AktiveKassen also in eine Pass-
> Through-Abfrage umwandeln. Nur kann ich jetzt nicht die
> Parameter des Formular-Kombinationsfeldes Verband
> übergeben. (Zumindest weiß ich nicht wie!)
>
> Was kann ich tun, damit das Kombinationsfeld Bnr in
> Abhängigkeit der ausgewählten Einträge des
> Kombinationsfeldes Verband gefüllt wird?
>

eigentlich mußt Du nur die Tabelle aus dem SQL Server unter dem
alten Namen einbinden, also das "dbo." (oder was Du als Benutzer bei
diese Tabelle hast) davor rausnehmen. Dann sollte die Abfrage wie
gehabt laufen.

Aus Laufzeitgründen würde ich Dir empfehlen, die Abfrage ohne
Verweise auf Formulare, Screens oder sowas zu generieren:
ssql = "SELECT * FROM T_Kassen " & _
"WHERE Verband = " & [screen].[activeform].[Verband] & " =True " _
"AND BMALAND = " & [Screen].[Activeform].[Land] & " Or IsNull
(" & [Screen].[ActiveForm].[Land] & ") =True ORDER BY T_BNR"
currentdb.querydefs("A_AktiveKassen").sql = ssql
(könnte sein, daß jetzt die Klammern ein wenig durcheinander sind)

Gruß
Christa
--
Access-FAQ: http://www.donkarl.com
KnowHow.mdb: http://www.freeaccess.de
SQL-Server-FAQ: http://www.berndjungbluth.de/sqlfaq/sqlfaq.htm
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm

Christa Kurschat

unread,
Nov 15, 2002, 7:05:36 AM11/15/02
to
Hallo Silke,

S. Horn <Horn_...@web.de> schrieb:

>> eigentlich mußt Du nur die Tabelle aus dem SQL Server unter dem


>> alten Namen einbinden, also das "dbo." (oder was Du als Benutzer
bei
>> diese Tabelle hast) davor rausnehmen. Dann sollte die Abfrage wie
>> gehabt laufen.
>>

> Hallo Christa,
>
> so ganz versteh ich das jetzt nicht: Die Tabelle heißt
> nach wie vor T_Kassen und ist mit dbo.T_Kassen auf dem SQL-
> Server verknüpft.
>
> Meinst du, daß ich jetzt die Datenbank auf dem SQL-Server
> ändern soll (ohne dbo und geht das überhaupt?)?

Nein.

Wenn die Tabelle schon verknüpft ist, sollte Deine Abfrage auch wie
vorher laufen.

S. Horn

unread,
Nov 15, 2002, 7:26:03 AM11/15/02
to

>-----Originalnachricht-----
>was damit eigentlich gemeint ist, du sollst die tabelle
in deine
>access-datenbank verknüpfen und nicht versuchen eine pass-
throughabfrage auf
>den sql-server auszuführen. einfach rechts-klick in die
tabellen-übersicht
>von access und >tabellen verknüpfen< wählen. dort kannste
dann in der datei
>auswahl bei dateityp ganz unten odbc angeben.
>

Hallo,
vielleicht habe ich mich nicht deutlich genug ausgedrückt
und mich wirklich auf diese PassThrough-Abfrage versteift.

Also fast alle Tabellen sind per odbc mit der SQl-
Datenbank verknüpft, also zumindest alle Tabellen, die in
den hier genannten Abfragen vorkommen. Die Tabellen heißen
noch genau so, wie vor der Umstellung auf den SQL-Server.

Wenn ich das Formular aufrufe, bleibt das Kombinationsfeld
BNr leer, egal, welchen Eintrag ich über das Kombifeld
Verband wähle.
Wenn ich die Datensatzherkunft "select
BNR,BNR+" "+Kurzname from A_AktiveKassen" direkt in einer
Abfrage ablaufen lasse, bekomme ich einen ODBC-Fehler.

A_AktiveKassen lautet:SELECT DISTINCTROW T_Kassen.*
FROM T_Kassen
WHERE ((([Verband]=[screen].[activeform].[Verband])=True)
AND (([BMALAND]=[Screen].[Activeform].[Land] Or IsNull
([Screen].[ActiveForm].[Land]))=True))
ORDER BY T_Kassen.BNR;

wobei der Teil "SELECT DISTINCTROW T_Kassen.*
FROM T_Kassen" noch fehlerfrei abläuft, nur der Rest gibt
den ODBC-Fehler.

Daher dachte ich, ich muß eine PassThrough-Abfrage machen.
Wenn es auch ohne geht, ist mir das natürlich lieber!

Ich kenne mich leider noch nicht so gut im Access aus. Wie
kann ich den Fehler weiter eingrenzen, so daß ich weiß,
warum es einen ODBC-Fehler gibt, bzw. warum das Kombifeld
leer bleibt.

Danke für die Geduld!
Silke

Christa Kurschat

unread,
Nov 15, 2002, 8:00:34 AM11/15/02
to
Hallo Silke,

S. Horn <Horn_...@web.de> schrieb:

>> -----Originalnachricht-----


>> was damit eigentlich gemeint ist, du sollst die tabelle
> in deine
>> access-datenbank verknüpfen und nicht versuchen eine pass-
>> throughabfrage auf den sql-server auszuführen. einfach
rechts-klick
>> in die tabellen-übersicht von access und >tabellen verknüpfen<
>> wählen. dort kannste dann in der datei auswahl bei dateityp ganz
>> unten odbc angeben.
>>
>
> Hallo,
> vielleicht habe ich mich nicht deutlich genug ausgedrückt
> und mich wirklich auf diese PassThrough-Abfrage versteift.
>
> Also fast alle Tabellen sind per odbc mit der SQl-
> Datenbank verknüpft, also zumindest alle Tabellen, die in
> den hier genannten Abfragen vorkommen. Die Tabellen heißen
> noch genau so, wie vor der Umstellung auf den SQL-Server.
>
> Wenn ich das Formular aufrufe, bleibt das Kombinationsfeld
> BNr leer, egal, welchen Eintrag ich über das Kombifeld
> Verband wähle.
> Wenn ich die Datensatzherkunft "select
> BNR,BNR+" "+Kurzname from A_AktiveKassen" direkt in einer
> Abfrage ablaufen lasse, bekomme ich einen ODBC-Fehler.
>

kannst Du denn die Abfrage allein ausführen?
Ersetz zum Test mal diese ActiveScreen-Geschichten durch reale Werte
und schau ob es dann läuft.

> A_AktiveKassen lautet:SELECT DISTINCTROW T_Kassen.*
> FROM T_Kassen
> WHERE ((([Verband]=[screen].[activeform].[Verband])=True)
> AND (([BMALAND]=[Screen].[Activeform].[Land] Or IsNull
> ([Screen].[ActiveForm].[Land]))=True))
> ORDER BY T_Kassen.BNR;
> wobei der Teil "SELECT DISTINCTROW T_Kassen.*
> FROM T_Kassen" noch fehlerfrei abläuft, nur der Rest gibt
> den ODBC-Fehler.
>
> Daher dachte ich, ich muß eine PassThrough-Abfrage machen.

Eine Passthrough-Abfrage müßtest Du auch komplett zusammenbasteln.
Sie ist aber nicht notwendig.

> Wenn es auch ohne geht, ist mir das natürlich lieber!
>
> Ich kenne mich leider noch nicht so gut im Access aus. Wie
> kann ich den Fehler weiter eingrenzen, so daß ich weiß,
> warum es einen ODBC-Fehler gibt, bzw. warum das Kombifeld
> leer bleibt.
>

Das Kombifeld bleibt leer, weil die Abfrage einen Fehler liefert.

Hannes Brunner

unread,
Nov 15, 2002, 8:11:22 AM11/15/02
to
Hallo Silke,

S. Horn schrieb:

<snip>

> Hallo,
> vielleicht habe ich mich nicht deutlich genug ausgedrückt
> und mich wirklich auf diese PassThrough-Abfrage versteift.
>
> Also fast alle Tabellen sind per odbc mit der SQl-
> Datenbank verknüpft, also zumindest alle Tabellen, die in
> den hier genannten Abfragen vorkommen. Die Tabellen heißen
> noch genau so, wie vor der Umstellung auf den SQL-Server.

Hört sich so an, als ob du den Assistenten für die Umstellung verwendet
hast.

> Wenn ich das Formular aufrufe, bleibt das Kombinationsfeld
> BNr leer, egal, welchen Eintrag ich über das Kombifeld
> Verband wähle.
> Wenn ich die Datensatzherkunft "select
> BNR,BNR+" "+Kurzname from A_AktiveKassen" direkt in einer
> Abfrage ablaufen lasse, bekomme ich einen ODBC-Fehler.
>
> A_AktiveKassen lautet:SELECT DISTINCTROW T_Kassen.*
> FROM T_Kassen
> WHERE ((([Verband]=[screen].[activeform].[Verband])=True)
> AND (([BMALAND]=[Screen].[Activeform].[Land] Or IsNull
> ([Screen].[ActiveForm].[Land]))=True))
> ORDER BY T_Kassen.BNR;
> wobei der Teil "SELECT DISTINCTROW T_Kassen.*
> FROM T_Kassen" noch fehlerfrei abläuft, nur der Rest gibt
> den ODBC-Fehler.

Also wenn ich das richtig verstehe, ist A_AktiveKassen keine
PassThough-Abfrage. Probier doch mal, ob die vom Ballast befreite
Version funktioniert:

SELECT T_Kassen.*
FROM T_Kassen
WHERE Verband = screen.activeform.Verband
AND (BMALAND = Screen.Activeform.Land
OR IsNull(Screen.ActiveForm.Land))
ORDER BY BNR;

> Daher dachte ich, ich muß eine PassThrough-Abfrage machen.
> Wenn es auch ohne geht, ist mir das natürlich lieber!
>
> Ich kenne mich leider noch nicht so gut im Access aus. Wie
> kann ich den Fehler weiter eingrenzen, so daß ich weiß,
> warum es einen ODBC-Fehler gibt, bzw. warum das Kombifeld
> leer bleibt.

Das ist ein bisschen schwierig, weil deine Abfrage auf screen.activeform
verweist. Einfacher wirds, wenn du explizit das Formular angibts, also
statt screen.activeform mit forms!formularname arbeitest. Dann kannst du
nämlich bei geöffnetem Formular die Abfrage aus dem Datenbankfenster
direkt öffnen.

SELECT T_Kassen.*
FROM T_Kassen
WHERE Verband = Forms!Formularname!Verband
AND (BMALAND = Forms!Formularname!Land
OR IsNull(Forms!Formularname!Land))
ORDER BY BNR;

> Danke für die Geduld!
> Silke

HTH
Hannes

Christian Burger

unread,
Nov 15, 2002, 6:38:34 AM11/15/02
to
was damit eigentlich gemeint ist, du sollst die tabelle in deine
access-datenbank verknüpfen und nicht versuchen eine pass-throughabfrage auf

den sql-server auszuführen. einfach rechts-klick in die tabellen-übersicht
von access und >tabellen verknüpfen< wählen. dort kannste dann in der datei
auswahl bei dateityp ganz unten odbc angeben.

du kannst aber auch die passthrough-abfrage dynamisch per vba generieren,
dann könntest du wieder parameter einsetzen die angelegenheit. ist aber
etwas umständlich, sollte aber ein wenig mehr performance bringen.
zumindest, wenn die abgefragte tabelle etwas größer ist.

0 new messages