IDを呼び出して、足しこんで、新規IDを作成するには?

解決


veron  2005-09-28 00:18:45  No: 125767

初めまして。宜しくお願いいたします。
VB6.0で初めてのプログラム作成を
行っているのですが、

Dim cn As New ADODB.Connection
Dim rst As ADODB.Recordset
Dim strSQL As String

  
If txtId = "" Then
    Dim newID As Long
    Dim longSQL As Long

    Set cn = New ADODB.Connection
    cn.ConnectionString = _
                    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=c:\Documents and Settings\tateoka\My Documents\弁当データ.mdb"
    cn.Open
    Set rst = New ADODB.Recordset
        rst.Source = "顧客マスタ"
    rst.ActiveConnection = cn
    rst.CursorType = adOpenStatic
    rst.LockType = adLockOptimistic
    rst.Open
    
    strSQL = "SELECT MAX(お客様ID) as OID FROM 顧客マスタ"
    longSQL = CLng(rst.Fields("OID"))
    newID = longSQL + 1

    '顧客登録がされていない場合の処理
On Error GoTo Errorhandler
    'トランザクション開始
    cn.BeginTrans
    With rst
        .MoveLast
        .AddNew
        ![お客様ID] = newID
        ![お客様名] = txtName.Text
        ![住所] = txtAddr.Text
        ![電話番号] = txtTel.Text
        .Update
    End With
    '全てのフィールドに登録しない場合にエラーを発生させる。
    If txtName.Text = "" Or txtAddr.Text = "" Or txtTel.Text = "" Then
        Err.Raise (0)
    End If
        cn.CommitTrans
        MsgBox "追加完了"
        txtName.Text = "": txtAddr.Text = "": txtTel.Text = ""
        rst.Close
        cn.Close
        Set rst = Nothing
        Set cn = Nothing
        Exit Sub
Errorhandler:
      MsgBox Err.Description
      
      MsgBox "元に戻します"
      cn.RollbackTrans
      txtName.Text = "": txtAddr.Text = "": txtTel.Text = ""
      cn.Close
      Set rst = Nothing
      Set cn = Nothing
End If

という風に入力して、お客様IDの最大値を呼び出して
それを数値化して、1つ数字を足して新規登録者の
IDとするようにしたいのですが、実行すると
(実行時エラー’3265’)
「要求された名前、または序数に対する項目がコレクションで見つかりません」というエラーが発生します。

どこがおかしいのか自分なりに考えてみましたが解りませんでした。
どうか宜しくお願いします。併せて、長文失礼いたしました。


あすとな〜じ  2005-09-28 00:46:25  No: 125768

>IDとするようにしたいのですが、実行すると
>(実行時エラー’3265’)
>「要求された名前、または序数に対する項目がコレクションで見つかりません」というエラーが発生します。
レコードセットのフィールド名を間違えると、このエラーが出るようです。
一休みしてから落ち着いて確認してみてください。


特攻隊長まるるう  2005-09-28 01:41:49  No: 125769

このコードってこのままで動くの…か?(^^;)
>        rst.Source = "顧客マスタ"
で取れちゃうのか???さすが Access …慣れてないからちょっと気持ち悪いw。
>レコードセットのフィールド名を間違えると、このエラーが出るようです。
ふむー。ならば

1)
>    strSQL = "SELECT MAX(お客様ID) as OID FROM 顧客マスタ"
>    longSQL = CLng(rst.Fields("OID"))
上の行のコードはSQL文の文字列編集。
…でそのSQL文はいつ実行されているんでしょう?
実行されてなければ Fields("OID") は存在しません。

2)
>        ![お客様ID] = newID
>        ![お客様名] = txtName.Text
>        ![住所] = txtAddr.Text
>        ![電話番号] = txtTel.Text
同じ変数 rst を使いまわしてます?このレコードセットの中身は
いつ変更されて何が入っているのでしょう?
>    strSQL = "SELECT MAX(お客様ID) as OID FROM 顧客マスタ"
が実行されているなら存在するフィールドは"OID"のみになりませんか?

3)
あと、基本的な所で"ID"が全角か半角か…とか?

の順で調べていけば良さそう。


veron  2005-09-28 02:32:46  No: 125770

あすとな〜じ様、特攻隊長まるるう様、アドバイス
有難うございます。

一休みして頭を冷やしていました。
これから再トライします!!

もしかしたら(いや、かなり高い確率で…)
行き詰ってしまうかもしれません。
その場合は、また宜しくお願いいたします。


veron  2005-09-28 19:13:47  No: 125771

変身、遅くなり申し訳ございません。

有難うございました!!解決しました。
お二人のご指摘通り、SQL文は実行されていないわ、
変数strSQLを使い回しして、顧客データの
情報が飛んでしまってるわ…おまけにDB接続の記述も
書き込んだものは正しいのに実際では
しょうも無い記述ミスをしてました。

まだまだ、補助輪付で運転しているようなものなので
これからも色々とお世話になるかもしれませんので
宜しくお願いします。

本当に助かりました、有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加