今日は。
正しい記述を御教授願います。
乏しい知識で御恥ずかしいですが、効率の良いコードをお願いします。
●環境
VB6.0 アクセス2000
●目的
下記テーブル[Allloto6]はロト6の全組合せで約600万通りあります。
この内、「A」に応じてレコードカウントを取得、変数[WOI(10)]に格納する。
因みに、A=1 は約85万通り
●不具合
コードの内「★」の[ FOR I1= 1 TO 10 ]、10回繰り返すと「応答なし」になります。
[ FOR I1= 1 TO 1 ]のように1回のみなら問題無さそうですが、時間がかかり過ぎます。
●接続ADO
「Microsoft ActiveX Data Objects 2.x Library」にチェック
●テーブル Allloto6 --------------全て数値
ID A B C D E F
1 1 2 3 4 5 6
2 1 2 3 4 5 7
3 1 2 3 4 5 8
X 38 39 40 41 42 43
--------------------------------
●コード
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"
For I1 = 1 To 10 ★
IY2 = "SELECT * FROM " & IY1 & " WHERE A = " & I1 & " ORDER BY ID"
DDDD.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE =E:\U SS VB\IK NY DATA\" & IY0 & ".mdb"
DDDD.Open
RTR.Open IY2, DDDD, adOpenStatic, adLockOptimistic
If RTR.EOF = False Then
RTR.MoveLast
WOI(I1) = RTR.RecordCount
End If
RTR.Close: DDDD.Close
Next I1
END Sub
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
この回答への補足
今晩は。
何度も詳細説明を有難う御座います。
さて、
失礼ですが、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
御教授頂いた事を参考にして、自分なりにサンプルを幾つか作って勉強してみようと思います。
また分からない時は、御付き合い頂ければ幸いです。
詳細な御教授を有難う御座いました。
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
この回答への補足
今日は。御早い御回答有難う御座います。
ところで、恐れ入りますが「一部訂正」での[ 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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WORD VBA プログラム修正をお願...
-
Excel複数シートをaccessへ一括...
-
Accessで別mdbのテーブルをコピー
-
VBとアクセスでSQL文に変...
-
『列名 '担当者CD' があいま...
-
エクセルのテーブルを解除する...
-
★クリスタルレポートの元になる...
-
Accessで宛名ラベルに同一宛先...
-
asp.net mvcを利用する場合の複...
-
[C#] DataGridViewでコンボボッ...
-
.net 複数の主キーを設定する方法
-
DataGridViewに複数テーブルの...
-
DataGridViewで変更した値を反...
-
ACCESS2010 実行時エラー 2766
-
ワークテーブルの作成について
-
【ADO】「Execute」を使うと...
-
DataGridの中身をDataSetにテー...
-
アクセステーブル、リンクとロ...
-
ACCESSのテーブル名をリストに...
-
COBOLのINVALID KEYが理解でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WORD VBA プログラム修正をお願...
-
VBとアクセスでSQL文に変...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
他のMDBのテーブルに追加したい
-
ExcelVBAからAccessMDB内のテー...
-
手動または分散トランザクショ...
-
SQLを発行とは?クエリの作成と...
-
DataGridViewに複数テーブルの...
-
CSVファイルのエクスポートでソ...
-
AccessからExcelへエクスポート...
-
エクセルのテーブルを解除する...
-
Excel複数シートをaccessへ一括...
-
HTMLのテーブルの行数が多くな...
-
COBOLのINVALID KEYが理解でき...
-
アクセステーブル、リンクとロ...
-
ACCESSのテーブル名をリストに...
-
ACCESS2010 実行時エラー 2766
-
DataGridの中身をDataSetにテー...
-
【ADO】「Execute」を使うと...
おすすめ情報