• ベストアンサー

フォーマット

VB6.0 ACCESS2000で開発しています。 Aテーブルの中に商品名と数量というフォルダーがあります。 それをMSHFlexGridへ表示しているのですが 数量が2の場合は2と表示されるのですが 数量が例えば2.1の場合2.099999という表示になってしまいます。 データ型は単精度浮動小数点型にしています。 どこが悪いのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

多分、Access に格納されている値が 2.1 ではないと推察します。 いわゆる小数点演算誤差が発生していて、それが表示設定等で見かけ上2.1になっているだけ。 <Test> ID____商品名____数量 1_____A____________1.0 2_____B____________2.1 これをMSHFlexGridへ表示しても、やはり、ちゃんと表示されます。 [イミディエイト] ? DBLookup("数量","Test", "ID=1") 1 ? DBLookup("数量","Test", "ID=2") 2.1 このように、DBLookup関数で参照してみると確認するのも手です。 Option Explicit Const conCNNSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\db1.mdb" Public Function DBLookup(ByVal strField As String, _              ByVal strTable As String, _              Optional ByVal strWhere As String = "", _              Optional ByVal ReturnValue = Null) As Variant On Error GoTo Err_DBLookup    Dim DataValue    Dim strQuerySQL As String    Dim rst     As ADODB.Recordset    Set rst = New ADODB.Recordset    strQuerySQL = "SELECT " & strField & " FROM " & strTable    If Len(strWhere) > 0 Then      strQuerySQL = strQuerySQL & " WHERE " & strWhere    End If    With rst      .Open strQuerySQL, _         conCNNSTRING, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        DataValue = .Fields(0)      End If    End With Exit_DBLookup: On Error Resume Next    rst.Close    Set rst = Nothing    DBLookup = IIf(Len(DataValue & "") = 0, ReturnValue, DataValue)    Exit Function Err_DBLookup:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"    Resume Exit_DBLookup End Function (注意)ADO の参照設定が必要かも知れません。 もちろん、次のような操作をしていれば別です。 Private Sub Command1_Click()   Dim Q As Double      Q = DBLookup("数量", "Test", "ID=2")   Debug.Print Q End Sub [イミディエイト] 2.09999990463257 Private Sub Command1_Click()   Dim Q As Single      Q = DBLookup("数量", "Test", "ID=2")   Debug.Print Q End Sub [イミディエイト] 2.1 型の不一致でも、誤差が発生します。 もちろん、Access と VB とで型宣言は一致していますよね。

tombo20
質問者

お礼

ご指摘の通り Access と VB とで型宣言が一致していませんでした。 ありがとうございます。 解決しました。