[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間: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

投稿時間:2007/01/10(Wed) 13:16
投稿者名:
Eメール:
URL :
タイトル:
Re: "" (空の文字列)を NULL ではなく空の文字列として扱う方法
試しにMDB上で
"create table TABLE1 ( FIELD1 text(10) not null)"
を走らせてみたところ、FIELD1のプロパティは

 値要求:はい
 空文字列の許可:いいえ

となりました。
エラーが発生するのはこれのせいではないでしょうか?

投稿時間:2007/01/10(Wed) 14:16
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^2: "" (空の文字列)を NULL ではなく空の文字列として扱う方法
>  値要求:はい
>  空文字列の許可:いいえ
> となりました。

だからこそ、
>> db.TableDefs("TABLE1").Fields("FIELD1").AllowZeroLength = True
が表記されているのでは。>琴さん

ちなみに空文字列が既定で許可されるか否かは、実行環境にも依存するのでご注意あれ。
http://support.microsoft.com/default.aspx?scid=kb;ja;217156

投稿時間:2007/01/10(Wed) 14:30
投稿者名:
Eメール:
URL :
タイトル:
Re^3: "" (空の文字列)を NULL ではなく空の文字列として扱う方法
早とちりしてしまいました…失礼しましたorz