WindowsXP VB2005 です。
MDBファイルを使ってADO.NET経由でDBを操作していますが、SQL文に
Replace関数を入れると表題のようなエラーになります。
ただ、そのときのdbcm1.CommandTextをそのままAccessのクエリ
に使うとAccess側ではエラーは発生せず期待したクエリ結果が出ます。
確認したAccessは2003SP3で、テーブル形式はAccess2000形式です。
Access側では使えるようなのでVB経由でも使いたいのですが、なにか
方法はないでしょうか?
dbcon1.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Test.mdb"
dbcon1.Open()
Dim datset1 As New DataSet
Dim dbadpt1 As New OleDb.OleDbDataAdapter
Dim dbcmd1 As New OleDb.OleDbCommand
dbcmd1.CommandText = _
"Select 品名 from FRT Where Replace(品名,' ','') = 'CDE'"
dbcmd1.Connection = dbcon1
dbadpt1.SelectCommand = dbcmd1
datset1.Clear()
dbadpt1.Fill(datset1, "REP") '<---ここで未定義関数エラー
VBからでもCommandTextを
"Select 品名 from FRT"
とすれば、エラーは発生しないですべてのレコードが得られます。
Replace関数はAccessのVBAの組み込み関数であり、
Access以外のアプリケーションでSQL文に含めることは出来ないかと。
一応、下記のような情報がありますが、
http://support.microsoft.com/kb/239482/ja
基本的には、Replace関数を使わないで済むようなデータ設計を行うか、
データを取得してからReplaceするかだと思います。
> Access側では使えるようなのでVB経由でも使いたいのですが、
使えません。VB から利用できるのは、JET ネイティブな関数に限られます。
Replace 関数は、VBA6 の関数であり、Access からならば利用できても、
VB からの mdb アクセスでは制限を受けるようです。
> なにか方法はないでしょうか?
Access 経由で処理するか、または全件引っ張ってきたうえで、
VB 側でループして処理するしか無いかもしれません。
ご提示いただいた情報から判断すると、Access側でクエリを作って
それにVBから接続すればよさそう・・・と考えやってみましたが、
同様にダメ!
Accessのクエリは単なるSQL文で、それを実行するのはJETエンジン
なんですね。
Replaceはあきらめることにします。
だい さま、魔界の仮面弁士 さま ありがとうございました。
ツイート | ![]() |