2009-05-11 14 views
1

私は従来の製品で作業していますが、ADO、SQL Serverへのリンクテーブルを持つAccessデータベースへのSQLの実行があります。 SQLを実行するときに '未定義関数' Round 'というエラーが表示されますが、クエリを実行して直接アクセスするとが正常に実行されるとが発生します。私はすべてが正しいことを知っています。これは生産コードであり、他のマシンでも動作し、多くのクライアントでうまく展開されているため、これはマシン固有の問題です。古典的なADOを介したSQL - 未定義関数 'Round'?

私は正直なところから始めるのかどうかもわかりません。私はJet/ADO/MDACの正しい(最新の)バージョンを実行しています。

助けていただければ幸いです。

ありがとうございます。

EDIT:明らかに、SQLには集計関数 'Round'が含まれています。私は、JetとSQLの実装の違いについて認識しています。この問題は、マシン上のコンポーネントに問題があり、コードには問題があるためです。 SQLは、MS Access 2007を介して実行されたときには正しく実行されますが、ADOでは実行されません。

+0

これが他のマシンで動作する場合、Round関数を保持するDLLが原因で問題になる可能性があります。私はそれらがVBに関連するDLLだと思う。 – shahkalpesh

+0

DLLを使用すると問題は発生しません。なぜなら、Accessを通じて正常に実行されるからです。私はまた、プロジェクトの参照が正しいことを知っています。私は困惑している! – Stimul8d

+0

どのようなアプリケーションですか? Accessカスタムアプリ、VB6アプリ、C++アプリ、またはバイナリだけですか? – Andomar

答えて

2

EDIT2:コメントから右ソリューション:

shahkalpesh:それはアクセススルー罰金実行している場合、それはアクセスがラウンド機能を持っている、それが利用可能なDLLを、持っている可能性があります。使用している接続文字列は何ですか?

Stimul8d:どのように接続文字列で行うことができるかわかりません。このコードは、変更を加えずに他のすべてのマシンで動作します。私だけではない。

Andomar:まあ、それはあなたの問題です。あなたのマシンは馬鹿にされています。おそらくvb6 sp6をインストールすることはできます。

Stimul8d:SP6が固定しました。乾杯、なぜSP6がそれを修正したのか分かりませんが、それはありました!

EDIT:あなたのコメントに基づいてthis newsgroupポストが答えかもしれません: に(あなた はVBからのもののように)残念ながら

、あなたがアクセスの外から クエリを実行している、あなただけの接続データベースはJet エンジンを使用しており、ほとんどのVBA機能については何も知られていません。 VBのアプリケーションに のデータを返し、そこにあるデータの機能を に返す以外は、 という方法がありません。

そして、2つのポスト以降:

私は問題を解決しました。私のVB がService Pack 6で更新されました...それは の問題を抱えていました。ここ

旧答え:

するTry FLOOR()の代わりにROUNDの()。最も近い整数に何かを丸める

、あなたはできます

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

P.S.たぶんあなたが得る正確なエラーを投稿してください。もしそれが "ラウンド関数は2から3引数が必要です"ということは、Sql ServerがROUND()をボルキングしていることを意味します。

+0

「Undefined Function 'Round'」という正確なエラーを掲載しました。それはローカル環境の問題であり、コードの問題ではありません。 – Stimul8d

+0

Accessデータベースに対してSqlを実行しているときにアプリケーションでこのエラーが発生していませんか? – Andomar

+0

さて、SP6はそれを修正しました。乾杯、なぜSP6がそれを修正したのか分かりませんが、それはありました! – Stimul8d

1

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

だから、これが唯一のアクセスではなく、SQL Serverで動作します:

select round(Column) from Table 

これは、アクセス SQL Serverで動作します:

select round(Column,1) from Table 
1

それはそのアクセス可能性DLL が利用可能であり、これはラウンド ファンクション

0123を持っています

ACE/Jetは、VBAで共有表現サービスを使用します。概して、ACE/Jetは、引数と戻り値がスカラー型(配列なし、オブジェクトなしなど)のVBA5関数(メソッドとは別のもの)をすべて式としてサポートします。 Round()式はこの定義に入り、ACE/JetではVBA関数と同じセマンティクスで使用できます。 ACE /ジェットエンジンをよく知っている人は、セマンティクスがVBAと同等であることを知っておく必要があります。 ACE /ジェットANSI-92クエリモードSQL VBA

?Typename(Round(5, 1)) 

戻っ '整数' に対し、 'ロング'

SELECT TYPENAME(ROUND(5, 1)) 

戻ります。

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

関連する問題