質問させていただきます。
CSVを以下のようにDBでオープンして、フィールドを追加
しようとしているのですが、
「実行時エラー:3282 この操作は、データを含んでいるテーブルには
実行できません」
というエラーが出てしまいます。
どこが間違っているのかご指摘いただけたらと思います。
よろしくお願いいたします。
Dim ws As Workspace
Dim db As Database
Dim rs As Recordset
Dim tbldef As TableDef
Dim fld As Field
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\ExportCSV\ADOTEST", False, False, _
"Text;DATABASE=C:\ExportCSV\ADOTEST;TABLE=NewAddress.csv")
Set tbldef = db.TableDefs("NewAddress#csv")
Set fld = New Field
Set fld = tbldef.CreateField("test", dbText, 50)
tbldef.Fields.Append fld ←ここでエラー
> Set fld = New Field
> Set fld = tbldef.CreateField("test", dbText, 50)
上記では、Newで生成した物を Set した後で、続けて
CreateField で生成した物を上書きで Set していますが、
これは、あまり意味が無いような気がします。
どちらか一方の書き方に統一された方が良ろしいかと。
> CSVを以下のようにDBでオープンして、フィールドを追加
> しようとしているのですが、
Textドライバ側がフィールドの事後追加をサポートしていないので、
残念ながら無理ですね。
たとえばこれが、
Set tbldef = db.CreateTableDef("SAMPLE#TXT")
のように、作成されたばかりで、まだdb.TableDefs.Appendされて
いない状態のTableDefに対してであれば、tbldef.Fields.Append を
行う事は可能ですけれども…。
Text IISAMは用いず、Print #ステートメント等を使って、自力で
CSVファイルを再生成するか、あるいは、SELECT INTO ステートメントを
使って、別のCSVファイルとして再構築するなどの手法で回避してください。
ご指摘ありがとうございます。やはりだめですか・・・。
100万件のデータを処理する必要があるので、
パフォーマンスを考えると、いったんMDBやDBFに変換して
から処理を行って、またCSVに変換して出力したほうが
いいかもしれないと考えています。
(もしこの考えに誤りがありましたら、再度ご指摘くだされば
と思います。)
結局、CSV ⇒ MDBでフィールド追加 ⇒ CSVで回避しました。
魔界の仮面弁士さん、ありがとうございました。
ツイート | ![]() |