[リストへもどる]
一括表示

投稿時間:2003/07/24(Thu) 18:19
投稿者名:hiro
Eメール:
URL :
タイトル:
SQLServerのNUMERIC型について
はじめて投稿します。
VB6+SQL Server2000の環境であるテーブルの列をNUMERIC型で定義しました。
VBからADOでその列をの値を取得すると何故か前後にスペースが付加されているようです。
もちろん、値を取得後TRIMしたり何らかの変換をすれば問題はないのですが、前後のスペ
ース無しで値を取得することはできないのでしょうか?

投稿時間:2003/07/25(Fri) 12:41
投稿者名:とろ
Eメール:
URL :
タイトル:
Re: SQLServerのNUMERIC型について
スペースが入らずに取得できましたけど。

再現するコードを載せていただけますか。

投稿時間:2003/07/25(Fri) 18:48
投稿者名:hiro
Eメール:
URL :
タイトル:
Re^2: SQLServerのNUMERIC型について
とろさんありがとうございます。
早速ですがコードです。

一部投稿用に編集していますが参考にして下さい。
  Dim mRs1 AS ADODB.Recordset
  Dim sCode as long
    sCode  = 10

    'SQL定義
    wSQL = "SELECT コード, カナ, 名称,数量 FROM R_実績 "
    wSQL = wSQL & "WHERE  R_実績.コード = " & sCode
  
    'レコードセット作製
    Set G_Com.ActiveConnection = G_Con
    G_Com.CommandText = wSQL

    Set mRs1 = New ADODB.Recordset
    mRs1.Open G_Com, , adOpenForwardOnly, adLockReadOnly
    
    'マスタ未登録の時
    If mRs1.EOF = True Then
       wRet = Com_DisplayMsg(gMSG_P1050_001) エラー処理です
    mRs1.Close
       Set mRs1 = Nothing
        Exit sub
    End If
    
    'マスタに存在した時
    With mRs1
        P1050_Code = .Fields("コード")
        P1050_Kana = .Fields("カナ")  
        P1050_Name = .Fields("名称")
        P1050_SuRyou = .Fields("数量")  → ここの値がnumeric型
    End With

  mRs1.Close
    Set mRs1 = Nothing
    Exit sub


問題は .Fields("数量") の部分です。
イミディエイトで ?.Fields("数量") と入力すると何故か " 5 " といったように
前後にスペースがついてくるのです。
これを ?trim(.Fields("数量")) にすると"5"という結果になります。
フィールドの値を取得する方法として他の方法も試して見ましたが同じ結果でした。
後不思議なのが P1050_SuRyou をSTRING型で定義してあるのですが、
P1050_SuRyou = .Fields("数量")  の後、?P1050_SuRyou をイミディエイトで参照すると
"5"になっています。 

環境はWin2000sp2、VB6 SP5、ADO2.7、SQLSERVER2000 SP1です。又ADOは2.0でも同じ症状
を確認しました。


よろしくお願いします。

投稿時間:2003/07/28(Mon) 10:37
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: SQLServerのNUMERIC型について
イミディエイトウィンドウってのはそういうものです。
実際にその値を数値型の変数に入れても何も問題はありません。
てゆーか、その値は数値型に間違いありません。

投稿時間:2003/07/28(Mon) 21:10
投稿者名:hiro
Eメール:
URL :
タイトル:
Re^4: SQLServerのNUMERIC型について
確かに数値型に変わりは無いと思います。
でも、クリスタルレポートで以下のような結果になります。
作成中のクリレポはVBでレコードセットを作成後、定義ファイルを使ってクリスタルレポートの
レコードソースにしています。そこで、問題になっているNUMERIC型の列をクリレポで印刷すると
右側にスペースが入り列見出しに対し1桁分ずれているような感じになってしまいます。
つまり、ADOで取得した結果同様、スペースが付加されて印刷されるイメージです。
もちろん、クリレポ上の集計等、演算処理において問題はないので、設計時に右側に1桁ずらせば
良いのですが、スペースを外して取得できた方がわかりやすいと思ったのです。
ADOにおいてNUMERIC型を取得するのに前後のスペースはやむを得ないと言うことでしょうか?

投稿時間:2003/07/29(Tue) 10:34
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^5: SQLServerのNUMERIC型について
クリスタルレポートは使ったことが無いんですが、
Int型など他の数値型のフィールドはそのようにならないんでしょうか?

> つまり、ADOで取得した結果同様、スペースが付加されて印刷されるイメージです。
> もちろん、クリレポ上の集計等、演算処理において問題はないので、設計時に右側に1桁ずらせば
> 良いのですが、スペースを外して取得できた方がわかりやすいと思ったのです。
> ADOにおいてNUMERIC型を取得するのに前後のスペースはやむを得ないと言うことでしょうか?

ADOは別にNumeric型を取得するのに前後にスペースは入りません。
それはイミディエイトウィンドウの(というかPrintメソッドの)仕様です。
同じように、もしクリスタルレポート上で数値型の前後にスペースが入るならそれも仕様だと思います。
なんなら一度文字列型に変換してから出力されてみてはいかがでしょうか?