★★★ Technical Info ★★★


Domino



DominoのAgentからLSXODBCを使用して、データベースからデータの取得をしていますが、 UDBの場合に全件データを読む前に、Agentが終わってしまう現象が発生しました。

ロジックは以下のようなものです。

	Set ODBCqry = New ODBCQuery
	Set ODBCqry.Connection = ODBCconn

	ODBCqry.SQL = "select pkey from tableA order by pkey"

	Set ODBCrs = New ODBCResultSet
	Set ODBCrs.Query = ODBCqry

	If ODBCrs.Execute = False Then
		Exit Sub
	End If

	'レコードが何もなければ終了
	If Not(ODBCrs.IsResultSetAvailable) Then
		Exit Sub
	End If

	'ループ処理
	Do

	'とある処理ルーチン....

		Call ODBCrs.NextRow

	Loop Until ODBCrs.IsEndOfData

ODBCrs.IsEndOfDataが、10数件のところでtrueとなって終わってしまっていました。

OracleのODBCの場合は正常に処理でき5000件のレコードが読み込まれます。
UDBのODBCを使用した場合に処理は正常ですが、30件しかレコードが読み込まれていません。

試行錯誤の結果、以下のコードを追加することで回避ができました。

	ODBCrs.cacheLimit = 20
	ODBCrs.FetchBatchSize = 10
原因は不明ですが、SQL文でselectする項目が多かったり、レコード数が多い場合に メモリーが不足すると発生するようです。

今回は、たまたま上記設定で回避することができました。

[注] cacheLimit < FetchBatchSize にする必要があるようです。


[Technical Info]