オラクルのデータをAccessに追加 無限ループ
前回、オラクルからデータを取り出し、Accessのテーブルに書き込みを教えて頂き、データ追加は出来たのですが、データ追加時に無限ループが発生しました。
【環境】
Oracle:10g
Access:2010
Dim CON As New ADODB.Connection 'Oracle側コネクション
Dim RS As ADODB.Recordset 'Oracle側レコードセット
Dim SQL As String 'Oracle側SQL文
Dim i As Integer '処理用インクリメント
Dim DT As Date '抽出日付変数(日付型)
Dim sDT As String '抽出日付変数(テキスト型)
Dim RS2 As ADODB.Recordset 'Access側レコードセット
◎現在の状況
Dim CON As New ADODB.Connection
Dim RS As ADODB.Recordset
Dim SQL As String
Dim i As Integer
'DB接続定義
CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;"
'SQL文
SQL = "SELECT "
SQL = SQL & "カラム1,"
SQL = SQL & "カラム2,"
SQL = SQL & "カラム3"
SQL = SQL & "FROM オラクルテーブル名 "
SQL = SQL & "WHERE 抽出条件 "
SQL = SQL & "AND 抽出条件"
SQL = SQL & "GROUP BY カラム"
SET RS = CON.EXCUTE(SQL)
’取得したレコード数表示
MsgBox "オラクル側のレコード数は: " & RS.RecordCount
(1)↑↑↑オラクルから、抽出したレコード数表示
rs2.Open "新しいテーブル名", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do Until rs.EOF
rs2.AddNew
rs2!カラム1 = rs!カラム1
rs2!カラム2 = rs!カラム2
rs2!カラム3 = rs!カラム3
rs2.Update
rs2.Close: Set rs2 = Nothing
rs.close: SET RS = Nothing
con.close:SET CON=Nothing
end sub
上記を実行したところ、いくら待っても処理がおわらず、強制終了をかけた所、新テーブルには、約150万件追加されてました。
(1)でオラクルから抽出した、レコード数を表示させてみた所、-1でした。
◎疑問点、
-1ってありえない数値だと思うのですが。
ちなみに、オラクル側で同様のSQLを実行させた所、取得件数は48件でした。
上記について、ご存じの方がいらっしゃいましたら、アドバイスお願いいたします。
補足
ご回答ありがとうございます。 おっしゃるとおり、oracle以外のDBでは空文字とNULLは違うものとして扱われています。 また、現時点で調べた結果、adodbの「ADODB_FORCE_TYPE」に「ADODB_FORCE_NULL」を設定することで、空文字をNULLに自動変換してくれるものがあるのですが、私の環境ではコードの都合上うまく使うことができませんでした。