- - PR -
vbからShellで実行した場合、特定文字がエラーになる
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-08 19:58
現在SQLserver2005+VB6.0で開発を行っています。
テーブルからデータをCSVとして出力する為の処理をバッチにし、 VBからShellでバッチを実行しています。 しかし、「コマンド ラインの処理中にエラーが発生しました。」 といった内容がログに出力されていました。 しかし、エクスプローラーからダブルクリックで実行した場合、 正常終了の内容がログに出力されていました。 バッチの中身は、 bcp "テーブル名" out "出力CSV名" -c -q -S "DB名" -U "ユーザー" -P "パス" -e "ログ名" 上記のようにBcpを使用しています。 どうやらテーブル名に含まれていた文字の為にエラーが発生している事が わかりました。 テーブル名は、半角英字と全角漢字で構成されています。 ※テーブル名から、特定文字を削除して実行したら正常終了したので。 ※DBがSqlserver2000だった時は発生していませんでしたが・・・ そこで質問があります。 VBからShellでバッチを実行する場合、バッチの内部で全角漢字を使用してはいけない といった事はあるのでしょうか? それとも、Sqlserver2005の場合、テーブル名に全角漢字を使用してはいけない といった事があるのでしょうか? それとも他に要因があるのでしょうか? 小さいことでもいいので、何かお知りの方は教えてください。 お願いいたします。 | ||||||||
|
投稿日時: 2006-08-08 21:00
実行させた側の都合は、VB とは関係ありません。
"全角漢字" というよりは、使わない方が良い文字はありますね。 特定の文字とは、どの文字なのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-08-09 09:00
返信ありがとうございます。 現状発生した文字は、「従」です。 bcp "テーブル名" out "出力CSV名" -c -q -S "DB名" -U "ユーザー" -P "パス" -e "ログ名" 構文で、テーブル名から上記文字を使用しなかった場合は、正常に終了しました。 ※出力CSV名等には「従」を使用していても問題はありませんでした。 今の所は、「従」だけで発生していますが、 環境によって、他の文字でも発生するという事であれば、 テーブル名を半角英字にすべて直した方が得策でしょうか? | ||||||||
|
投稿日時: 2006-08-09 09:51
文字コードのタイプによっても化け方が変わったりしますね。
ShiftJisでhtml書くと「表」が化けたりしたことがありました。
サーバー云々で日本語を・・・と言う問題でなくて、このコマンドの実行時に化けるという問題なんだと思います。(たぶん) 出力 csv名にテーブル名と同じ文字列を使って化けません? 特定の文字で化けることがわかっているのなら、テーブル名なんてそんなに変更するものでもないし、そのテーブルだけ化けない文字を使うなりする程度で良いんじゃないかな〜・・・と思ってみたり。 | ||||||||
|
投稿日時: 2006-08-09 10:21
返信ありがとうございます。 出力Csv名にテーブル名と同じ文字列を使ってみましたが、化けないです。 エクスプローラーで確認する限りでは、「従」の文字です。
それは多少考えたのですが、「従」の文字だけで発生するのか、 それとも環境によっては、それ以外の文字でも発生するのかの判断がつきません。 ※そういった記述のある参考ページが見つかりませんし・・・・ この状況で、「従」の文字だけを使用しないとなると、根本の解決にならないので 困っています。 再度発生する事だけは、避けたいと思っています。 | ||||||||
|
投稿日時: 2006-08-09 14:27
前の投稿に書いてありましたね。見落としてました^^;
他にも発生する文字はあるでしょうね。 上位か下位のバイトが同じ文字のものとか・・・ ただ、特定の文字コードに対して、特定の文字のみ化けます。 これは不変であると思って良いですし、どの文字を使うと化けるのかは、従という文字で化けたことで、ほぼ想定できると思います。 ただし現に文字化けが生じているのですから、英字のみのテーブルに「できるのであれば」そうすべきだとボクは思います。 [ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-08-09 14:29 ] | ||||||||
|
投稿日時: 2006-08-09 16:41
PC-A
OS:XP Home Edition+SP2 DB:SQL Server 2005 PC-B OS:XP Home Edition+SP2 DB:SQL Server 2000 上記で、PC-Bから、PC-AのDBに接続し、 VBからShellで同じバッチを実行した所、正常終了しました。 という事は、DBの問題ではなくPCの環境に依存する・・・・という事でしょうか? であれば、テーブル名を変更しても意味は無いのでしょうか? | ||||||||
|
投稿日時: 2006-08-09 18:35
解決しました。
どうやら、bcp.exeのバージョンの違いで発生していました。 Sql server 2005をインストールした際にインストールされたBcp.exeを使用した場合、 「従」の文字が不正になりますが、 Sql server 2000をインストールした際にインストールされたBcp.exeを使用すると 「従」の文字も正常に終了します。 2000のBcp.exeを使用するようにします。 お騒がせして申し訳ありませんでした。 返信を下さった方々ありがとうございました。 |
1