1

私はレガシー製品に取り組んでおり、SQL Server にリンクされたテーブルを持つ Access データベースに対して、ADO を介して SQL を実行しています。SQL を実行すると「Undefined function 'Round'」というエラーが表示されますが、クエリを取得して Access で直接実行すると正常に動作します。すべてが正しく、これはマシン固有の問題であることはわかっています。これはプロダクション コードであるためです。他のマシンでも動作し、多くのクライアントに正常に展開されています。

正直に言うと、どこから始めればよいかさえわかりません。Jet/ADO/MDAC の正しい (最新) バージョンを実行しています。

任意の助けをいただければ幸いです。

前もって感謝します。

編集: 明らかに、SQL には集計関数「ラウンド」が含まれています。Jet と SQL の実装の違いは認識しています。この問題は、コードの問題ではなく、マシン上のコンポーネントの問題が原因です。SQL は、MS Access 2007 を介して実行すると正しく実行されますが、ADO を介して実行することはできません。

4

3 に答える 3

2

EDIT2:コメントからの正しい解決策:

shahkalpesh: Access を介して正常に実行される場合は、Access が Round 関数を持つ DLL を利用できる可能性があります。使用している接続文字列は何ですか?

Stimul8d: 接続文字列を使用してください。このコードは、変更なしで他のすべてのマシンで動作します。私のものではありません。

Andomar: ええと、それはあなたの問題です。あなたのマシンは故障しています。おそらくvb6 sp6をインストールできます。

Stimul8d: まあ、SP6 で修正されました。乾杯 Andomar、なぜ SP6 で修正されたのかわかりませんが、修正されました!

編集: あなたのコメントに基づいて、このニュースグループの投稿が答えかもしれません:

残念ながら、(VB のように) Access の外部からクエリを実行している場合、データベースへの唯一の接続は、ほとんどの VBA 関数について何も知らない Jet エンジンを介することです。これを回避する方法はありません。データを VB アプリケーションに返し、そこでデータに対して関数を使用する以外に方法はありません。

そして、その後の 2 つの投稿:

問題を解決しました。VB を Service Pack 6 で更新しました... 問題は解決しました。

ここでの古い答え:

ROUND() の代わりに FLOOR() を試してください。

何かを最も近い整数に丸めるには、次のことができます。

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

PS多分あなたが得る正確なエラーを投稿してください。「ラウンド関数には 2 ~ 3 個の引数が必要です。」の場合は、Sql Server が ROUND() で中断していることを意味します。

于 2009-05-11T14:45:08.307 に答える
1

Access が Round 関数を持つ DLL を利用できる可能性があります。

ACE/Jet は、VBA で共有式サービスを使用します。大まかに言えば、ACE/Jet は、引数と戻り値がスカラー型 (配列やオブジェクトなしなど) であるすべての VBA5 関数 (メソッドとは異なる) を式としてサポートします。式はこのRound()定義に当てはまり、実際に VBA 関数と同等のセマンティクスで ACE/Jet で使用できます。ただし、ACE/Jet エンジンに精通している人なら誰でも知っているはずですが、セマンティクスは、ACE/Jet ANSI-92 Query Mode SQL などの VBA の同等のものとは異なる場合があります。

SELECT TYPENAME(ROUND(5, 1))

'Long' を返しますが、VBA は

?Typename(Round(5, 1))

「整数」を返します。

つまり、Round()ここで問題になることはありませんでした。

于 2009-05-12T10:33:49.480 に答える
1

round() 関数は SQL Server にも存在します。
唯一の違いは、Access では精度はオプションのパラメーターですが、SQL Server では指定する必要があることです。

したがって、これは Access でのみ機能し、SQL Server では機能しません。

select round(Column) from Table

これは AccessSQL Server で機能します。

select round(Column,1) from Table
于 2009-05-11T14:57:24.600 に答える