Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Access 2K7 - Aus einer Abfrage eine VBA Funktion mit Variablen aufrufen

Frage Microsoft Microsoft Office

Mitglied: rupi01

rupi01 (Level 1) - Jetzt verbinden

25.09.2009 um 16:37 Uhr, 8259 Aufrufe, 4 Kommentare

Ich benötige dringend Hilfe vom Könner!

Hallo Kollegen,

ich beschäftige mich gerade mit einer Access 2K7 DB.

In dieser DB habe ich eine Abfrage (View) die mir Datensätze aus den verschiednsten Tabellen anzeigt. U.a. sollen hier auch einige Felder berechnet werden. Dazu ist es aber notwendig, einen vorherigen Wert aus dem View auszulesen.

Aus dieser Abfrage, soll nun eine Funktion aufgerufen werden, der 3 (1 ist der Vergleichskey und mit 2 muss gerechnet werden) Variablen übergeben werden müssen. Hier endet mein Latein jetzt. Ich weiß, wie man eine Funktion mit einer Variablen aufruft, aber nicht mit mehreren und kann dazu auch nirgends etwas finden.

Der Aufruf lautet:

Ausdr1: Functionname([Var1], [Var2], [Var3]) -
Fehlermeldung:
Der von Ihnen eingegebne Ausdruck ist syntaktisch falsch.
Sie haben einen Operanden oder Operator nicht angegeben, Sie haben ein ungültiges Zeichen oder Komma eingegeben, oder Sie haben einen Text eingegeben, ohne diesen in Anführungszeichen zu setzen.

Das sagt viel, mir leider gar nichts!!! Ich finde mich nicht zurecht.

Vielen Dank im Voraus für die vielen Tipps.
Danke
Mit freundlichen Grüßen
ARuprecht
Mitglied: 76109
25.09.2009 um 19:07 Uhr
Hallo rupi01!

In einer Abfrage werden Argumente mit einem ";" getrennt z.B.:
"Ausdr1: Wenn(x=y;1;2)"

Gruß Dieter
Bitte warten ..
Mitglied: rupi01
29.09.2009 um 14:46 Uhr
Hallo Dieter,

danke für Deinen Tipp. Wenn ic h das mache, erhalte ich folgendes:
"Kompilierungsfehler.in Abfrageausdruck 'GETGEFKMBYTID([tbl1].[Var1];[tbl1].[Var2];[tbl2].[Var3])'

Ich weiss nicht mehr weiter. Zum besseren Verständnis möchte ich die Aufgabe etwas genauer erklären.

Ich habe eine DB von Oracle 10g (XE) nach Access 2K7 migriert. In der Oracle DB gibt es eine View, deren SQL Script so aussieht:
CREATE OR REPLACE VIEW V_TD_GESAMT
(FZGID, BEZ, TYP, KZ, STARTKM,
TINHALT, SPRIT, KAUFDAT, VKDAT, NDAUERPA,
FZGIDNR, FZGKEY01, FZGKEY02, FZGKEY03, AKTIV,
TID, TDATUM, TLITER, GESKM, BETRAG,
PREISJELITER, GEFKM, VERBRAUCH, KOSTEN100KM, THEOREICHW,
TYPID, TYPART, SPAID, SPAART)
AS
SELECT TD_FZGSTAMM."FZGID",
TD_FZGSTAMM."BEZ",
TD_FZGSTAMM."TYP",
TD_FZGSTAMM."KZ",
TD_FZGSTAMM."STARTKM",
TD_FZGSTAMM."TINHALT",
TD_FZGSTAMM."SPRIT",
TD_FZGSTAMM."KAUFDAT",
TD_FZGSTAMM."VKDAT",
TD_FZGSTAMM."NDAUERPA",
TD_FZGSTAMM."FZGIDNR",
TD_FZGSTAMM."FZGKEY01",
TD_FZGSTAMM."FZGKEY02",
TD_FZGSTAMM."FZGKEY03",
TD_FZGSTAMM."AKTIV",
TD_TANKDATEN."TID",
TD_TANKDATEN."TDATUM",
TD_TANKDATEN."TLITER",
TD_TANKDATEN."GESKM",
TD_TANKDATEN."BETRAG",
ROUND(Betrag/TLITER,3) PreisJeLiter,
Getgefkmbytid(TID, geskm, startkm) gefKM,
CASE WHEN Getgefkmbytid(TID, geskm, startkm) <> 0 THEN ROUND(TLITER*100/Getgefkmbytid(TID, geskm, startkm),3) ELSE NULL END verbrauch,
CASE WHEN Getgefkmbytid(TID, geskm, startkm) <> 0 THEN ROUND(TLITER*100/Getgefkmbytid(TID, geskm, startkm) * Betrag/TLITER,3) ELSE NULL END kosten100km,
CASE WHEN Getgefkmbytid(TID, geskm, startkm) <> 0 THEN ROUND(TINHALT/(TLITER/Getgefkmbytid(TID, geskm, startkm)),3) ELSE NULL END theoreichw,
TD_FZGTYP."TYPID", TD_FZGTYP."TYPART",
TD_SPRITART."SPAID", TD_SPRITART."SPAART" FROM TD_FZGSTAMM, TD_TANKDATEN, TD_FZGTYP, TD_SPRITART WHERE TD_FZGSTAMM.fzgid = TD_TANKDATEN.fzgid AND TD_FZGSTAMM.typ = TD_FZGTYP.typid AND TD_FZGSTAMM.sprit = TD_SPRITART.spaid

