プロが教えるわが家の防犯対策術!

開発環境 VB2008
PC管理台帳.使用者氏名のスペースを削除して表示させたいのですが、デバッグすると下記のようなエラーがでます。どなたかアドバイスおねがいします。

「String "PC管理台帳.使用者氏名+" から型 'Double' への変換は無効です。」

ちなみにPC管理台帳.使用者氏名には空行があります。
--------------------------------------------------

Private Sub Btn検索_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn検索.Click
Dim cn As New OleDb.OleDbConnection
Dim dView As New DataView

cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source = C;\管理台帳データベース.mdb"
dadp = New OleDb.OleDbDataAdapter("SELECT " + Replace(+"PC管理台帳.使用者氏名+", " ", "") + ",PC管理台帳.新PC名,PC管理台帳.部署名,PC管理台帳.マシンベンダ名,PC管理台帳.マシンモデル FROM PC管理台帳 WHERE 新PC名='" + TextBox1.Text + "'", cn)

dadp.Fill(dset, "PC管理台帳")
'データベースの表示
DataGridView1.DataSource = dset.Tables("PC管理台帳")

End Sub

--------------------------------------------------

A 回答 (4件)

No.2です。


ぐあ、ついつい釣られてダブルクオーテーション前提の書き方にしてしまった(汗)
すみません。おっちょこちょいだなぁ俺…
No.3の方が書いてるように、
selectCommand = "SELECT REPLACE(PC管理台帳.使用者氏名, ' ', ''), PC管理台帳.新PC名, ... FROM PC管理台帳 ..."
で行けますね。REPLACEが使えるのであれば。
    • good
    • 0

"SELECT " + Replace(+"PC管理台帳.使用者氏名+", " ", "") + ",PC管理台帳.新PC名,PC管理台帳.部署名,PC管理台帳.マシンベンダ名,PC管理台帳.マシンモデル FROM PC管理台帳 WHERE 新PC名='" + TextBox1.Text + "'"


       ↓
"SELECT Replace(PC管理台帳.使用者氏名,' ', '') AS 使用者名,PC管理台帳.新PC名,PC管理台帳.部署名,PC管理台帳.マシンベンダ名,PC管理台帳.マシンモデル FROM PC管理台帳 WHERE 新PC名='" & TextBox1.Text & "'"

こんな感じでしょうか。
    • good
    • 0

まず、REPLACE関数は、Access MDBでは使用できないようです。


(ソフトバンク SQLハンドブック第2版で調査)

もし使えたとしても、そのSQL文だと検索出来ないですね。
以下、REPLACE関数が使えるDBでの検索と仮定して書きます。
DataAdapterを宣言する前に、SQL文(selectCommandの部分)を
String変数に入れて、Debug.Print、またはConsole.WriteLine等で
実際にその変数の中身を確認してみてください。
まともな形になってないはずです。
REPLACE関数の部分は、
REPLACE(PC管理台帳.使用者氏名, " ", "")
になるようにしないと。
その書き方ですと、根本的に勘違いなさっているような感じですが、
SQL文はあくまで「DBに渡す『文字列』」です。
VB内部で解析される関数などではありません。

selectCommand = "SELECT REPLACE(PC管理台帳.使用者氏名, """ & _
" " & _
""", """"), PC管理台帳.新PC名, ... FROM PC管理台帳 ..."

みたいな形でないと。(意図的に途中で切ってます)
(「"」3つで、文字列に直接「"」を代入。4つで直接「""」を代入)

ともあれ、REPLACE関数(または類似の関数)が使えない以上、
REPLACEせずにデータを取り込んで、VB側で変換を掛けるしか
なさそうです。
    • good
    • 0

Replace(+"PC管理台帳.使用者氏名+", " ", "")



これの"("直後の"+"と、"~使用者氏名+"の"+"がとても気になるんですが…
あと、文字列の結合には古風に"&"でやった方が意思が伝わるようです。
"+"を使うと、String型でない(演算可能な型の)場合、加算しようとしますから。

この回答への補足

("SELECT " Replace("PC管理台帳.使用者氏名", " ", "") ",PC管理台帳.新PC名,PC管理台帳.部署名,PC管理台帳.マシンベンダ名,PC管理台帳.マシンモデル FROM PC管理台帳 WHERE 新PC名='" + TextBox1.Text + "'", cn)

をどうかえればいいのか正直わかりません。

補足日時:2008/04/30 12:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!