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

解決


つぐみ  2004-12-07 15:13:57  No: 87200  IP: [192.*.*.*]

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

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-07 16:48:15  No: 87201  IP: [192.*.*.*]

>     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 09:39:15  No: 87202  IP: [192.*.*.*]

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

編集 削除
つぐみ  2004-12-08 18:37:30  No: 87203  IP: [192.*.*.*]

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

編集 削除