質問編集履歴

4

追記3の追加

2020/01/07 07:40

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -339,3 +339,17 @@
339
339
  End Function
340
340
 
341
341
  ```
342
+
343
+
344
+
345
+ ### 追記3
346
+
347
+
348
+
349
+ YAmaGNZさんの案を採用させていただきました。
350
+
351
+ データを1~10000行、10001~20000行…という感じに分割して出力する方法に変更しようと思います。
352
+
353
+ 早速ROWNUMを試しましたが、以下のようになってしまいます。
354
+
355
+ ![イメージ説明](b58c993fdcafc56d5f74e5eebb63054c.png)

3

追記を変更

2020/01/07 07:40

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -66,6 +66,8 @@
66
66
 
67
67
 
68
68
 
69
+ 'ここでエラーが発生
70
+
69
71
  objData.movenext
70
72
 
71
73
  Loop
@@ -96,7 +98,7 @@
96
98
 
97
99
 
98
100
 
99
- ### 追記
101
+ ### 追記1
100
102
 
101
103
  エラー箇所にErr.Descriptionを仕込んでみたら
102
104
 
@@ -105,3 +107,235 @@
105
107
  この場合、メモリを増築するなどで対処できますでしょうか?
106
108
 
107
109
  もしくは、SQL部分をチューニングしたり、分割出力(やり方はわからないです)などで回避できるものでしょうか?
110
+
111
+
112
+
113
+ ### 追記2
114
+
115
+ エラーの発生個所は、上記コードに追記しています。
116
+
117
+ FieldValueは以下のようになっています。
118
+
119
+ ```VB6
120
+
121
+ Public Function CORA20_FieldsValue(ByRef Ho_DBObject As Object _
122
+
123
+ , Ho_Fields() As Object _
124
+
125
+ , Hn_Idx As Integer) As String
126
+
127
+
128
+
129
+ Dim Ls_Ret As String
130
+
131
+
132
+
133
+ On Error GoTo CORA20_FieldsValue_ERR
134
+
135
+
136
+
137
+ '/* 戻り値クリア
138
+
139
+ If Not Ho_Fields(Hn_Idx) Is Nothing Then
140
+
141
+ If Pb_ADO_ConnectFlg = True Then
142
+
143
+ Ls_Ret = CStr(IIf(Ho_Fields(Hn_Idx).Type = 202, vbNullString, 0))
144
+
145
+ Else
146
+
147
+ Ls_Ret = CStr(IIf(Ho_Fields(Hn_Idx).OraIDataType = 1, vbNullString, 0))
148
+
149
+ End If
150
+
151
+ Else
152
+
153
+ Ls_Ret = vbNullString
154
+
155
+ End If
156
+
157
+
158
+
159
+ 'Null値が存在する場合は必ず IsNullを使用する。
160
+
161
+ If Not IsNull(Ho_Fields(Hn_Idx).Value) Then
162
+
163
+ If Pb_ADO_ConnectFlg = True Then '/* ADO
164
+
165
+ Dim Ls_Value As String
166
+
167
+ Ls_Value = CStr(Ho_Fields(Hn_Idx).Value)
168
+
169
+ If Len(Trim(Ls_Value)) = 0 Then
170
+
171
+ Ls_Value = vbNullString
172
+
173
+ End If
174
+
175
+ Ls_Ret = Ls_Value
176
+
177
+ Else
178
+
179
+ Ls_Ret = CStr(Ho_Fields(Hn_Idx).Value)
180
+
181
+ End If
182
+
183
+ Else
184
+
185
+ If Pb_ADO_ConnectFlg = True Then '/* ADO
186
+
187
+ Ls_Ret = IIf(Ho_Fields(Hn_Idx).Type = 202, vbNullString, 0)
188
+
189
+
190
+
191
+ Else '/* Oracle Object for OLE
192
+
193
+ Ls_Ret = IIf(Ho_Fields(Hn_Idx).OraIDataType = 1, vbNullString, 0)
194
+
195
+ End If
196
+
197
+ End If
198
+
199
+
200
+
201
+ CORA20_FieldsValue = Ls_Ret
202
+
203
+
204
+
205
+ Exit Function
206
+
207
+
208
+
209
+ CORA20_FieldsValue_ERR:
210
+
211
+ If Err.Number <> 0 And Err.Number <> 3021 Then
212
+
213
+ Call CORA20_ORAErr(Po_DataBase, "CORA20_FieldsValue")
214
+
215
+ Call CMSG00_ORAErr("CORA20_FieldsValue")
216
+
217
+ End If
218
+
219
+
220
+
221
+ CORA20_FieldsValue = Ls_Ret
222
+
223
+ End Function
224
+
225
+ ```
226
+
227
+
228
+
229
+ 接続コードは以下のようになっています。
230
+
231
+ ```VB6
232
+
233
+ Function CORA00_DB_Connect(ByRef Ho_DBObject As Object _
234
+
235
+ , ByVal Hs_DatabaseName As String _
236
+
237
+ , ByVal Hs_UserName As String _
238
+
239
+ , ByVal Hs_Password As String) As Integer
240
+
241
+
242
+
243
+ Dim Ls_Connect As String
244
+
245
+
246
+
247
+ 'VBのエラーとして判断するためエラー処理を行う。
248
+
249
+ On Error GoTo CORA00_DB_Connect_Err
250
+
251
+
252
+
253
+ CORA00_DB_Connect = Ret_NG
254
+
255
+
256
+
257
+ '/* 接続形態チェック
258
+
259
+ Pb_ADO_ConnectFlg = CheckAdoConnection
260
+
261
+
262
+
263
+ If Pb_ADO_ConnectFlg = True Then '/* ADO
264
+
265
+ Set Ho_DBObject = New clsADO
266
+
267
+
268
+
269
+ 'ここを通っている
270
+
271
+ Ls_Connect = "Provider=OraOLEDB.Oracle; Data Source=" & Hs_DatabaseName & ";" _
272
+
273
+ & "User Id=" & Hs_UserName & ";" _
274
+
275
+ & "Password=" & Hs_Password & ";"
276
+
277
+ '/* クライアントカーソル使用
278
+
279
+ Ho_DBObject.CursorLocation = adUseClient
280
+
281
+
282
+
283
+ '/* 接続文字列セット
284
+
285
+ Ho_DBObject.ConnectionString = Ls_Connect
286
+
287
+
288
+
289
+ '/* DB接続
290
+
291
+ Ho_DBObject.ConnectDatabase Ho_DBObject.ConnectionString, Hs_UserName, Hs_Password
292
+
293
+ Else '/* Oracle Object for OLE
294
+
295
+
296
+
297
+ Ls_Connect = Trim$(Hs_UserName) & "/" & Hs_Password
298
+
299
+
300
+
301
+ 'Lo_OraSessionオブジェクトは、アプリケーション内で使われる
302
+
303
+ 'OraDatabaseおよびOraConnection、OraDynasetオブジェクト
304
+
305
+ 'の集合を管理します。
306
+
307
+ 'OralceをObjectとして認識します。
308
+
309
+ Dim Lo_OraSession As Object
310
+
311
+ Set Lo_OraSession = CreateObject("OracleInProcServer.XOraSession")
312
+
313
+
314
+
315
+ Set Ho_DBObject = Lo_OraSession.OpenDatabase(Hs_DatabaseName$, Ls_Connect$, ORADB_DEFAULT)
316
+
317
+ End If
318
+
319
+
320
+
321
+ CORA00_DB_Connect = Ret_OK
322
+
323
+
324
+
325
+ Exit Function
326
+
327
+
328
+
329
+ CORA00_DB_Connect_Err:
330
+
331
+
332
+
333
+ Call CORA20_ORAErr(Po_DataBase, "ORA000_DB_Connect")
334
+
335
+ Call CMSG00_ORAErr("ORA000_DB_Connect")
336
+
337
+
338
+
339
+ End Function
340
+
341
+ ```

2

タイトルと追記を変更

2020/01/07 00:56

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- VB6、ADOでOracleのデータをCSV化しようとすると、止まる
1
+ VB6、ADOでOracleのデータをCSV化しようとすると、メモリ不足で止まる
test CHANGED
@@ -103,3 +103,5 @@
103
103
  「メモリ不足です」と表示されました。
104
104
 
105
105
  この場合、メモリを増築するなどで対処できますでしょうか?
106
+
107
+ もしくは、SQL部分をチューニングしたり、分割出力(やり方はわからないです)などで回避できるものでしょうか?

1

エラーメッセージを更新

2020/01/06 08:28

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,13 @@
93
93
  今回は半分うまくいっているので、言語や手法を変えずにできる方法を探しています。
94
94
 
95
95
  よろしければご教授願います。
96
+
97
+
98
+
99
+ ### 追記
100
+
101
+ エラー箇所にErr.Descriptionを仕込んでみたら
102
+
103
+ 「メモリ不足です」と表示されました。
104
+
105
+ この場合、メモリを増築するなどで対処できますでしょうか?