Die Prozedur GETGEFKMBYTID sieht so aus:
CREATE OR REPLACE FUNCTION Getgefkmbytid(inTid NUMBER, geskm NUMBER , startkm NUMBER) RETURN NUMBER IS
tmpVar NUMBER;

BEGIN
tmpVar := 0;

SELECT MAX(GESKM) INTO tmpVar FROM TD_TANKDATEN WHERE TDATUM < (SELECT TDATUM FROM TD_TANKDATEN a WHERE a.TID = inTid AND a.fzgid = TD_TANKDATEN.fzgid) ORDER BY TDATUM DESC;


SELECT CASE WHEN tmpVar IS NOT NULL THEN geskm-tmpVar ELSE geskm-STARTKM END INTO tmpVar FROM dual;

RETURN tmpVar;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END Getgefkmbytid;

dabei sollen die gefahrenen km nach jedem Tankvorgang berechnet werden in GETGEFKMBYTID.

Und genau das soll in einer Abfrage in Access 2K7 passieren. Da ich überhaupt nicht weiss wie, bin ich momentan nur am rumprobieren, aber eigentlich schon ziemlich weit bis auf diesen Prozedur (Modul) aufruf.
In der 1. Selectanweisung der Prozedur (Oracle) ist das Statement SELECT.......from..........where..<(SELECT.....FROM TD_TANKDATEN a where a.TID = inTID and a.FZGID = TD_TANKDATEN.FZGID) ORDER ......
Hier wird ein und die selbe Tabelle gleichzeitig 2x angesprochen einmal als "a" und einmal mit dem Tabellennamen. Genauso das mit dem "INTO" hier schieße ich den Tabellenwert in eine temporäre Variable. Und das CASE WHEN - Bedingungen innerhalb von SQL.
Wie funktioniert das in A2K7?????? geht das überhaupt?? Ich habe in meinen Büchern nix gefunden!!

Danke an alle Access-Cracks da draußen!
Mit freundlichen Grüßen
Andreas
Bitte warten ..
Mitglied: 76109
29.09.2009 um 15:26 Uhr
Hallo rupi01!

Sorry, da habe ich Dich missverstanden

Ich hatte wegen der Bezeichnung "Ausdr1:" fälschlicherweise angenommen, dass es sich um eine Abfrage-Tabelle in Access handelt. In SQL-Abfragen, werden die Argumente natürlich mit Komma getrennt.

'GETGEFKMBYTID([tbl1].[Var1],[tbl1].[Var2],[tbl2].[Var3])'

In SQL bin ich leider nicht so bewandert, aber falls mir zu Deinem Posting doch noch etwas einfällt, gebe ich Dir bescheid.



Gruß Dieter
Bitte warten ..
Mitglied: rupi01
29.09.2009 um 15:50 Uhr
Hallo Dieter,

jetzt dreh' ich mich dann im Kreis . Wenn ich mit Komma trenne laufe ich auf den Fehler vom Ursprungs-Posting!

Wenn Du etwas rauskriegst wäre das toll. Ich suche auch weiter, weiss aber schon nicht mehr wo ich noch suchen soll.

Danke für Deine Hilfe

Mit freundlichen Grüßen
Andreas
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Datenbanken
gelöst Access 2010 Abfrage erster Werktag (10)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Datenbanken
gelöst Fehler bei SQL Abfrage - Filter Funktion (2)

Frage von mschaedler1982 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...