未定義関数Replace

解決


しゅん  2008-11-05 14:49:39  No: 140795  IP: 192.*.*.*

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"
とすれば、エラーは発生しないですべてのレコードが得られます。

編集 削除
だい  2008-11-05 16:25:35  No: 140796  IP: 192.*.*.*

Replace関数はAccessのVBAの組み込み関数であり、
Access以外のアプリケーションでSQL文に含めることは出来ないかと。
一応、下記のような情報がありますが、
http://support.microsoft.com/kb/239482/ja

基本的には、Replace関数を使わないで済むようなデータ設計を行うか、
データを取得してからReplaceするかだと思います。

編集 削除
魔界の仮面弁士  2008-11-05 16:37:13  No: 140797  IP: 192.*.*.*

> Access側では使えるようなのでVB経由でも使いたいのですが、
使えません。VB から利用できるのは、JET ネイティブな関数に限られます。
Replace 関数は、VBA6 の関数であり、Access からならば利用できても、
VB からの mdb アクセスでは制限を受けるようです。

> なにか方法はないでしょうか?
Access 経由で処理するか、または全件引っ張ってきたうえで、
VB 側でループして処理するしか無いかもしれません。

編集 削除
しゅん  2008-11-05 23:51:16  No: 140798  IP: 192.*.*.*

ご提示いただいた情報から判断すると、Access側でクエリを作って
それにVBから接続すればよさそう・・・と考えやってみましたが、
同様にダメ!
Accessのクエリは単なるSQL文で、それを実行するのはJETエンジン
なんですね。

Replaceはあきらめることにします。

だい さま、魔界の仮面弁士 さま  ありがとうございました。

編集 削除