プロが教えるわが家の防犯対策術!

test.csv とtest2.csvから作成したレコードセットをtest3.csvに出力したいのですが、
”指定した式は、いずれかの引数とデータ型が対応していません。”
とエラーが帰ってきます。

色々試したのですがうまくいきません、

作成したレコードセットをCSVファイルにエクスポートする方法を教えてください。

Private Sub コマンド6_Click()


Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset

Set CN = New ADODB.Connection

CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\;" & _
"Extended Properties='Text;HDR=YES'"

Set RS = CN.Execute("SELECT * FROM test.csv a LEFT JOIN test2.csv b ON a.tel = b.tel")

DoCmd.TransferText acExportDelim, , RS, "C:\test3.csv", True, ""



Set RS = Nothing
Set CN = Nothing


End Sub

A 回答 (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句の記述について、いろいろ確認を取られたらと思います。
    • good
    • 1
この回答へのお礼

30246kiku様


>解決されたという解釈で良かったのでしょうか。

前回頂いたコードで、CSVの置き場所を変更することで当初の目的は果たしました、
今回頂いたコードを参考に知識を深めたいと思います。

今回はご丁寧な対応を頂き大変助かりました。

有難うございました。

お礼日時:2011/11/28 18:50

以下でどうなりますか。



「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

この回答への補足

30246kiku様

CSVファイルの置き場所を変えて実行したところ
頂いたコードでtest3.csvの出力が出来ました。


こちらのパソコンの環境(ファイルアクセス権)によるエラーと考えられます。

補足日時:2011/11/27 20:50
    • good
    • 0
この回答へのお礼

頂いたコードで試しました、

>「test3.csv」が存在していたらエラーになったと思います。

test3.csvをC:\に配置してコマンドを実行すると以下エラーになります。

テーブル'test3#csv'は既に存在しています


次にtest3.csv無で実行すると下記エラーが表示されました


オブジェクト'test3.csv'が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください

どうすればこの状況を乗り越える事が出来るのかもう少しだけお付き合い頂ければ大変助かります。

お礼日時:2011/11/27 20:30

TransferText マクロ アクション


http://office.microsoft.com/ja-jp/access-help/HA …

「テーブル名」引数の説明より
---------------------------
テキスト データのインポート先、エクスポート元、またはリンク先の Access のテーブルの名前を指定します。また、エクスポート元として Access のクエリ (クエリ: テーブル内に格納されているデータについての問い合わせ、またはデータに対して処理を実行するための要求。クエリを使って複数のテーブルからデータを取り出して、そのデータをフォームまたはレポートのデータのソースとして使用できます。)名も入力できます。この引数は省略できません。
・・・・・・・
"TransferText/テキスト変換" アクションを使用している場合、エクスポートするデータは SQL ステートメント (SQL 文字列/ステートメント: SELECT、UPDATE、または DELETE などの SQL コマンドを定義し、WHERE および ORDER BY などの句を含む式。通常、SQL 文字列/ステートメントはクエリおよび集計関数で使用されます。)では指定できません。SQL ステートメントを使用する代わりに、クエリを作成して、そのクエリの名前をこの引数に指定します。
---------------------------
クエリが作れない状況なら
レコードセットを読みながら、テキストファイルに書き出す、
とか
Excel に CopyFromRecordset で貼り付け、CSVで保存する、
など。
    • good
    • 0
この回答へのお礼

早速のアドバイス有難うございます。

>クエリを作成して、そのクエリの名前をこの引数に指定します。

に従い


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

データ型の変換エラーが発生しました

とエラーが出てしまいます、こちらも色々調べたのですが解決できません

出来ましたらアドバイス頂きたく存じます

お礼日時:2011/11/27 15:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A