【问题标题】:Convert varchar to double fails when I use ADO yet it works in MS Access当我使用 ADO 时将 varchar 转换为 double 失败,但它在 MS Access 中工作
【发布时间】:2013-09-05 17:29:53
【问题描述】:

我在我的程序的第一个版本中成功运行了一个查询,使用 ADO 和 C++ 查询 MS Access 2007 数据库。

但是,我的数据库的结构必须修改。

曾经是 double 类型的字段现在是 varchar。

当我在修改后的数据库上执行相同的查询时,它应该报告数据类型不匹配。

编辑查询以帮助发布第一个解决方案:

这是我的查询的简化版本:

wchar_t query = L" select ( ads(Field) + Field ) / 2 from MyTable where PrimaryKey = 1;";

字段是 double 类型,但现在是 varchar。

我尝试过像这样使用CDbl

wchar_t query = L" select ( abs( CDbl(Field) ) + CDbl(Field) ) / 2 from MyTable where PrimaryKey = 1;";

当我在 MS Access 中创建查询时它可以工作,但在我的程序中我仍然报告数据类型不匹配错误。

我试图在互联网上找到替代方案,并认为 CAST 或 CONVERT 可以解决这个问题,但似乎它们在 MS Access 中不起作用。

有什么解决办法吗?

谢谢。

问候。

【问题讨论】:

    标签: c++ sql ms-access ado


    【解决方案1】:

    您是否尝试将值转换为 Double 不是在查询中而是在查询运行之后?

    CAST 和 CONVERT 不是 Access SQL 函数

    我不使用 c++,但即使在 Access 中使用 ADO 对象的小子例程我也无法重现错误...

    Sub test()
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    Dim db As ADODB.Connection
    
    Set db = CurrentProject.Connection
    
    rs.Open "SELECT (Abs(CDbl(Field))+CDbl(Field))/2 AS A FROM MyTable;", db
    
    While rs.EOF = False
    Debug.Print rs!A
    
    
    rs.MoveNext
    Wend
    
    End Sub
    

    【讨论】:

    • 如果你建议一些代码显示如何,你可能会得到一些勾号,否则这看起来像一个问题,
    • @Wietze314,我已经更新了我的问题,因为我相信您的解决方案能够看到完整的查询是相关的。
    • 我不使用 c++,但即使在 Access 中使用 ADO 对象的小子例程我也无法重现错误... Sub test() Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim db As ADODB.Connection Set db = CurrentProject.Connection rs.Open "SELECT (Abs(CDbl(Field))+CDbl(Field))/2 AS A FROM MyTable;", db While rs.EOF = False Debug.Print rs !A * 1.01 rs.MoveNext Wend End Sub
    • 我明白了... 此查询是使用 OLE 自动化填充 Excel 的较大函数的一部分。也许存在类型不匹配。我会尽快检查并报告我的结果。谢谢你。问候。
    • @Wietze314,你说得对,一切正常!当用户按下第一个按钮时,查询被触发,但我按下了第二个按钮。该按钮的代码与第一个按钮的代码相似。我猜疲劳已经完成了它的工作......按下正确的按钮后,我发现自己一切正常。谢谢,如果没有您的测试,我将无法验证我的代码是否运行良好。这导致我再次尝试那个导致我的问题解决方案的查询。这就是为什么你有我的+1。太感谢了!问候。
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2023-03-27
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多