OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

下記質問Vol.3です

  • 困ってます
  • 質問No.161004
  • 閲覧数97
  • ありがとう数0
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 87% (82/94)

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
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全4件)

  • 回答No.1
レベル8

ベストアンサー率 66% (6/9)

こんにちわ。 思うのですが、処理の順番がおかしいような・・・。 実行ボタンを押したら・・・ 1.入力されたテキストのエラーチェック(入力されているか、桁数など)をする。 2.OKであれば商品IDをキーにSelectし、それがあるかないかチェックする。 ここで、ヒットすればすでに登録されているのでエラーではじけます。もしくは「更新しますか?」のメッセージなど。 3.ヒットしなかったらInse ...続きを読む
こんにちわ。
思うのですが、処理の順番がおかしいような・・・。

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

というのは、はずれでしょうか?
補足コメント
jixyoji

お礼率 87% (82/94)

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

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

注文が多くてすいませんm(. .)m
投稿日時 - 2001-11-01 10:39:47
  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

以下のコードで登録の有無(登録件数)を得ることができます。 >既に登録されてる「商品ID」を「実行」ボタンクリック時にMsgBoxで「既に登録済み」と出すにはどうすれば? Main関数を参考にして、getCount関数を呼び出してください。戻り値が0のときは未登録です。 その他にもチェックロジックとして使用できます。 追加→戻り値 0 更新→戻り値 1 削除→戻り値 1 でないと ...続きを読む
以下のコードで登録の有無(登録件数)を得ることができます。
>既に登録されてる「商品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
  • 回答No.3
レベル8

ベストアンサー率 33% (18/53)

cat_tomatoさんの説明を利用させていただいてこんな感じですか? (Oracleへの接続方法はちょっと異なりますが) >2.OKであれば商品IDをキーにSelectし、それがあるかないかチェックする。   StrSQL="select count(*) from 商品マスタ where " & "商品ID=" & txtルー ...続きを読む
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

こんなことでいかがでしょうか?
  • 回答No.4
レベル12

ベストアンサー率 65% (276/422)

余談です。 Private cn As New ADODB.Connection Private rs As New ADODB.Recordset Private cmd As New ADODB.Command として宣言してますよね? とあるメーリングリストで As New 撲滅運動をしてました。(VB5の時代ですが・・・) まずは二つのソースを見てください。 Sub ...続きを読む
余談です。
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系が多いですが、できるだけ負荷のかからない、そして「落ちない」処理になるように勤めています。
あくまでも余談です。。。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