古典的なADOを通じてSQL - 未定義関数「ラウンド」?
質問
私は、従来の製品に取り組んでいると私は、SQL Serverへのリンクテーブルを持つAccessデータベースに、ADOを介して実行されているいくつかのSQLを持っています。 の私はSQLを実行したとき、私はエラー「未定義関数 『ラウンド』を取得していますが、私は、クエリを取り、Accessで直接実行する場合のそれが正常に動作します。私はすべてが正しいであり、これは生産のコードであるので、これはマシン固有の問題であり、それは他のマシン上で動作し、多くのクライアントのために正常に展開されていることをことを知っています。
私は正直に開始する場所さえわかりません。私はジェット/ ADO / MDACの正しい(最新)バージョンを実行しています。
任意の助けいただければ幸います。
事前に感謝します。
の編集:もちろん、SQL集計関数 'ラウンド' を含みます。私はJetとSQLの実装の違いを認識してんです。この問題は、コードで私のマシンとNOT上のコンポーネントを持ついくつかの問題が原因です。 MS Accessの2007年までではなく、ADOを介して行う際にSQLが適切に実行されます。の
解決
EDIT2:コメントから右ソリューション:
shahkalpesh:それはアクセススルー罰金実行している場合、それはアクセスがラウンド機能を持っている、それが利用可能なDLLを、持っている可能性があります。使用している接続文字列は、何ですか?
Stimul8d:私はとても接続文字列で行う何もすることができますかどうかはわかりません。このコードは変更せず、他のすべてのマシン上で動作します。だけではない私の上。
Andomar:まあ、それはあなたのマシンがアップfarkedされ、すぐそこにあなたの問題です。あなたはまだ VB6のSP6 インストールすることができますA>多分。
Stimul8d:まあ、SP6はそれを修正しました。乾杯Anndomar、SP6はそれを固定されているが、それはしなかった理由は全く分からない!
編集:あなたのコメントに基づいて<のhref = "http://www.tech-archive.net/Archive/Access/microsoft.public.access.developers.toolkitode/2004-05/0014.html" のrel = "nofollowをnoreferrer">答えかもしれません。このニュースグループのポストます:
残念ながら、あなたが実行しています あなたのようにアクセスの外部からの問合せ( にVBからです)、あなただけの接続 データベースには、ジェットを介して行われ 何も知らないエンジン、 ほとんどのVBA機能について。ありますなし 返却する以外にこれを回避する方法、 あなたのVBアプリケーションへのデータと そこにデータに関数を使用します。
そして、2つのポスト後でます:
私は問題を解決しました。私のVBを更新しました サービスパック6で...それがかかりました 問題のケアます。
ここでは旧答えます:
(代わりラウンド)(FLOORを試してください)。
最も近い整数に何かを切り上げるには、あなたでします:
declare @floatmyboat float
set @floatmyboat = 1.51
select floor(@floatmyboat+0.5)
P.S。たぶん、あなたが得る正確なエラーを投稿してください。それは "ラウンド関数は、2〜3の引数が必要です。" なら、それは)(SQL ServerがROUND上borkingされることを意味します。
他のヒント
ラウンド()関数は、同様にSQL Serverで存在する。
唯一の違いは、次のとおりです。Accessでの精度は、オプションのパラメータですが、SQL Serverで、あなたはそれを指定する必要があります。
これはのみのアクセスでは動作しますが、いないSQL Serverでます:
select round(Column) from Table
このAccessで動作するとのSQL Serverの:
select round(Column,1) from Table
これは、アクセスがDLLを持っているかもしれません ラウンドを持っている、それが利用可能 関数
ACE /ジェットは、VBAでシェア発現のサービスを使用しています。大まかに言えば、ACE /ジェットは、その引数および戻り値スカラ型(例えばない配列、なしオブジェクト)である(メソッドとは異なるような)式のように、すべてのVBA5機能をサポートします。 Round()
式は、この定義に該当し、実際にそのVBA関数と同等と同じ意味を持つACE /ジェットに使用可能です。 ACE /ジェットエンジンに精通している誰もが知っているべきであるように、しかし、意味論は、例えば、VBA同等物と異なっていてもよいですACE /ジェットANSI-92クエリモードSQL
SELECT TYPENAME(ROUND(5, 1))
を返す 'ロング'、VBAのに対し、
?Typename(Round(5, 1))
'Integer型' を返します。
言い換えれば、Round()
は、ここで問題になるつもりはなかった。