Frage

Ich arbeite an einem Legacy-Produkt, und ich habe einige SQL über ADO ausgeführt werden, zu einer Access-Datenbank mit verknüpften Tabellen zu SQL Server. Ich erhalte die Fehlermeldung ‚nicht definierte Funktion‚Round‘, wenn ich die SQL aber ausführen, wenn ich die Abfrage nehmen und direkt in Access ausführen, es funktioniert . Ich weiß, dass alles in Ordnung ist und dass dies ein maschinenspezifische Problem, da dieser Produktionscode ist, es auf anderen Maschinen arbeitet und wurde erfolgreich für viele Kunden im Einsatz.

Ich bin nicht einmal sicher, wo um ehrlich zu sein zu beginnen. Ich bin die richtigen (neuesten) Versionen von Jet / ADO / MDAC ausgeführt wird.

Jede mögliche Hilfe würde geschätzt.

Vielen Dank im Voraus.

EDIT: Natürlich enthält die SQL die Aggregatfunktion 'Round'. Ich bin mir bewusst, die Unterschiede zwischen Jet und SQL-Implementierungen. Dieses Problem wird durch ein Problem mit einer Komponente auf meiner Maschine und nicht mit dem Code. Die SQL ordnungsgemäß ausgeführt wird, wenn durch MS Access 2007 getan, aber nicht über ADO.

War es hilfreich?

Lösung

EDIT2: Right Lösung aus den Kommentaren:

shahkalpesh: Wenn es gut durch Zugriff ausführt, könnte es sein, dass Access die DLL zur Verfügung hat, die die Round-Funktion. Was ist die Verbindungszeichenfolge, verwenden Sie?

Stimul8d: Ich bin nicht sicher, wie es alles sein kann, so mit der Verbindungszeichenfolge zu tun. Dieser Code funktioniert auf jeder anderen Maschine, ohne Änderungen; nur nicht auf meinem.

Andomar: Nun, das ist dein Problem genau dort, Ihre Maschine farked auf. Sie können immer noch VB6 SP6 installieren vielleicht.

Stimul8d: Nun, SP6 es fest. Prost Anndomar, keine Ahnung, warum es SP6 behoben, aber es tut!

EDIT: Basierend auf Ihren Kommentar In dieser Gruppe Post könnte die Antwort sein:

  

Leider, wenn Sie ausführen,   Anfragen von außerhalb von Access (wie Sie   ist von VB), die einzige Verbindung zu   Die Datenbank ist durch den Jet   Motor, der nichts weiß   über die meisten VBA-Funktionen. Da ist kein   Weg, um dieses, andere als zurück   die Daten an Ihre VB-Anwendung und   Verwenden Sie die Funktionen auf die Daten dort.

Und zwei Beiträge später:

  

ich das Problem gelöst. Aktualisiert meine VB   mit dem Service Pack 6 ... es dauerte   Pflege der Probleme.

Alte Antwort hier:

Versuchen FLOOR () anstelle von ROUND ().

etwas auf die nächste ganze Zahl runden, können Sie:

declare @floatmyboat float
set @floatmyboat = 1.51
select floor(@floatmyboat+0.5)

P. S. Vielleicht die genauen Fehler posten Sie erhalten. Wenn es "Die Rundenfunktion 2 bis 3 Argumente erfordert.", Bedeutet, dass SQL Server Borking auf der ROUND ().

Andere Tipps

Die runde () Funktion gibt es in SQL Server als auch.
Der einzige Unterschied ist:. In Access die Präzision ist ein optionaler Parameter, aber in SQL Server haben Sie es angeben

So wird dies nur in Access arbeiten, aber nicht in SQL Server:

select round(Column) from Table

Dies wird in Access arbeiten und SQL Server:

select round(Column,1) from Table
  

könnte es sein, dass Access die DLL hat   zur Verfügung, um es, die die Runde hat   Funktion

ACE / Jet verwendet Aktie Ausdruck Dienste mit VBA. Grob gesagt, ACE / Jet unterstützt als Ausdrücke alle VBA5 Funktionen (im Unterschied zu Verfahren), deren Argumente und Rückgabewerte sind Skalar-Typen (beispielsweise keine Arrays, keine Objekte). Der Ausdruck Round() fällt in diese Definition und in der Tat ist es, ACE / Jet mit der gleichen Semantik wie seine VBA Funktion äquivalent zur Verfügung. Wie jemand mit dem ACE / Jet-Engine vertraut sollte wissen, obwohl, kann die Semantik von den VBA-Äquivalente unterscheidet z.B. ACE / Jet ANSI-92-Abfragemodus SQL

SELECT TYPENAME(ROUND(5, 1))

Gibt 'Long', während VBA

?Typename(Round(5, 1))

Gibt 'Integer'.

Mit anderen Worten, Round() wurde hier nicht das Problem sein wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top