• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6のADO接続)

VB6のADO接続と効率的なコードの記述方法

このQ&Aのポイント
  • VB6のADO接続方法と、レコードカウントを取得する効率的なコードの記述方法について教えてください。
  • 目的は、テーブル[Allloto6]のレコードカウントを取得し、変数[WOI(10)]に格納することです。
  • コード内のFORループの繰り返し回数が増えると処理が遅くなりますが、問題なく実行する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

いろいろ考えて、以下のようになりましたが... Public IY1 As String: Public IY2 As String: Public IY0 As String: Public I1 As Integer Public WOI(10) As Double Public DDDD As New ADODB.Connection Public RTR As New ADODB.Recordset Public Sub SY_DT_A() IY0 = "KM6" IY1 = "Allloto6" DDDD.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE =E:\U SS VB\IK NY DATA\" & IY0 & ".mdb" DDDD.Open For I1 = 1 To 10 IY2 = "SELECT Count(A) AS DataCount FROM " & IY1 & " WHERE A = " & I1 Set RTR = DDDD.Execute(IY2) WOI(I1) = RTR.Fields("DataCount").Value Next I1 RTR.Close DDDD.Close

ryu8472
質問者

お礼

 御教授頂いた事を参考にして、自分なりにサンプルを幾つか作って勉強してみようと思います。 また分からない時は、御付き合い頂ければ幸いです。  詳細な御教授を有難う御座いました。

ryu8472
質問者

補足

 今晩は。  何度も詳細説明を有難う御座います。  さて、 失礼ですが、NO5 では [ FOR ]で2回繰り返しは「応答なし」、 代わりに、NO1 NO4 で、アタリでした。下記コードです。 30まで繰り返しで、所要時間約5分でした。 IY0 = "KM6" IY1 = "Allloto6" DDDD.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE =E:\U SS VB\IK NY DATA\" & IY0 & ".mdb" DDDD.Open For I1 = 1 To 30 IY2 = "SELECT Count(A) AS DataCount FROM " & IY1 & " WHERE A = " & I1 RTR.Open IY2, DDDD, adOpenForwardOnly, adLockReadOnly If RTR.Fields("DataCount").Value <> 0 Then WOI(I1) = RTR.Fields("DataCount").Value End If RTR.Close Next I1 DDDD.Close

その他の回答 (4)

回答No.4

私はアホか(苦笑) まったく... No.3 は、 If RTR.Fields("DataCount").Value <> 0 Then WOI(I1) = RTR.Fields("DataCount").Value End If でした。

回答No.3

No.2 の回答、間違っていました。 正しくは If RTR.DataCount <> 0 Then WOI(I1) = RTR.Fields("DataCount") End If でした。 すみません。 「補足」の方は 1、「カウント = -1」になる原因 ( できれば具体的に ) 2、所要時間は仕方が無い ( YES - NO ) 1 について http://support.microsoft.com/kb/194973/ja 2 について For ~ Next 2回ループで 約3分は時間がかかりすぎなので、なんとかしたい所ですね。

回答No.2

No.1 一部間違いがあったので訂正 If RTR.DataCount <> 0 Then WOI(I1) = RTR.DataCount End If

ryu8472
質問者

補足

 今日は。御早い御回答有難う御座います。 ところで、恐れ入りますが「一部訂正」での[ RTR.DataCount ]ですと「メソッドが見つかりません」となるので、 [ RTR.RecordCount ]に変更したところ動作はしても「 WOI(1) = -1 」になります?? また、時間がかかると思い「 FOR で2回」にしましたが、それでも約3分かかります。更には[ WOI(1,2) ]が共に -1 になります。  コードは問題ないとは思われますが「参照設定」などの設定間違いなど他の原因なのでしょうか? 「カウント=-1」これは、一旦無視しても「所要時間がかかり過ぎ」は仕方が無い事なのでしょうか?  ここで恐れ入りますが、 1、「カウント = -1」になる原因 ( できれば具体的に ) 2、所要時間は仕方が無い ( YES - NO ) 上記2点を御教え願えませんか? PS; データ接続は「Dataコントロール」しか使った事が無く他の方法が未知の状態です。 又、pcは自作で CPU;2600K メモリ;8GB なので、所要時間は遅くはならないかと思われます。

回答No.1

For ~ Next を以下のように変更 DDDD.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE =E:\U SS VB\IK NY DATA\" & IY0 & ".mdb" DDDD.Open For I1 = 1 To 10 IY2 = "SELECT Count(A) AS DataCount FROM " & IY1 & " WHERE A = " & I1 RTR.Open IY2, DDDD, adOpenForwardOnly, adLockReadOnly If RTR.DataCount <> 0 Then WOI(I1) = RTR.RecordCount End If RTR.Close Next I1 DDDD.Close

関連するQ&A