回答編集履歴
3
サンプル追加
answer
CHANGED
@@ -36,4 +36,56 @@
|
|
36
36
|
|
37
37
|
### 追記2
|
38
38
|
こうなっていますか?
|
39
|
-

|
39
|
+

|
40
|
+
|
41
|
+
### 追記3
|
42
|
+
サンプルです。(400 万件、460 MB の CSV 出力に成功)
|
43
|
+
|
44
|
+
```VB
|
45
|
+
Sub OutputCSV(ByVal con As ADODB.Connection, ByVal strSchema As String, ByVal strTable As String, ByVal strOutput As String)
|
46
|
+
Dim strFileName As String
|
47
|
+
Dim FSO As Scripting.FileSystemObject
|
48
|
+
Dim TS As Scripting.TextStream
|
49
|
+
|
50
|
+
Dim strSQL As String
|
51
|
+
Dim objData As ADODB.Recordset
|
52
|
+
Dim objDataFld As ADODB.Field
|
53
|
+
|
54
|
+
Dim count As Long
|
55
|
+
Dim strOut As String
|
56
|
+
|
57
|
+
Set FSO = New Scripting.FileSystemObject
|
58
|
+
strFileName = FSO.BuildPath(strOutput, strTable & "_" & Format(Now, "yyyyMMdd") & ".csv")
|
59
|
+
Set TS = FSO.OpenTextFile(strFileName, ForWriting, True)
|
60
|
+
|
61
|
+
strSQL = "SELECT * FROM " & strSchema & "." & strTable
|
62
|
+
Set objData = con.Execute(strSQL)
|
63
|
+
|
64
|
+
Do Until objData.EOF
|
65
|
+
strOut = ""
|
66
|
+
For Each objDataFld In objData.Fields
|
67
|
+
strOut = strOut & "," & objDataFld.value
|
68
|
+
Next
|
69
|
+
TS.WriteLine Mid(strOut, 2)
|
70
|
+
count = count + 1
|
71
|
+
If (count Mod 100) = 0 Then
|
72
|
+
DoEvents
|
73
|
+
End If
|
74
|
+
objData.MoveNext
|
75
|
+
Loop
|
76
|
+
objData.Close
|
77
|
+
TS.Close
|
78
|
+
End Sub
|
79
|
+
```
|
80
|
+
|
81
|
+
使い方
|
82
|
+
```VB
|
83
|
+
Dim con As ADODB.Connection
|
84
|
+
Set con = New ADODB.Connection
|
85
|
+
con.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=(TNS名);User Id=(ユーザ名);Password=(パスワード);"
|
86
|
+
con.CursorLocation = adUseServer
|
87
|
+
con.Open
|
88
|
+
|
89
|
+
OutputCSV con, スキーマ名1, テーブル名1, 出力フォルダ名1
|
90
|
+
OutputCSV con, スキーマ名2, テーブル名2, 出力フォルダ名2
|
91
|
+
```
|
2
objData のウォッチ結果を追記
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
DbCreateDynaset は oo4o でなく自前の Function なので、その中で CursorLocation を指定している箇所があれば、同様にしてください。
|
24
24
|
|
25
|
-
|
25
|
+
### 追記
|
26
26
|
フォームを使用して進捗表示等を行っている場合は、フォームの Enabled プロパティを False にして操作不能にした上で、ループ中に適宜 DoEvents をいれてください。
|
27
27
|
でないと固まります。
|
28
28
|
|
@@ -32,4 +32,8 @@
|
|
32
32
|
DoEvents
|
33
33
|
End If
|
34
34
|
```
|
35
|
-
こんな感じです。
|
35
|
+
こんな感じです。
|
36
|
+
|
37
|
+
### 追記2
|
38
|
+
こうなっていますか?
|
39
|
+

|
1
DoEvents を入れる
answer
CHANGED
@@ -20,4 +20,16 @@
|
|
20
20
|
|
21
21
|
とします。
|
22
22
|
|
23
|
-
DbCreateDynaset は oo4o でなく自前の Function なので、その中で CursorLocation を指定している箇所があれば、同様にしてください。
|
23
|
+
DbCreateDynaset は oo4o でなく自前の Function なので、その中で CursorLocation を指定している箇所があれば、同様にしてください。
|
24
|
+
|
25
|
+
#追記
|
26
|
+
フォームを使用して進捗表示等を行っている場合は、フォームの Enabled プロパティを False にして操作不能にした上で、ループ中に適宜 DoEvents をいれてください。
|
27
|
+
でないと固まります。
|
28
|
+
|
29
|
+
```VB
|
30
|
+
count = count + 1
|
31
|
+
If (count Mod 100) = 0 Then
|
32
|
+
DoEvents
|
33
|
+
End If
|
34
|
+
```
|
35
|
+
こんな感じです。
|