質問編集履歴
4
追記3の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -168,4 +168,11 @@
|
|
168
168
|
Call CMSG00_ORAErr("ORA000_DB_Connect")
|
169
169
|
|
170
170
|
End Function
|
171
|
-
```
|
171
|
+
```
|
172
|
+
|
173
|
+
### 追記3
|
174
|
+
|
175
|
+
YAmaGNZさんの案を採用させていただきました。
|
176
|
+
データを1~10000行、10001~20000行…という感じに分割して出力する方法に変更しようと思います。
|
177
|
+
早速ROWNUMを試しましたが、以下のようになってしまいます。
|
178
|
+

|
3
追記を変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,6 +32,7 @@
|
|
32
32
|
|
33
33
|
.WriteLine strOut
|
34
34
|
|
35
|
+
'ここでエラーが発生
|
35
36
|
objData.movenext
|
36
37
|
Loop
|
37
38
|
End With
|
@@ -47,8 +48,124 @@
|
|
47
48
|
今回は半分うまくいっているので、言語や手法を変えずにできる方法を探しています。
|
48
49
|
よろしければご教授願います。
|
49
50
|
|
50
|
-
### 追記
|
51
|
+
### 追記1
|
51
52
|
エラー箇所にErr.Descriptionを仕込んでみたら
|
52
53
|
「メモリ不足です」と表示されました。
|
53
54
|
この場合、メモリを増築するなどで対処できますでしょうか?
|
54
|
-
もしくは、SQL部分をチューニングしたり、分割出力(やり方はわからないです)などで回避できるものでしょうか?
|
55
|
+
もしくは、SQL部分をチューニングしたり、分割出力(やり方はわからないです)などで回避できるものでしょうか?
|
56
|
+
|
57
|
+
### 追記2
|
58
|
+
エラーの発生個所は、上記コードに追記しています。
|
59
|
+
FieldValueは以下のようになっています。
|
60
|
+
```VB6
|
61
|
+
Public Function CORA20_FieldsValue(ByRef Ho_DBObject As Object _
|
62
|
+
, Ho_Fields() As Object _
|
63
|
+
, Hn_Idx As Integer) As String
|
64
|
+
|
65
|
+
Dim Ls_Ret As String
|
66
|
+
|
67
|
+
On Error GoTo CORA20_FieldsValue_ERR
|
68
|
+
|
69
|
+
'/* 戻り値クリア
|
70
|
+
If Not Ho_Fields(Hn_Idx) Is Nothing Then
|
71
|
+
If Pb_ADO_ConnectFlg = True Then
|
72
|
+
Ls_Ret = CStr(IIf(Ho_Fields(Hn_Idx).Type = 202, vbNullString, 0))
|
73
|
+
Else
|
74
|
+
Ls_Ret = CStr(IIf(Ho_Fields(Hn_Idx).OraIDataType = 1, vbNullString, 0))
|
75
|
+
End If
|
76
|
+
Else
|
77
|
+
Ls_Ret = vbNullString
|
78
|
+
End If
|
79
|
+
|
80
|
+
'Null値が存在する場合は必ず IsNullを使用する。
|
81
|
+
If Not IsNull(Ho_Fields(Hn_Idx).Value) Then
|
82
|
+
If Pb_ADO_ConnectFlg = True Then '/* ADO
|
83
|
+
Dim Ls_Value As String
|
84
|
+
Ls_Value = CStr(Ho_Fields(Hn_Idx).Value)
|
85
|
+
If Len(Trim(Ls_Value)) = 0 Then
|
86
|
+
Ls_Value = vbNullString
|
87
|
+
End If
|
88
|
+
Ls_Ret = Ls_Value
|
89
|
+
Else
|
90
|
+
Ls_Ret = CStr(Ho_Fields(Hn_Idx).Value)
|
91
|
+
End If
|
92
|
+
Else
|
93
|
+
If Pb_ADO_ConnectFlg = True Then '/* ADO
|
94
|
+
Ls_Ret = IIf(Ho_Fields(Hn_Idx).Type = 202, vbNullString, 0)
|
95
|
+
|
96
|
+
Else '/* Oracle Object for OLE
|
97
|
+
Ls_Ret = IIf(Ho_Fields(Hn_Idx).OraIDataType = 1, vbNullString, 0)
|
98
|
+
End If
|
99
|
+
End If
|
100
|
+
|
101
|
+
CORA20_FieldsValue = Ls_Ret
|
102
|
+
|
103
|
+
Exit Function
|
104
|
+
|
105
|
+
CORA20_FieldsValue_ERR:
|
106
|
+
If Err.Number <> 0 And Err.Number <> 3021 Then
|
107
|
+
Call CORA20_ORAErr(Po_DataBase, "CORA20_FieldsValue")
|
108
|
+
Call CMSG00_ORAErr("CORA20_FieldsValue")
|
109
|
+
End If
|
110
|
+
|
111
|
+
CORA20_FieldsValue = Ls_Ret
|
112
|
+
End Function
|
113
|
+
```
|
114
|
+
|
115
|
+
接続コードは以下のようになっています。
|
116
|
+
```VB6
|
117
|
+
Function CORA00_DB_Connect(ByRef Ho_DBObject As Object _
|
118
|
+
, ByVal Hs_DatabaseName As String _
|
119
|
+
, ByVal Hs_UserName As String _
|
120
|
+
, ByVal Hs_Password As String) As Integer
|
121
|
+
|
122
|
+
Dim Ls_Connect As String
|
123
|
+
|
124
|
+
'VBのエラーとして判断するためエラー処理を行う。
|
125
|
+
On Error GoTo CORA00_DB_Connect_Err
|
126
|
+
|
127
|
+
CORA00_DB_Connect = Ret_NG
|
128
|
+
|
129
|
+
'/* 接続形態チェック
|
130
|
+
Pb_ADO_ConnectFlg = CheckAdoConnection
|
131
|
+
|
132
|
+
If Pb_ADO_ConnectFlg = True Then '/* ADO
|
133
|
+
Set Ho_DBObject = New clsADO
|
134
|
+
|
135
|
+
'ここを通っている
|
136
|
+
Ls_Connect = "Provider=OraOLEDB.Oracle; Data Source=" & Hs_DatabaseName & ";" _
|
137
|
+
& "User Id=" & Hs_UserName & ";" _
|
138
|
+
& "Password=" & Hs_Password & ";"
|
139
|
+
'/* クライアントカーソル使用
|
140
|
+
Ho_DBObject.CursorLocation = adUseClient
|
141
|
+
|
142
|
+
'/* 接続文字列セット
|
143
|
+
Ho_DBObject.ConnectionString = Ls_Connect
|
144
|
+
|
145
|
+
'/* DB接続
|
146
|
+
Ho_DBObject.ConnectDatabase Ho_DBObject.ConnectionString, Hs_UserName, Hs_Password
|
147
|
+
Else '/* Oracle Object for OLE
|
148
|
+
|
149
|
+
Ls_Connect = Trim$(Hs_UserName) & "/" & Hs_Password
|
150
|
+
|
151
|
+
'Lo_OraSessionオブジェクトは、アプリケーション内で使われる
|
152
|
+
'OraDatabaseおよびOraConnection、OraDynasetオブジェクト
|
153
|
+
'の集合を管理します。
|
154
|
+
'OralceをObjectとして認識します。
|
155
|
+
Dim Lo_OraSession As Object
|
156
|
+
Set Lo_OraSession = CreateObject("OracleInProcServer.XOraSession")
|
157
|
+
|
158
|
+
Set Ho_DBObject = Lo_OraSession.OpenDatabase(Hs_DatabaseName$, Ls_Connect$, ORADB_DEFAULT)
|
159
|
+
End If
|
160
|
+
|
161
|
+
CORA00_DB_Connect = Ret_OK
|
162
|
+
|
163
|
+
Exit Function
|
164
|
+
|
165
|
+
CORA00_DB_Connect_Err:
|
166
|
+
|
167
|
+
Call CORA20_ORAErr(Po_DataBase, "ORA000_DB_Connect")
|
168
|
+
Call CMSG00_ORAErr("ORA000_DB_Connect")
|
169
|
+
|
170
|
+
End Function
|
171
|
+
```
|
2
タイトルと追記を変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
VB6、ADOでOracleのデータをCSV化しようとすると、止まる
|
1
|
+
VB6、ADOでOracleのデータをCSV化しようとすると、メモリ不足で止まる
|
body
CHANGED
@@ -50,4 +50,5 @@
|
|
50
50
|
### 追記
|
51
51
|
エラー箇所にErr.Descriptionを仕込んでみたら
|
52
52
|
「メモリ不足です」と表示されました。
|
53
|
-
この場合、メモリを増築するなどで対処できますでしょうか?
|
53
|
+
この場合、メモリを増築するなどで対処できますでしょうか?
|
54
|
+
もしくは、SQL部分をチューニングしたり、分割出力(やり方はわからないです)などで回避できるものでしょうか?
|
1
エラーメッセージを更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -45,4 +45,9 @@
|
|
45
45
|
|
46
46
|
### 要望
|
47
47
|
今回は半分うまくいっているので、言語や手法を変えずにできる方法を探しています。
|
48
|
-
よろしければご教授願います。
|
48
|
+
よろしければご教授願います。
|
49
|
+
|
50
|
+
### 追記
|
51
|
+
エラー箇所にErr.Descriptionを仕込んでみたら
|
52
|
+
「メモリ不足です」と表示されました。
|
53
|
+
この場合、メモリを増築するなどで対処できますでしょうか?
|