CSVからのインポートで、ピリオドが#に化ける

解決


元COBOLER  2009-03-27 04:03:41  No: 141747

私自身はVBのプログラミングは、あまりわかりません。会社のプログラマーが作ったVB6(英語版)のプログラムで、Microsoft text driver を使って、CSVデータをSQL Server 2005 にインポートするのですが、ある文字列のフィールドが、ピリオド「.」の時、「#」(実データに「」はありません。)に化けてしまうのです。その項目に2バイト系データが入ってくることはなく、環境はサーバーもクライアントも英語Windowsです。同じ現象を経験された方はいらっしゃいますか?  因みに、データを読み込んだ時点で、既に「#」に化けています。よろしくお願いいたします。


VBレスキュー(花ちゃん)  2009-03-28 20:35:01  No: 141748

下記アドレスの最下部の[フィールド名またはオブジェクト名の一部に、次の記号を使用することはできません。 ]の部分 をご覧下さい。
http://support.microsoft.com/default.aspx?scid=kb;ja;286335


元COBOLER  2009-03-30 20:46:58  No: 141749

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  なのです。

どれが、使用できない「予約語」にあたるのでしょうか?


VBレスキュー(花ちゃん)  2009-03-30 21:47:32  No: 141750

>どれが、使用できない「予約語」にあたるのでしょうか?

リンク先に下記のように書いていませんでしたか?

フィールド名またはオブジェクト名の一部に、次の記号を使用することはできません。 
   .    /    *    ;    :    !    #    &    -    ?    "    '    $ 

WJC100000G +0.5  の中に上記の記号が含まれていますよね。

. 以外の記号についてもどのようななるかご自分で試してみて下さい。


元COBOLER  2009-03-30 22:46:03  No: 141751

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


matsu  2009-03-31 02:39:19  No: 141752

>すみません。私がよくわからないのは、WJC100000G +0.5  の値は、CSVデータの2項目目の中身で、フィールド名やオブジェクト名ではないのではないかと思いますが、私の解釈が間違っているのでしょうか?

1行目に項目名を設定していないのではないでしょうか?


VBレスキュー(花ちゃん)  2009-03-31 04:06:18  No: 141753

>WJC100000G +0.5  の値は、CSVデータの2項目目の中身で

この、2項目目 とは、2列目の事ですか?  それとも2行目の事ですか?
表示させた時に文字化けしているデータは、表のどの部分に表示しているのですか?
. が # になっている事は、フィールド名 として扱われているかと思うのですが。

試しに、そのデータの行を3行目辺りに書き換えて試してみればどうなりますか?


もげ  2009-03-31 17:56:29  No: 141754

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


元COBOLER  2009-03-31 19:51:07  No: 141755

皆さん、レスありがとうございます。
私自身、VBは組まないので、細かい部分まではわかりませんが、VBレスキュー(花ちゃん)様がおっしゃる通り、行を追加したらこの現象は起きなくなりました。化ける対象は、1行目の3列目の項目でした。  もげ様のおっしゃるように、1行目はヘッダーとみなしているのかもしれません。皆さんのレスから状況が理解できましたので、1行目にヘッダーデータ追加することにします。
皆さん、どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加