私自身はVBのプログラミングは、あまりわかりません。会社のプログラマーが作ったVB6(英語版)のプログラムで、Microsoft text driver を使って、CSVデータをSQL Server 2005 にインポートするのですが、ある文字列のフィールドが、ピリオド「.」の時、「#」(実データに「」はありません。)に化けてしまうのです。その項目に2バイト系データが入ってくることはなく、環境はサーバーもクライアントも英語Windowsです。同じ現象を経験された方はいらっしゃいますか? 因みに、データを読み込んだ時点で、既に「#」に化けています。よろしくお願いいたします。
下記アドレスの最下部の[フィールド名またはオブジェクト名の一部に、次の記号を使用することはできません。 ]の部分 をご覧下さい。
http://support.microsoft.com/default.aspx?scid=kb;ja;286335
VBレスキュー(花ちゃん) 、ご回答ありがとうございます。ホームページは以前拝見したことがあります。
CSVを読み込む部分はこう書いてあります。
Public Function Fn_Read_CSV(ByVal sFolder As String, ByVal sFile As String) As ADODB.Recordset
On Error GoTo ErrorHandler
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim sconn As String
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockBatchOptimistic
sconn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & "DBQ=" & sFolder
rs.Open "SELECT * FROM " & sFile & "", sconn
Set Fn_Read_CSV = rs
ExitHandler:
次に、そのFunctionを使っている部分です。
Private Function Fn_LoadData() As Boolean
On Error GoTo Err
Dim mStr As String
Dim mRs As ADODB.Recordset
Dim mRs_1 As New ADODB.Recordset
Dim mExist As String
Dim mDataNo As Long
Dim mPrice As Double
Dim mAmount As Double
Dim mITEM_CLASSIFY As String
Dim mMATERIAL_PRICE As String
Dim mM_PRICE_UNIT As String
Dim i As Integer
Set mRs = Fn_Read_CSV(Trim(txtDirectory), Trim(txtFileName))
この下にStop を入れてプログラムを実行し、immediate window で
?mRs.Fields(1).Name と入力してEnter すると、次のように表示されます。
WJC100000G +0#5
CSVデータの該当フィールドの値は、 WJC100000G +0.5 なのです。
どれが、使用できない「予約語」にあたるのでしょうか?
>どれが、使用できない「予約語」にあたるのでしょうか?
リンク先に下記のように書いていませんでしたか?
フィールド名またはオブジェクト名の一部に、次の記号を使用することはできません。
. / * ; : ! # & - ? " ' $
WJC100000G +0.5 の中に上記の記号が含まれていますよね。
. 以外の記号についてもどのようななるかご自分で試してみて下さい。
VBレスキュー(花ちゃん)様、ご回答ありがとうございます。
すみません。私がよくわからないのは、WJC100000G +0.5 の値は、CSVデータの2項目目の中身で、フィールド名やオブジェクト名ではないのではないかと思いますが、私の解釈が間違っているのでしょうか?
実際のデータは下のの通りです。
"JP1E000082","WJC100000G +0.5","LWLFC 10 B (+0.5) CA/G",3753,4.81,18051.93,20090315,1,20090315
>すみません。私がよくわからないのは、WJC100000G +0.5 の値は、CSVデータの2項目目の中身で、フィールド名やオブジェクト名ではないのではないかと思いますが、私の解釈が間違っているのでしょうか?
1行目に項目名を設定していないのではないでしょうか?
>WJC100000G +0.5 の値は、CSVデータの2項目目の中身で
この、2項目目 とは、2列目の事ですか? それとも2行目の事ですか?
表示させた時に文字化けしているデータは、表のどの部分に表示しているのですか?
. が # になっている事は、フィールド名 として扱われているかと思うのですが。
試しに、そのデータの行を3行目辺りに書き換えて試してみればどうなりますか?
Extended Properties=text;HDR=No
が指定されていないので既定の動作で1行めをヘッダとみなしているとか。
>?mRs.Fields(1).Name
はフィールドの名前を表示していますね。
?mRs.Fields(1).Value
だとフィールドの値を表示するはずですが、
どのように表示されますか?
http://madia.world.coocan.jp/vb/vb_bbs2/200602/200602_06020052.html
皆さん、レスありがとうございます。
私自身、VBは組まないので、細かい部分まではわかりませんが、VBレスキュー(花ちゃん)様がおっしゃる通り、行を追加したらこの現象は起きなくなりました。化ける対象は、1行目の3列目の項目でした。 もげ様のおっしゃるように、1行目はヘッダーとみなしているのかもしれません。皆さんのレスから状況が理解できましたので、1行目にヘッダーデータ追加することにします。
皆さん、どうもありがとうございました。
ツイート | ![]() |