2016-05-18 6 views
0

Ich versuche, durch vba sq im Zugriff auszuführen, aber eine Fehlermeldung "Extra) in Abfrageausdruck '0)'". Es folgt die Abfrage-Ausdruck:sql vba Abfrageausdruck Syntaxfehler

mnthfld = "SELECT IIf([issuedate] <= #" & useDateUpper & "#," & _ 
    "IIf([expirydate] <= #" & useDateUpper & "#, 0, IIf([expirydate <=#" & useDateUpper & "#," & _ 
    "([expirydate]-#" & useDateUpper & "#+1)/([expirydate]-[effectivedate]+1),[grosspremium]),0),0) as 'EP M" & _ 
    Format(useDateLower, "mm yyyy") & "' FROM tblEpData" 

Jede Hilfe ist willkommen. Meine Ahnung ist, dass ich Klammern falsch in den Subtraktions- und Divisionsteilen verwende.

UPDATE:

Snapshot des mnthfield Zeichenfolge auf eine Iteration:

IIf([issuedate] <= #11/30/2015#,IIf([expirydate] <= #11/30/2015#, 0, IIf([expirydate <=#11/30/2015#,([expirydate]-#11/30/2015#+1)/([expirydate]-[effectivedate]+1),[grosspremium]),0,0)) as [EP M11 2015] 
+0

sofort nach mnthfld setzen, verwenden Sie 'msgbox mnthfld' die gesamte Zeichenfolge anzuzeigen, die Sie ausgedacht haben und Post, die so ist es einfach Syntaxfehler zu erkennen ... – Dave

+0

Die Auswahl und aus Befehle werden aus dem Snapshot weggelassen, dies ist jedoch nicht die Ursache des Fehlers. – zkhan

+0

mindestens ein '[expirydate]' fehlt das schließende ']' ... – Dave

Antwort

1

eine ] in Anweisung [expirydate <=#" & useDateUpper und entfernen In der ,0 von [grosspremium]),0 funktionieren sollte. Letzte Abfrage wie folgt aussieht:

SELECT 
IIf 
(
    [issuedate] <= #11/30/2015#, 
    IIf 
    (
     [expirydate] <= #11/30/2015#, 
     0, 
     IIf 
     (
      [expirydate] <=#11/30/2015#, 
      ([expirydate]-#"11/30/2015"#+1)/([expirydate]-[effectivedate]+1), 
      [grosspremium] 
     ) 
    ), 
    0 
) as [EP M11 2015] 
+0

Noch fehlt das Schließen ']' auf '[expirydate]' auf dem endgültigen verschachtelten IIf;) – Dave

+0

Sie haben Recht, @Dave, aber es ist von der Frage vergessen :( –

1

Jede Instanz von Ilf benötigt 3 Parameter (bool_test, Dann_Wert, Sonst_Wert)

I umgewandelt haben die folgende Zeichenfolge ist syntaktisch korrekt; Sie müssen es überprüfen, um sicherzustellen, dass es das ist, was Sie erwartet haben!

IIf([issuedate]<= #11/30/2015#,IIf([expirydate] <= #11/30/2015#, 0, IIf([expirydate] <=#11/30/2015#,(([expirydate]-#11/30/2015#+1)/([expirydate]-[effectivedate]+1)),[grosspremium])),0) as [EP M11 2015]