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, 8290 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
mfg
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!
mfg
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

mfg
Andreas
Bitte warten ..
Ähnliche Inhalte
Datenbanken
gelöst Access 2010 Abfrage erster Werktag (10)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

VB for Applications
SNMP Abfrage in EXCEL über VBA (7)

Frage von SebastianL zum Thema VB for Applications ...

Neue Wissensbeiträge
Batch & Shell

Batch - ein paar Basics die man kennen sollte

Tipp von Pedant zum Thema Batch & Shell ...

Microsoft

Restrictor: Profi-Schutz für jedes Window

(4)

Tipp von AlFalcone zum Thema Microsoft ...

Batch & Shell

Batch zum Zurücksetzen eines lokalen Profils

Tipp von Mr.Error zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft Office
Saubere HTML aus Word-Dokument (16)

Frage von peterpa zum Thema Microsoft Office ...

Router & Routing
ASUS RT-N18U mit VPN Client hinter Fritzbox - Portforwarding (15)

Frage von marshall75000 zum Thema Router & Routing ...

Hosting & Housing
gelöst Webserver bei WIX, aber DNS Server wo anders (9)

Frage von laster zum Thema Hosting & Housing ...