- ベストアンサー
フォーマット
VB6.0 ACCESS2000で開発しています。 Aテーブルの中に商品名と数量というフォルダーがあります。 それをMSHFlexGridへ表示しているのですが 数量が2の場合は2と表示されるのですが 数量が例えば2.1の場合2.099999という表示になってしまいます。 データ型は単精度浮動小数点型にしています。 どこが悪いのでしょうか? よろしくお願いします。
- みんなの回答 (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 とで型宣言は一致していますよね。
お礼
ご指摘の通り Access と VB とで型宣言が一致していませんでした。 ありがとうございます。 解決しました。