2017-09-29 3 views
0

Ich habe diese Funktion in einem RDLC-Bericht. Ich baute die Zeichenfolge in Ms Access (wie ich ziemlich schlecht bin gerade schreibe sie gerade) Es funktioniert in MS Access, und es funktioniert in Vis Studio auf meinem PC. Es funktioniert auch, wenn in EXE kompiliert wird.Nicht definierte Funktion: MONTHNAME - OLEDB

jedoch auf ONE Laptop kommt es

mit

nicht definiert Funktion Monthname in Ausdruck oben

SELECT MonthName(Month(tblpack.cycledate)) AS MonthDate, Year(tblpack.cycledate) AS YearDate, Sum(tblpack.weeksinpack) AS SumOfweeksinpack, Month(tblpack.cycledate) AS MonthOrder 
FROM tblpatient INNER JOIN tblpack ON tblpatient.patientid = tblpack.patientid 
WHERE (((tblpack.iscommunity)=True) AND ((tblpatient.over5med)=True) AND ((tblpack.isrepat)=True) AND ((tblpack.cycledate) Between ? And ?) AND ((tblpack.packeduser) Is Not Null)) OR (((tblpack.iscommunity)=True) 
AND ((tblpatient.over5med)=True) AND ((tblpack.isconcession)=True) AND ((tblpack.cycledate) Between ? And ?) AND ((tblpack.packeduser) Is Not Null)) 
GROUP BY MonthName(Month(tblpack.cycledate)), Year(tblpack.cycledate), Month(tblpack.cycledate) 
ORDER BY MonthName(Month(tblpack.cycledate)), Year(tblpack.cycledate) 

Jede Hilfe wäre toll. Ich kann nicht verstehen, warum es auf einem Computer funktioniert und nicht auf einem anderen, wenn die Zeichenfolge die gleiche ist und die Verbindung genauso ist!

Gangel

Antwort

1

Sie nicht MonthName Funktion mit ADO.NET, da der Sandbox-Funktion nur für Ausführen von Abfragen innerhalb Access-Anwendung Sitzung verwenden können. This article beschrieben Zugriffsverhalten Bezug auf Ihr Problem:

Individuelle Benutzer geschriebenen VBA-Funktionen sowie zahlreiche integrierte VBA Sprachfunktionen ausgeführt werden, die von Microsoft Access, wenn sie in einer SQL-Abfrage eingebettet. Leider sind die Funktionen zur Verfügung, den Jet-Datenbank-Engine begrenzt (wenn über ADO ausgeführt, ADO.NET, usw.)

Als Abhilfe können Sie Format Funktion mit MMMM Format-String verwenden können vollen Monatsnamen angezeigt werden:

SELECT Format(tblpack.cycledate, 'MMMM') AS MonthDate, 
     Year(tblpack.cycledate) AS YearDate, Sum(tblpack.weeksinpack) AS SumOfweeksinpack, 
     Month(tblpack.cycledate) AS MonthOrder 
FROM tblpatient 
INNER JOIN tblpack ON tblpatient.patientid = tblpack.patientid 
WHERE (((tblpack.iscommunity)=True) 
     AND ((tblpatient.over5med)=True) 
     AND ((tblpack.isrepat)=True) 
     AND ((tblpack.cycledate) Between ? And ?) 
     AND ((tblpack.packeduser) Is Not Null)) 
     OR (((tblpack.iscommunity)=True) 
     AND ((tblpatient.over5med)=True) 
     AND ((tblpack.isconcession)=True) 
     AND ((tblpack.cycledate) Between ? And ?) 
     AND ((tblpack.packeduser) Is Not Null)) 
GROUP BY Format(tblpack.cycledate, 'MMMM'), Year(tblpack.cycledate), Month(tblpack.cycledate) 
ORDER BY Format(tblpack.cycledate, 'MMMM'), Year(tblpack.cycledate) 

Referenzen:

How to configure Jet 4.0 to prevent unsafe functions from running in Access 2003

month name from date field in c#.net from access database

+0

danke Tetsuya, Meine einzige Frage ist: Warum funktioniert meine Abfrage auf zwei Computern, aber nicht die dritte? –

+1

Haben diese PCs genau die gleiche Access-Konfiguration und -Version? Dieses Problem tritt häufig auf, wenn Sie die MSJet-Engine verwenden (Sie wissen nicht viel, ob die ACE-Engine ein ähnliches Problem hat), unterschiedliche Konfigurationseinstellungen können zu unterschiedlichen Ergebnissen führen. –

+0

ok danke, das erklärt es. Vielleicht ist es die Zugriffsversion. Ich habe Ihre Anfrage geändert, danke für die Hilfe! :) –

Verwandte Themen