いつもお世話になっております。
環境:Windows2000 VB6.0SP5
SQL Serverに
外部データ(カンマ区切りのテキストファイル)から
一時テーブルを作成する方法を考えているのですが、
どなたかヒントをいただけないでしょうか。
以下のようなSQL文を作ってみたのですが、
「'IN'付近に正しくない構文があります。」というエラーが出てしまいます。
strSQL = "SELECT [Sample#txt].F1, [Sample#txt].F2 INTO T_Sample " _
& "FROM [Sample#txt] IN 'C:\Work\Data'[Text;HDR=NO;];"
接続に利用してるオブジェクトは何でしょうか?それによってサポートされて
無い機能がありますので、質問には必須事項です。
データベースはデータベースサーバー上ですか?VBのアプリ実行場所は?
CSVファイルの場所は?このSQL文は何が実行するのでしょうか?
DAO 接続上で発行しないと難しいようです。
[csvファイルをsqlserverのテーブルにinsert]
http://www7.big.or.jp/~pinball/discus/sqls/27738.html
エラーとは関係ないですが、テーブル名が[Sample#txt]では一時テーブルには
ならない気がしますが?
>エラーとは関係ないですが、テーブル名が[Sample#txt]では一時テーブルには
>ならない気がしますが?
あ、間違い!。挿入先 T_Sample だった。でもやっぱり一時テーブルではない…。
説明不足で申し訳ありません。
接続に使用しているオブジェクトはADOです。
一時テーブルを作成したいDBはサーバ上です。
VBアプリの実行場所はクライアント側です。
行いたいのは、
「テキストファイルのフィールド(F1,F2)のデータを一時テーブルに保存し、
そこからレコードセット等を作成する」
という処理です。
>でもやっぱり一時テーブルではない…。
失礼いたしました。テーブル名の前に#が必要なのですよね?
以下のように処理を行っているのですが...。
Set Cn = New ADODB.Connection
Set Qy = New ADODB.Command
Cn.Open sDSN, "sa", ""
Qy.ActiveConnection = Cn
sSQL = "SELECT [Sample#txt].F1, [Sample#txt].F2 INTO #T_Sample " _
& "FROM [Sample#txt] IN 'C:\Work\Data'[Text;HDR=NO;];"
Qy.CommandText = strSQL
Set rst1 = Qy.Execute
>説明不足で申し訳ありません。
そのヘンは分かってるなら問題ないです。
>VBアプリの実行場所はクライアント側です。
CSVファイルの場所もクライアントと思っていいですか?
…で、リンク先の内容には目を通して頂けました???
SQL Server 上でのSQL発行のみでやるのと
MDBファイルを使ってやるので大きく方法が
変わると思われます。
先のリンクの下のツリー階層にコメントありましたよね?
特にボクからのコメントは無いんですが?(^^;)
http://www7.big.or.jp/~pinball/discus/sqls/27755.html
>Cn.Open sDSN, "sa", ""
のDSNがどこに接続しているのか不明ですが、"sa"でパスワード無しなら
SQLServerのような気がします。(セキュリティの観点からパスワードは推奨^^;)
>sSQL = "SELECT [Sample#txt].F1, [Sample#txt].F2 INTO #T_Sample " _
> & "FROM [Sample#txt] IN 'C:\Work\Data'[Text;HDR=NO;];"
この文法自体がJetのものなので、
http://www7.big.or.jp/~pinball/discus/sqls/27755.html
にあるようにAccess上からか、もしくはダミー(空)でもいいので、
MDBに接続して発行する必要があるでしょう。
もしくは、ぷく殿のケースの場合は、こちらのほうがむしろいいような気もします。
http://blogs.sqlpassj.org/mitsugi/archive/2004/07/07/3215.aspx
追記。
http://blogs.sqlpassj.org/mitsugi/archive/2004/07/07/3215.aspx
の場合は、サーバ側からクライアント側のCSVファイルが見えていることが前提になります。
普通は、私なら、BCP や BULK INSERT かな。
>http://blogs.sqlpassj.org/mitsugi/archive/2004/07/07/3215.aspx
今日行ったら過去の記事のテキストデータが見れん…昨日は見れたのに…。
>普通は、私なら、BCP や BULK INSERT かな。
うん(^^;)。板違いだし、最初の質問のSQLから回答の方向を
決めたんだけど、一度、データベース系のサイトでどんな方法があるか
調べておくべきですよね。
あと、ベタな方法で、CSVから読んだデータを1行ずつ
SQL文を編集して挿入していっても…数千行くらいまでなら
問題ないと思う…それなりに時間が掛かるけどw。VBの
初心者掲示板の回答としては、まずコレかなぁ…と思ってたり。
特攻隊長まるるう様、もげ様、ありがとうございます。
>…で、リンク先の内容には目を通して頂けました???
見過ごしておりました。申し訳ありません。すぐに拝見致しました。
>私なら、BCP や BULK INSERT かな。
このような方法があるんですね。勉強になりました。
テキストファイルが数百行しかないので、最初はべたな方法も考えたのですが、重複レコードのチェックや並替え等の処理もしたかったので、
テーブルに入れれないかなと思案しまして...。
お二方のアドバイスをもとに色々試しておりまして、
時間がかかりそうですので、
とりあえず、御礼とともに解決とさせていただきます。
ありがとうございました。
ツイート | ![]() |