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

If intSr = 1 Then

intRes = MsgBox("追加してもO.K.ですか?", vbYesNo + vbQuestion)

If intRes = vbYes Then

With cmd

.ActiveConnection = cn
.CommandType = adCmdText
.CommandText = strSQL
.Execute

End With

Call 状態変化(2)

End If
Else
intRes2 = MsgBox("更新しても良いですか?", vbYesNo + vbQuestion)

If intRes2 = vbYes Then

With cmd

.ActiveConnection = cn
.CommandType = adCmdText
.CommandText = strSQL2
.Execute

End With

Call 状態変化(2)

End If

End If
End Sub

よろしくお願いします。


関連URL:http://www.okweb.ne.jp/kotaeru.php3?q=160999
http://www.okweb.ne.jp/kotaeru.php3?q=161003

A 回答 (4件)

余談です。


Private cn As New ADODB.Connection
Private rs As New ADODB.Recordset
Private cmd As New ADODB.Command
として宣言してますよね?

とあるメーリングリストで
As New 撲滅運動をしてました。(VB5の時代ですが・・・)

まずは二つのソースを見てください。
Sub TEST1()
  Dim 変数 As New ADODB.Connection
  
  Set 変数 = Nohting
End SUb

Sub TEST2()
  Dim 変数 As ADODB.Connection
  Set 変数 = New ADODB.Connection
  
  Set 変数 = Nohting
End SUb

これは一見同じです。
しかし最後のNothingをセットした後に、宣言をしたときの状態に戻るので、TEST1は開放されきっていません。
たしかに一行省けるので、TEST1の方が見栄えはいいのですが・・・
VBはメモリの扱いが下手です。僕もDB系が多いですが、できるだけ負荷のかからない、そして「落ちない」処理になるように勤めています。
あくまでも余談です。。。
    • good
    • 0

cat_tomatoさんの説明を利用させていただいてこんな感じですか?


(Oracleへの接続方法はちょっと異なりますが)

>2.OKであれば商品IDをキーにSelectし、それがあるかないかチェックする。
  StrSQL="select count(*) from 商品マスタ where " & "商品ID=" & txtループ(0).Text
  Set oraDs = oraDb.DbcreateDynaset(StrSQL, 0&)

>ここで、ヒットすればすでに登録されているのでエラーではじけます。もしくは「更新しますか?」のメッセージなど。
>3.ヒットしなかったらInsert文を実行、更新するならUpdate文を実行すればよろしいかと・・・。
Cnt = oraDs.RecordCount
If Cnt > 0 Then
    intRes2 = MsgBox("更新しても良いですか?", vbYesNo + vbQuestion)
    ' vbYes => 更新処理
    ' vbNo  => Cancel処理
  else
    intRes = MsgBox("追加してもO.K.ですか?", vbYesNo + vbQuestion)
    ' vbYes => 追加処理
    ' vbNo  => Cancel処理
end if

こんなことでいかがでしょうか?
    • good
    • 0

以下のコードで登録の有無(登録件数)を得ることができます。


>既に登録されてる「商品ID」を「実行」ボタンクリック時にMsgBoxで「既に登録済み」と出すにはどうすれば?
Main関数を参考にして、getCount関数を呼び出してください。戻り値が0のときは未登録です。

その他にもチェックロジックとして使用できます。
追加→戻り値 0
更新→戻り値 1
削除→戻り値 1
でないと、処理的な矛盾が発生すると思います。

Sub Main()
  Dim Cnn As ADODB.Connection
  
  'DBに接続
  Set Cnn = "接続"
  
  MsgBox getCount(Cnn, "商品マスタテーブル", 9)
  
  Set Cnn = Nothing
End Sub

Function getCount(inCnn As ADODB.Connection, inTblName As String, inSyouhinID As Long)
  Dim Rs   As ADODB.Recordset
  Dim strSQL As String
  
  'カウンタ初期化
  getCount = 0
  
  
  'レコードセット
  strSQL = "select count(*) from " & inTblName & _
      " where 商品ID=" & inSyouhinID
  Set Rs = New ADODB.Recordset
  Rs.Open strSQL, inCnn
  
  '数を取得
  getCount = Rs(0).Value
  
  'それぞれ閉じて開放
  Rs.Close
  Set Rs = Nothing
End Function
    • good
    • 0

こんにちわ。


思うのですが、処理の順番がおかしいような・・・。

実行ボタンを押したら・・・
1.入力されたテキストのエラーチェック(入力されているか、桁数など)をする。
2.OKであれば商品IDをキーにSelectし、それがあるかないかチェックする。
ここで、ヒットすればすでに登録されているのでエラーではじけます。もしくは「更新しますか?」のメッセージなど。
3.ヒットしなかったらInsert文を実行、更新するならUpdate文を実行すればよろしいかと・・・。

というのは、はずれでしょうか?

この回答への補足

早速の回答ありがとうございます。

一様ですね、実行時にはちゃんと処理はできるのですが・・・問題は既に登録済みの「商品ID」を「追加」ボタンを押した後に打ち込んだときに「既に存在します」とMsgBoxで出すためにはどこをどうすればよいかを質問の主点としてるのでご指摘の順番が違うというのは私の質問の解決に直結しますか?VBに関しては初心者なので詳しいご指摘をお願いします。

注文が多くてすいませんm(. .)m

補足日時:2001/11/01 10:39
    • good
    • 0

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


このQ&Aを見た人がよく見るQ&A