プロが教える店舗&オフィスのセキュリティ対策術

超初心者で申し訳ありません。下のプログラムにおいてオペレータ名が一致する場合には
更新(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

A 回答 (1件)

INSERT文になって再度発行処理をすればいいだけです。



Dim cmd As New OleDbCommand(
"INSERT INTO table1 (オペレータ名, ランク, 補足, パスワード) VALUES " &
"(?, ?, ?, ?)", 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
cmd.ExecuteNonQuery()

ところでcn.Open()の後にcmd.ExecuteNonQuery()が2回もありますが、1回で十分です。

この回答への補足

早速の回答ありがとうございます。
プログラムを記入してみたのですが
下記IF(else)文中のDim cmdのcmdにてERRORが出ます。 
内容:”変数'cmd'はそれを囲むブロック内の変数を非表示にします” else文の中に記載してはだめなのでしょうか?。

If COUNTC > 0 Then
MessageBox.Show("更新 完了")
Else
'INSERTの手順
 '*** パラメータを作成 ****************
'**** パラメータを作成 ****************
      Dim cmd As New OleDbCommand(
"INSERT INTO table1 (オペレータ名, ランク, 補足, パスワード) VALUES " &
"(?, ?, ?, ?)", 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
cmd.ExecuteNonQuery()
End If
'--------------------------
cn.Close()

補足日時:2014/01/09 17:33
    • good
    • 0
この回答へのお礼

お世話になりました。2回目の質問をさせてもらいましたが解決しました。まことに感謝感激です。
ERORの内容は変数cmdが重複して使用されているということがmicrosoftのサイドで確認できました。
そこでcmd→cmd1にして書き替えるとばっちり動作しました。
cmd.Parameters.Add等の単語の意味がピンとくるように自己研鑽したいと思います。
すばらしい回答を頂きまことにありがとうございました。解決です。

お礼日時:2014/01/09 20:23

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