• 締切済み

VB.NETでパラメータクエリを使用してAccessに値を設定

こんにちは。 社員番号をNumとして、ボタンクリック時に社員番号が100099の人の名前を抽出したいのですが、「("?Num",'100099')」のカンマで「式が必要です。」となってしまいます。テキストの通りにやっているのですが、うまくいきません。テキストに載ってないこととしては、社員番号がテキスト型なので、「’」で囲んでみました。 どうすれば正しく実行できるでしょうか?以下はコーディングの一部です。 よろしくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Name As String Dim cm As OleDb.OleDbCommand Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\VB_DB\SampleDB2.mdb;Persist Security Info=False") 'パラメータクエリを作成する cm = New OleDb.OleDbCommand("SELECCT 氏名 FROM 社員 " _ & "WHERE 社員番号=?Num", cn) 'パラメータクエリで使う値を設定する cm.Parameters.Clear() cm.Parameters.Add("?Num",'100099') 'パラメータクエリを実行する Name = cm.ExecuteScalar()

  • DT50
  • お礼率95% (504/530)

みんなの回答

回答No.1

ADO.NET で OleDb + *.mdb は使ったことがないので一般的な意見を。 > cm.Parameters.Add("?Num",'100099') コレ、ホントにこう書きました? それでコンパイルできました? 最初の ' 以降がコメントアウトされちゃってません? ' のかわりに " を使い、 cm.Parameters.Add("?Num","100099") もし引用符も含めたいのなら cm.Parameters.Add("?Num","'100099'") となるのでは?

DT50
質問者

お礼

ご回答ありがとうございました! 理由が他にありました。

