Date: Wed, 18 Jul 2001 15:25:02 +0900
From: who@sub.example.jp
お世話になります。
カナ文字のパラメータオブジェクトを使ったADOのプログラミングで条件検索のアプ
リのテストを行っています。
検索の結果、同じカナ名の方がいられて複数レコードを取得できました。
Access2000のFormに1件目の照会結果がでています。次候補ボタンを作って2件目を
表示したいのですが、
ADOの基本型が理解できてないためうまく行きません。
検索のイベントと次レコード移行のイベントの間でレコードセットの変数"rs"のス
コープが切れてしまいます。
対応方法を教えてください。
■ 使用環境 <クライアント/サーバー>
クライアントPC
OS/Windows 98
Access/Access 2000
SQLサーバ7.0 DESKTOP版(EnterpriseManager含む)をインストールし、
SQLサーバデータベースを作成.を同じPCに作っています。
(補足)
テスト環境として、1台のPCでクライアント/サーバシステムの形態をとっていま
す。
■ 実現したいこと
・個人の属性検索をします。個人の属性は個人番号、カナ氏名など、
・ Access2000のフォームを使って、カナ氏名 を条件にデータベースを複数レコー
ドを
次候補ボタンを作って検索します。
・ フォームのモジュールで 次候補のイベント実行をおこないます。
・ イベント時に標準モジュール(SetRecord)がコールされ、標準モジュールの中で
次レコードの表示をする
ADOのプログラミングを組み込んでいます。
■ フォームのイベントプロシージャ(カナ氏名で検索する..1件目を表示)
Option Compare Database
Option Explicit
Const cFormName_M = "人事情報照会"
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim parm As ADODB.Parameter
Dim ado_err As ADODB.Error
Dim cmd1 As ADODB.Command
Private Sub kanashimei_AfterUpdate()
Set cn = Application.CurrentProject.Connection
Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset
Set parm = New ADODB.Parameter
'parm.Direction = adParamInput
'parm.Type = adVarWChar
'parm.Value = Forms(cFormName_M)![kanashimei]
With cmd
.ActiveConnection = cn
.CommandType = adCmdStoredProc
.CommandText = "str_kana"
Set parm = .CreateParameter(, adVarWChar, adParamInput, 256,
Forms(cFormName_M)![kanashimei])
.Parameters.Append parm
End With
Set rs = cmd.Execute
Forms(cFormName_M).Controls("個人番号") = rs![個人番号]
Forms(cFormName_M).Controls("CD") = rs![CD]
Forms(cFormName_M).Controls("漢字氏名") = rs![漢字氏名]
Forms(cFormName_M).Controls("カナ氏名") = rs![カナ氏名]
rs.MoveLast
Forms(cFormName_M).Controls("総件数") = rs.RecordCount
rs.MoveFirst
DoCmd.OpenForm cFormName_M
rs.Close
Set rs = Nothing
Set parm = Nothing
Set cmd = Nothing
Exit Sub
trans_error:
MsgBox "キーがありません。"
End Sub
■ フォームのイベントプロシージャ(次のレコードに移動して表示)
Private Sub 次候補_Click()
If Not rs.EOF Then rs.MoveNext
Forms(cFormName_M).Controls("個人番号") = rs![個人番号]
Forms(cFormName_M).Controls("CD") = rs![CD]
Forms(cFormName_M).Controls("漢字氏名") = rs![漢字氏名]
Forms(cFormName_M).Controls("カナ氏名") = rs![カナ氏名]
If rs.EOF And rs.RecordCount > 0 Then
rs.MoveLast
End If
End Sub
■ 問題
「カナ氏名検索」のイベントプロシージャ(kanashimei_AfterUpdate)で1件目の
レコードをAccessのフォームに表示できました。
「次のレコードに移動して表示」のイベントプロシージャを実行すると
「実行時エラー'91'オブジェクト変数またはwithブロック変数が設定されていませ
ん」
のエラーメッセージがでて、デバッグの場所が
If Not rs.EOF Then rs.MoveNext
を示しています。
seki
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|