- ベストアンサー
作成したレコードセットのCSV出力の方法
- 作成したレコードセットをCSVファイルにエクスポートする方法を教えてください。
- test.csvとtest2.csvから作成したレコードセットをtest3.csvに出力したいが、エラーが発生しています。
- 指定した式は、いずれかの引数とデータ型が対応していませんというエラーメッセージが表示されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です 解決されたという解釈で良かったのでしょうか。 (記述を見直しました)(前のものでも一応動くとは思います) ただ、気がかりなのがCドライブ直下と言う事で・・・・ (私はそこには作らないというだけの話ですが) 「test1.csv」「test2.csv」のありかを、「D:\HOGE」と仮定します。 作成する「test3.csv」の場所を「E:\hogehoge」と仮定します。 「E:\hogehoge\test3.csv」が存在したらエラーとなります。 「D:\HOGE」を★★に、「E:\hogehoge」を☆☆で置換えて記述したとすると (#2の記述をチョッと変更しています。 変な改行表示されるので、一度メモ帳等にコピー&ペーストして確認ください) Dim CN As ADODB.Connection Dim sSql As String Set CN = New ADODB.Connection CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=★★;" & _ "Extended Properties='Text;HDR=YES'" sSql = "SELECT * INTO [test3.csv] IN '☆☆'[Text;FMT=Delimited;HDR=YES;IMEX=0;]" _ & " FROM [test.csv] AS a LEFT JOIN [test2.csv] AS b ON a.tel = b.tel;" CN.Execute sSql Set CN = Nothing ※ この辺については、Web上のブログで見たような気が気ます。 (SQLで CSV出力指定記述とか・・・) ※ [test3.csv] の後の IN句の記述について、いろいろ確認を取られたらと思います。
その他の回答 (2)
- 30246kiku
- ベストアンサー率73% (370/504)
以下でどうなりますか。 「test3.csv」が存在していたらエラーになったと思います。 Dim CN As ADODB.Connection Dim sSql As String Set CN = New ADODB.Connection CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\;" & _ "Extended Properties='Text;HDR=YES'" sSql = "SELECT * INTO [test3.csv] IN '' 'Text;FMT=Delimited;HDR=YES;IMEX=0;DATABASE=C:\'" _ & " FROM [test.csv] AS a LEFT JOIN [test2.csv] AS b ON a.tel = b.tel;" CN.Execute sSql Set CN = Nothing
お礼
頂いたコードで試しました、 >「test3.csv」が存在していたらエラーになったと思います。 test3.csvをC:\に配置してコマンドを実行すると以下エラーになります。 テーブル'test3#csv'は既に存在しています 次にtest3.csv無で実行すると下記エラーが表示されました オブジェクト'test3.csv'が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください どうすればこの状況を乗り越える事が出来るのかもう少しだけお付き合い頂ければ大変助かります。
補足
30246kiku様 CSVファイルの置き場所を変えて実行したところ 頂いたコードでtest3.csvの出力が出来ました。 こちらのパソコンの環境(ファイルアクセス権)によるエラーと考えられます。
- m3_maki
- ベストアンサー率64% (296/460)
TransferText マクロ アクション http://office.microsoft.com/ja-jp/access-help/HA001226310.aspx 「テーブル名」引数の説明より --------------------------- テキスト データのインポート先、エクスポート元、またはリンク先の Access のテーブルの名前を指定します。また、エクスポート元として Access のクエリ (クエリ: テーブル内に格納されているデータについての問い合わせ、またはデータに対して処理を実行するための要求。クエリを使って複数のテーブルからデータを取り出して、そのデータをフォームまたはレポートのデータのソースとして使用できます。)名も入力できます。この引数は省略できません。 ・・・・・・・ "TransferText/テキスト変換" アクションを使用している場合、エクスポートするデータは SQL ステートメント (SQL 文字列/ステートメント: SELECT、UPDATE、または DELETE などの SQL コマンドを定義し、WHERE および ORDER BY などの句を含む式。通常、SQL 文字列/ステートメントはクエリおよび集計関数で使用されます。)では指定できません。SQL ステートメントを使用する代わりに、クエリを作成して、そのクエリの名前をこの引数に指定します。 --------------------------- クエリが作れない状況なら レコードセットを読みながら、テキストファイルに書き出す、 とか Excel に CopyFromRecordset で貼り付け、CSVで保存する、 など。
お礼
早速のアドバイス有難うございます。 >クエリを作成して、そのクエリの名前をこの引数に指定します。 に従い Set RS = CN.Execute("SELECT * FROM test.csv a LEFT JOIN test2.csv b ON a.tel = b.tel") 上記表記の後に下記追加しました Set Qdf = CurrentDb.CreateQueryDef("test_q", RS) 今度は 実行時エラー 3421 データ型の変換エラーが発生しました とエラーが出てしまいます、こちらも色々調べたのですが解決できません 出来ましたらアドバイス頂きたく存じます
お礼
30246kiku様 >解決されたという解釈で良かったのでしょうか。 前回頂いたコードで、CSVの置き場所を変更することで当初の目的は果たしました、 今回頂いたコードを参考に知識を深めたいと思います。 今回はご丁寧な対応を頂き大変助かりました。 有難うございました。