@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

vbからShellで実行した場合、特定文字がエラーになる

1
投稿者投稿内容
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 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の場合、テーブル名に全角漢字を使用してはいけない
といった事があるのでしょうか?

それとも他に要因があるのでしょうか?

小さいことでもいいので、何かお知りの方は教えてください。
お願いいたします。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-08 21:00
引用:

ケイさんの書き込み (2006-08-08 19:58) より:

VBからShellでバッチを実行する場合、バッチの内部で全角漢字を使用してはいけない
といった事はあるのでしょうか?


実行させた側の都合は、VB とは関係ありません。

引用:

それとも、Sqlserver2005の場合、テーブル名に全角漢字を使用してはいけないといった事があるのでしょうか?


"全角漢字" というよりは、使わない方が良い文字はありますね。
特定の文字とは、どの文字なのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2006-08-09 09:00
引用:

じゃんぬねっとさんの書き込み (2006-08-08 21:00) より:

"全角漢字" というよりは、使わない方が良い文字はありますね。
特定の文字とは、どの文字なのでしょうか?



返信ありがとうございます。

現状発生した文字は、「従」です。

bcp "テーブル名" out "出力CSV名" -c -q -S "DB名" -U "ユーザー" -P "パス" -e "ログ名"

構文で、テーブル名から上記文字を使用しなかった場合は、正常に終了しました。
※出力CSV名等には「従」を使用していても問題はありませんでした。

今の所は、「従」だけで発生していますが、
環境によって、他の文字でも発生するという事であれば、

テーブル名を半角英字にすべて直した方が得策でしょうか?
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-09 09:51
文字コードのタイプによっても化け方が変わったりしますね。
ShiftJisでhtml書くと「表」が化けたりしたことがありました。

コード:
bcp "テーブル名" out "出力CSV名" -c -q -S "DB名" -U "ユーザー" -P "パス" -e "ログ名



サーバー云々で日本語を・・・と言う問題でなくて、このコマンドの実行時に化けるという問題なんだと思います。(たぶん)
出力 csv名にテーブル名と同じ文字列を使って化けません?

特定の文字で化けることがわかっているのなら、テーブル名なんてそんなに変更するものでもないし、そのテーブルだけ化けない文字を使うなりする程度で良いんじゃないかな〜・・・と思ってみたり。
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2006-08-09 10:21
引用:

R・田中一郎さんの書き込み (2006-08-09 09:51) より:

サーバー云々で日本語を・・・と言う問題でなくて、このコマンドの実行時に化けるという問題なんだと思います。(たぶん)
出力 csv名にテーブル名と同じ文字列を使って化けません?



返信ありがとうございます。

出力Csv名にテーブル名と同じ文字列を使ってみましたが、化けないです。
エクスプローラーで確認する限りでは、「従」の文字です。

引用:

特定の文字で化けることがわかっているのなら、テーブル名なんてそんなに変更するものでもないし、そのテーブルだけ化けない文字を使うなりする程度で良いんじゃないかな〜・・・と思ってみたり。



それは多少考えたのですが、「従」の文字だけで発生するのか、
それとも環境によっては、それ以外の文字でも発生するのかの判断がつきません。
※そういった記述のある参考ページが見つかりませんし・・・・

この状況で、「従」の文字だけを使用しないとなると、根本の解決にならないので
困っています。

再度発生する事だけは、避けたいと思っています。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-08-09 14:27
引用:

ケイさんの書き込み (2006-08-09 10:21) より:

返信ありがとうございます。

出力Csv名にテーブル名と同じ文字列を使ってみましたが、化けないです。


前の投稿に書いてありましたね。見落としてました^^;

引用:

ケイさんの書き込み (2006-08-09 10:21) より:

それは多少考えたのですが、「従」の文字だけで発生するのか、


他にも発生する文字はあるでしょうね。
上位か下位のバイトが同じ文字のものとか・・・
ただ、特定の文字コードに対して、特定の文字のみ化けます。
これは不変であると思って良いですし、どの文字を使うと化けるのかは、従という文字で化けたことで、ほぼ想定できると思います。

ただし現に文字化けが生じているのですから、英字のみのテーブルに「できるのであれば」そうすべきだとボクは思います。

[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-08-09 14:29 ]
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 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の環境に依存する・・・・という事でしょうか?

であれば、テーブル名を変更しても意味は無いのでしょうか?

ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2006-08-09 18:35
解決しました。

どうやら、bcp.exeのバージョンの違いで発生していました。

Sql server 2005をインストールした際にインストールされたBcp.exeを使用した場合、
「従」の文字が不正になりますが、

Sql server 2000をインストールした際にインストールされたBcp.exeを使用すると
「従」の文字も正常に終了します。

2000のBcp.exeを使用するようにします。

お騒がせして申し訳ありませんでした。
返信を下さった方々ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)