CSVから開かれたテーブルにフィールド追加するには?

解決


つぐみ  2004-12-08 00:13:57  No: 87200

質問させていただきます。

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  ←ここでエラー


魔界の仮面弁士  2004-12-08 01:48:15  No: 87201

>     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ファイルとして再構築するなどの手法で回避してください。


つぐみ  2004-12-08 18:39:15  No: 87202

ご指摘ありがとうございます。やはりだめですか・・・。
100万件のデータを処理する必要があるので、
パフォーマンスを考えると、いったんMDBやDBFに変換して
から処理を行って、またCSVに変換して出力したほうが
いいかもしれないと考えています。
(もしこの考えに誤りがありましたら、再度ご指摘くだされば
と思います。)


つぐみ  2004-12-09 03:37:30  No: 87203

結局、CSV ⇒ MDBでフィールド追加 ⇒ CSVで回避しました。
魔界の仮面弁士さん、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加