- ベストアンサー
VB 2008のSQL文でスペースを削除したい
開発環境 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 --------------------------------------------------
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 ぐあ、ついつい釣られてダブルクオーテーション前提の書き方にしてしまった(汗) すみません。おっちょこちょいだなぁ俺… No.3の方が書いてるように、 selectCommand = "SELECT REPLACE(PC管理台帳.使用者氏名, ' ', ''), PC管理台帳.新PC名, ... FROM PC管理台帳 ..." で行けますね。REPLACEが使えるのであれば。
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
"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 & "'" こんな感じでしょうか。
- K-Sogacchi
- ベストアンサー率53% (50/93)
まず、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側で変換を掛けるしか なさそうです。
- nda23
- ベストアンサー率54% (777/1415)
Replace(+"PC管理台帳.使用者氏名+", " ", "") これの"("直後の"+"と、"~使用者氏名+"の"+"がとても気になるんですが… あと、文字列の結合には古風に"&"でやった方が意思が伝わるようです。 "+"を使うと、String型でない(演算可能な型の)場合、加算しようとしますから。
補足
("SELECT " Replace("PC管理台帳.使用者氏名", " ", "") ",PC管理台帳.新PC名,PC管理台帳.部署名,PC管理台帳.マシンベンダ名,PC管理台帳.マシンモデル FROM PC管理台帳 WHERE 新PC名='" + TextBox1.Text + "'", cn) をどうかえればいいのか正直わかりません。