関連するQ&A

  • VB.NETでテーブルを作成

    VB.NETとAcceseを使用してフォームの入力内容に基にボタンをしてDBにテーブルを作成するプログラムを作成していますが上手くいきません。 どのようにすれば上手くいくのか教えてください。 よろしくお願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Cn As New OleDb.OleDbConnection() Cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=" & Application.StartupPath & "\products.mdb" Cn.Open() Dim mysql As New OleDb.OleDbCommand() mysql.Connection = Cn mysql.CommandText = "CREATE TABLE '" & TextBox1.Text & "' ('" & TextBox2.Text & "' '" & ComboBox1.Text & "' NOT NULL,'" & TextBox2.Text & "' '" & ComboBox2.Text & "','" & TextBox3.Text & "' '" & ComboBox3.Text & "',PRIMARY KEY('" & TextBox1.Text & "'))" Cn.Close() End Sub

  • VB.netでJet.OLEDBを使いCSVを読み

    VB.netでOleDbConnectionを使ってCSVを読み込むと便利ですが、属性判定を勝手にされたくありません。 どうすればコントロールできますか? 個別に属性を決めるか、もしくは全部文字列として受け取りたいです。 何もしなければ、項目の属性が自動で決まりますが、その属性判断が甘く、属性に合わない値が消えます。 例えば、 日付項目っぽい値が入っている項目にたまに文字列がるとすると、 その項目が日付項目になって、日付項目に合わないデータは空白になってしまいます。 CSVの読み込みは一旦すべて文字列にして受け取り、その後の事はアプリでコントロールしたいです。 どうすればできますか? Dim OleDbConnection1 As New OleDb.OleDbConnection Dim OleDbCommand1 As New OleDb.OleDbCommand Dim OleDbDataAdapter1 As New OleDb.OleDbDataAdapter Dim FileInfo1 As New FileInfo(CSVファイルの名前をフルパスで) OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote OleDbConnection1.Open() OleDbCommand1.CommandText = "SELECT * FROM [" & FileInfo1.Name & "]" OleDbCommand1.Connection = OleDbConnection1 OleDbDataAdapter1.SelectCommand = OleDbCommand1 OleDbDataAdapter1.Fill(DataTable1) OleDbDataAdapter1.Dispose() OleDbCommand1.Dispose() OleDbConnection1.Dispose()

  • VB.NET2005からoracle92へ接続するには?

    IDとパスワードを入力し、オラクルのDBにあるIDとパスワードだったら次の画面を開くというプログラムを作りたいです。 オラクルへの接続がうまく行ってないようで画面が固まってしまいます。 プログラムの不具合を教えていただけないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection() Dim cmd As New OleDb.OleDbCommand() Dim rs As OleDb.OleDbDataReader cn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=*;User ID=*;Password=*;" cn.Open() '←ここで、エラーになります。 cmd = cn.CreateCommand() cmd.CommandText = "Select ID from abc" rs = cmd.ExecuteReader() While rs.Read() If TextBox1.Text = cmd.CommandText Then MessageBox.Show("パスワードを受付けました。") Dim frm2 As New Form2 frm2.Show() TextBox1.Clear() TextBox2.Clear() Else MessageBox.Show("パスワードが違います。") TextBox1.Text = "" TextBox1.Focus() TextBox1.Clear() TextBox2.Clear() End if     End While cn.Close() rs.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • VB.NET2005からoracle92へ接続する方法。

    IDとパスワードを入力し、オラクルのDBにあるIDとパスワードだったら次の画面を開くというプログラムを作りたいです。 オラクルへの接続がうまく行ってないようで画面が固まってしまいます。 プログラムの不具合を教えていただけないでしょうか? よろしくお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection() Dim cmd As New OleDb.OleDbCommand() Dim rs As OleDb.OleDbDataReader cn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=*;User ID=*;Password=*;" cn.Open() '←ここで、エラーになります。 cmd = cn.CreateCommand() cmd.CommandText = "Select ID from abc" rs = cmd.ExecuteReader() While rs.Read() If TextBox1.Text = cmd.CommandText Then MessageBox.Show("パスワードを受付けました。") Dim frm2 As New Form2 frm2.Show() TextBox1.Clear() TextBox2.Clear() Else MessageBox.Show("パスワードが違います。") TextBox1.Text = "" TextBox1.Focus() TextBox1.Clear() TextBox2.Clear() End if     End While cn.Close() rs.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class

  • VB2005でACCESSのADO.NETでのテーブル名取得

    VB2005 ACCESSのテーブル名を取得したいのですが、方法をご教示ください。以下のところで悩んでいます。 OpenFileDialog1.Filter = "アクセス ファイル (*.mdb)|*.mdb" OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName <> "" Then Dim St As String Dim Cn As New System.Data.OleDb.OleDbConnection Dim SQL As System.Data.OleDb.OleDbCommand Dim UserID As String = "Admin" Dim Password As String = "" Dim MDBFile As String = OpenFileDialog1.FileName Dim N As String = Microsoft.VisualBasic.Right(MDBFile, 9) St = "Provider=""Microsoft.Jet.OLEDB.4.0"";" St &= "Data Source=""" & MDBFile & """;" St &= "User ID=" & UserID & ";" St &= "Jet OLEDB:Database Password=" & Password Cn.ConnectionString = St SQL = Cn.CreateCommand    Cn.Open() この後テーブル名までたどり着けません DataTable  Cn.GetSchema Cn.GetOleDbSchemaTable( "restrictions") などヘルプなどから試みていますが、これらのコーディング法がわかりません。 テーブル名がわかっている(サンプルのPubs の "Publisher")場合はデータセットからはフィールド名が取得できたのですが・・・ よろしくお願いいたします。

  • VB.NET、mdbに新しいデータを追加したい

    超初心者で申し訳ありません。下のプログラムにおいてオペレータ名が一致する場合には 更新(UPDATE)する。一致するデータが無い場合には新規登録を行いたいのですが どのように書いたらいいのかさっぱりでNETを相当探したのですが回答が見つかりません。 お手数ですがどなたか助けていただけませんでしょうか。なお、一致する場合には 更新(UPDATE)は動作するようになりました。 VBを始めて2ケ月になります。Microsoftの文献を見ても難しくてまだ理解できるレベルに達していません。どなたか、よろしくお願い致します。 「データ構造」 ID          integer オペレータ名   string ランク       integer パスワード    string 補足       string Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '■■■■■■■■■■■■■■■■■■■■■■■■ '■■■   オペレータの新規/更新登録   ■■■  '■■■■■■■■■■■■■■■■■■■■■■■■ '----------------------------------------------------------- 'コネクションを作成 Dim CurrentDir As String = System.IO.Directory.GetCurrentDirectory() Dim cn As New OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & CurrentDir & "\operator.mdb" '**************** コマンドを作成 **************** Dim OPE As String Dim PWORD As String Dim HOSOKU As String Dim RANK As Integer OPE = オペレータ名.Text RANK = ランク.Text HOSOKU = 補足.Text PWORD = パスワード.Text Dim cmd As New OleDbCommand( "UPDATE table1 " & "SET ランク = ? " & "," & "パスワード = ? " & "," & "補足 = ? " & " WHERE オペレータ名 = ? ", cn) '************** パラメータを作成 **************** cmd.Parameters.Add("ランク", OleDbType.Integer).Value = RANK cmd.Parameters.Add("パスワード", OleDbType.Char).Value = PWORD cmd.Parameters.Add("補足", OleDbType.Char).Value = HOSOKU cmd.Parameters.Add("オペレータ名", OleDbType.Char).Value = OPE '実行 cn.Open() cmd.ExecuteNonQuery() '-------------------------- Dim COUNTC As Integer COUNTC = cmd.ExecuteNonQuery()   '************************************ elseの中に簡単に記載すのって難???*** If COUNTC > 0 Then MessageBox.Show("更新 完了")     Else 'INSERTの手順       ’★ ここにmdbの中に 項目値 OPE、RANK、HOSOKU、PWORDを挿入(追加)        する命令を入れたい。   '実行 cmd.ExecuteNonQuery() End If ’********************************** '-------------------------- cn.Close() End Sub

  • VB2010とアクセスの接続方法

    textboxにID入力し、ENTERを押したらそのIDのデータがアクセスのデータベースから出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "フリガナ") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class ・アクセスデータ  ID、名前、氏名 以上、よろしくお願い致します。

  • ASP.NET(VB.NET)でADO.NETを使ってAccessデータベースに接続する方法(長文)

    ASP.NETでADO.NETを使ってAccessデータベースに接続し、table2という名前のテーブルのidをテキストボックスに入力し、ボタンを押すとデータグリッドでそのidのデータが表示されるアプリケーションを作りました。が、自分で書いていても意味がわかりません。手元にあるのはASP.NETでSQLServerに接続する方法について解説してある書籍と、Accessに接続するもののWindowsアプリケーションからの接続(しかも表示させる物が違う)について解説してある書籍のみです。これらを組み合わせてなんとか表示させるまではできたのですが、全く意味がわかりません。どなたかご解説いただけないでしょうか? また、ASP.NET(VB.NET)でAccessデータベースと接続するアプリケーションについて触れてあるような書籍をご存知の方がいらっしゃいましたら、是非教えていただけないでしょうか?よろしくお願いいたします。 以下はボタンクリックされたときのイベントハンドラです。コードの先頭でImports System.Data.OleDbしてあります。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dt As Integer Dim cn As New OleDbConnection("provider=microsoft.jet.oledb.4.0; Data Source=C:\nabe\採用\新人研修用\.NETコース\DB\kensyu2.mdb;") cn.Open() Dim cmd As New OleDbCommand("select * from table2 where id =?", cn) cmd.Parameters.Clear() cmd.Parameters.Add("param1", TextBox1.Text) dt = CType(cmd.ExecuteScalar(), Integer) Dim dr As OleDbDataReader = cmd.ExecuteReader() DataGrid1.DataSource = dr DataGrid1.DataBind() dr.Close() cn.Close() End Sub

  • vb.net で ADO でアクセスのテーブル

    アクセスのテーブルのレコードの数を取得したいのですが コードがわからないので続きを教えていただけますか? Imports System.Data.OleDb Sub test() Dim oleConn As OleDbConnection Dim oleCmd As OleDbCommand Dim oleAdp As OleDbDataAdapter oleConn = New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Database1.accdb;") oleCmd = oleConn.CreateCommand() oleCmd.CommandText = "SELECT * FROM テーブル1" oleAdp = New OleDbDataAdapter(oleCmd) 'MsgBox oleCmd.??? End Sub までできたのですが、ここからどうすれば数を取得できますか?

  • データセットへの取得について

    VB2005はじめたばかりです。 MDBからデータを抽出してデータセットへのところでエラーとなります。 Private Sub Button1_Click Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("t_社員") Dim cn As OleDb.OleDbConnection _ = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2005\SampleDB.mdb;") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 社員 where 社員番号=>101", cn) dAdp.Fill(dSet, "t_社員") ★ここでエラーとなってしまいます。【where 社員番号=>101", 】をトルと正常となります。 恐れ入りますがご指摘いただけますでしょうか。

専門家に質問してみよう