回答編集履歴

3

サンプル追加

2020/01/07 08:58

投稿

KOZ6.0
KOZ6.0

スコア2628

test CHANGED
@@ -75,3 +75,107 @@
75
75
  こうなっていますか?
76
76
 
77
77
  ![イメージ説明](bd7f3c51622172f1435c38de5fe4f565.png)
78
+
79
+
80
+
81
+ ### 追記3
82
+
83
+ サンプルです。(400 万件、460 MB の CSV 出力に成功)
84
+
85
+
86
+
87
+ ```VB
88
+
89
+ Sub OutputCSV(ByVal con As ADODB.Connection, ByVal strSchema As String, ByVal strTable As String, ByVal strOutput As String)
90
+
91
+ Dim strFileName As String
92
+
93
+ Dim FSO As Scripting.FileSystemObject
94
+
95
+ Dim TS As Scripting.TextStream
96
+
97
+
98
+
99
+ Dim strSQL As String
100
+
101
+ Dim objData As ADODB.Recordset
102
+
103
+ Dim objDataFld As ADODB.Field
104
+
105
+
106
+
107
+ Dim count As Long
108
+
109
+ Dim strOut As String
110
+
111
+
112
+
113
+ Set FSO = New Scripting.FileSystemObject
114
+
115
+ strFileName = FSO.BuildPath(strOutput, strTable & "_" & Format(Now, "yyyyMMdd") & ".csv")
116
+
117
+ Set TS = FSO.OpenTextFile(strFileName, ForWriting, True)
118
+
119
+
120
+
121
+ strSQL = "SELECT * FROM " & strSchema & "." & strTable
122
+
123
+ Set objData = con.Execute(strSQL)
124
+
125
+
126
+
127
+ Do Until objData.EOF
128
+
129
+ strOut = ""
130
+
131
+ For Each objDataFld In objData.Fields
132
+
133
+ strOut = strOut & "," & objDataFld.value
134
+
135
+ Next
136
+
137
+ TS.WriteLine Mid(strOut, 2)
138
+
139
+ count = count + 1
140
+
141
+ If (count Mod 100) = 0 Then
142
+
143
+ DoEvents
144
+
145
+ End If
146
+
147
+ objData.MoveNext
148
+
149
+ Loop
150
+
151
+ objData.Close
152
+
153
+ TS.Close
154
+
155
+ End Sub
156
+
157
+ ```
158
+
159
+
160
+
161
+ 使い方
162
+
163
+ ```VB
164
+
165
+ Dim con As ADODB.Connection
166
+
167
+ Set con = New ADODB.Connection
168
+
169
+ con.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=(TNS名);User Id=(ユーザ名);Password=(パスワード);"
170
+
171
+ con.CursorLocation = adUseServer
172
+
173
+ con.Open
174
+
175
+
176
+
177
+ OutputCSV con, スキーマ名1, テーブル名1, 出力フォルダ名1
178
+
179
+ OutputCSV con, スキーマ名2, テーブル名2, 出力フォルダ名2
180
+
181
+ ```

2

objData のウォッチ結果を追記

2020/01/07 08:58

投稿

KOZ6.0
KOZ6.0

スコア2628

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- 追記
49
+ ### 追記
50
50
 
51
51
  フォームを使用して進捗表示等を行っている場合は、フォームの Enabled プロパティを False にして操作不能にした上で、ループ中に適宜 DoEvents をいれてください。
52
52
 
@@ -67,3 +67,11 @@
67
67
  ```
68
68
 
69
69
  こんな感じです。
70
+
71
+
72
+
73
+ ### 追記2
74
+
75
+ こうなっていますか?
76
+
77
+ ![イメージ説明](bd7f3c51622172f1435c38de5fe4f565.png)

1

DoEvents を入れる

2020/01/07 08:19

投稿

KOZ6.0
KOZ6.0

スコア2628

test CHANGED
@@ -43,3 +43,27 @@
43
43
 
44
44
 
45
45
  DbCreateDynaset は oo4o でなく自前の Function なので、その中で CursorLocation を指定している箇所があれば、同様にしてください。
46
+
47
+
48
+
49
+ #追記
50
+
51
+ フォームを使用して進捗表示等を行っている場合は、フォームの Enabled プロパティを False にして操作不能にした上で、ループ中に適宜 DoEvents をいれてください。
52
+
53
+ でないと固まります。
54
+
55
+
56
+
57
+ ```VB
58
+
59
+ count = count + 1
60
+
61
+ If (count Mod 100) = 0 Then
62
+
63
+ DoEvents
64
+
65
+ End If
66
+
67
+ ```
68
+
69
+ こんな感じです。