いつもお世話になっております。
以下の記述で、勘違い、言葉の理解の間違い等があると思いますが、よろしくお願いします。
(A) http://www.niji.or.jp/home/ashizuka/jikken/vb6.0_02.htm
は、Data Environment デザイナによってコネクションを作り、これをドラッグしたフォームによって MicrosoftAccess97 形式のデータベースにアクセスするコードで、正常に動作しているように見えます。
このプロジェクトを流用して、
(B) http://www.niji.or.jp/home/ashizuka/jikken/vb6.0_03.htm
を作りました。これはADOオブジェクトによって同データベースにアクセスするものですが、次のふたつの点がおかしいのです。
(1) Form_Unloadのプロシージャで
rs.Close
というメソッドを発行しているにもかかわらず、毎回最初に rs.Close してやらないと、
−−−−−−−−−−−−−−−−−−−−−−−−−−
3705
オブジェクトが開いている場合は、アプリケーションが要求した操作は許可されません。
−−−−−−−−−−−−−−−−−−−−−−−−−−
というエラーが出ます。また、
(2) 最初に rs.Close して、デバッグモードで実行すると、正常な流れで実行が行われているようなのに、MoveNext 等のメソッドを実行していないようです。つまり、カレントレコードの移動がまったくできません。しかし、エラーにはなりません。
(2)の不具合に(1)が関係しているのかどうかもわかりませんが、何かおわかりになることがありましたら、お教え下さい。どうかよろしくお願いします。
Data Environmentは使ったことないので合ってるか分かりませんが、
Set rs = DataEnvironment42.rscmd顧客名簿
既にこの時点で目的のレコードセットが出来上がっている(開いてる)のではないでしょうか?
もしそうであれば その状態でOpenすれば当然(1)のエラーが出ます。
(2)はrs.Closeで閉じた後、rs.Openで空のレコードセットを開いているので
(OpenメソッドはSQL文やConnectionを指定しないとメモリ上に空のレコードセットを作る)
レコード移動が出来ないんじゃないかと思います。
Form_Loadのrs.Close及びrs.Openを消してみて下さい。
nanashi さん、ありがとうございます。
nanashi さんがおっしゃるとおり、Form_Loadのrs.Close及びrs.Openを消してみて、MoveNext 等のメソッドを実行させると、カレントレコードの移動を行おうとします。ただ、項目の表示が変わる際に
Field not updatable, Bound Property Name Text, Field Name: 電話番号
というようなメッセージが表示され、OKをクリックしないと次の項目が変わりません。このとき、表示の変化は下の項目から上の項目へと起こりますが(エラーが出るのでわかるんです)一件目のレコードが
顧客ID:1101
顧客名:技術評論社
郵便番号:160-0005
都道府県:東京都
住所:新宿区愛住町xx-xx
電話番号:03-3225-xxxx
二件目のレコードが
顧客ID:1102
顧客名:かもめ社
郵便番号:140-0022
都道府県:東京都
住所:中野区東五反田xx-xx
電話番号:03-1111-xxxx
だった場合、都道府県以外の項目について、一件目の内容から二件目の内容に変わったあと、
Field not updatable, Bound Property Name Text, Field Name: 電話番号
というメッセージが表示され、OKの応答要求がきます。つまり、変わったのに、変わった後にその項目が not updatable だと言ってくるということになります。また、一件目と二件目の内容が同じ項目については、このエラーは表示されないようです。
HELP が使えない環境ですし、”Field not updatable,”とうい文字列でネット上を検索しましたが、日本語のページはヒットしませんでした。
申し訳ありませんが、何かおわかりになることがありましたら、お教え下さい。どうかよろしくお願いします。
最後の問題が解決できませんが、ひとまず、質問を取り下げさせていただきます。
ありがとうございました。
ツイート | ![]() |