初めまして。宜しくお願いいたします。
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’)
「要求された名前、または序数に対する項目がコレクションで見つかりません」というエラーが発生します。
どこがおかしいのか自分なりに考えてみましたが解りませんでした。
どうか宜しくお願いします。併せて、長文失礼いたしました。
>IDとするようにしたいのですが、実行すると
>(実行時エラー’3265’)
>「要求された名前、または序数に対する項目がコレクションで見つかりません」というエラーが発生します。
レコードセットのフィールド名を間違えると、このエラーが出るようです。
一休みしてから落ち着いて確認してみてください。
このコードってこのままで動くの…か?(^^;)
> 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"が全角か半角か…とか?
の順で調べていけば良さそう。
あすとな〜じ様、特攻隊長まるるう様、アドバイス
有難うございます。
一休みして頭を冷やしていました。
これから再トライします!!
もしかしたら(いや、かなり高い確率で…)
行き詰ってしまうかもしれません。
その場合は、また宜しくお願いいたします。
変身、遅くなり申し訳ございません。
有難うございました!!解決しました。
お二人のご指摘通り、SQL文は実行されていないわ、
変数strSQLを使い回しして、顧客データの
情報が飛んでしまってるわ…おまけにDB接続の記述も
書き込んだものは正しいのに実際では
しょうも無い記述ミスをしてました。
まだまだ、補助輪付で運転しているようなものなので
これからも色々とお世話になるかもしれませんので
宜しくお願いします。
本当に助かりました、有難うございました。
ツイート | ![]() |