投稿日 | : 2007/01/10(Wed) 11:08 |
投稿者 | : てるてれ |
Eメール | : |
URL | : |
タイトル | : "" (空の文字列)を NULL ではなく空の文字列として扱う方法 |
まず、サンプルを・・・
『MDBとテーブルを作成し、テーブルにデータを入れ、
そのデータをCSVファイルに吐き出し、
吐き出したデータを再度MDBに入れる』というものです。
' DAOのみ参照設定。
Sub Main()
Dim de As DAO.DBEngine
Dim ws As DAO.Workspace
Dim db As DAO.Database
Dim mdbpath As String
Dim csvdir As String
Dim csvname As String
mdbpath = App.Path & "\data.mdb"
csvdir = App.Path
csvname = "TABLE1.csv"
' MDBファイルを新規に作成し、そのMDBに接続
Set de = New DAO.DBEngine
Set ws = de.CreateWorkspace("", "Admin", "")
Set db = ws.CreateDatabase(mdbpath, dbLangJapanese)
' FIELD1 (値要求・空文字列許可の文字列型)というフィールドを持つ
' TABLE1 というテーブルを作成
Call db.Execute("create table TABLE1 ( FIELD1 text(10) not null)")
db.TableDefs.Refresh
db.TableDefs("TABLE1").Fields("FIELD1").AllowZeroLength = True
' データを挿入
Call db.Execute("insert into TABLE1 values ('a')")
Call db.Execute("insert into TABLE1 values ('b')")
Call db.Execute("insert into TABLE1 values ('')") ' <-----------------※
' CSVファイルへエクスポート( TABLE1.csv と同時に schema.ini も作成される)
Call db.Execute("select * into [Text;database=" & csvdir & "].[" & csvname & "] from [TABLE1]", dbFailOnError + dbConsistent)
' MDB内のデータを削除
Call db.Execute("delete from [TABLE1]", dbFailOnError + dbConsistent)
' CSVファイルからインポート
Call db.Execute("insert into [TABLE1] select * from [Text;database=" & csvdir & "].[" & csvname & "]", dbFailOnError + dbConsistent)
' オブジェクト解放
db.Close: Set db = Nothing
ws.Close: Set ws = Nothing
Set de = Nothing
Stop
' 一時的に使用したファイルを削除
If Dir(mdbpath) <> "" Then Kill mdbpath
If Dir(csvdir & "\" & csvname) <> "" Then Kill csvdir & "\" & csvname
If Dir(csvdir & "\schema.ini") <> "" Then Kill csvdir & "\schema.ini"
End Sub
これを実行するとインポートする際、Null不可のフィールドに
Nullを入れようとしてエラーが発生します。
本当は Nullじゃなくて空の文字列のハズなのですが・・・
ちなみに※の一行がなければ、正常に処理が行われます。
CSVの "" を空の文字列として扱う方法はありますでしょうか?
よろしくお願いいたします。
環境: Windows 2000 + Visual Basic 6.0 + DAO 3.6