【问题标题】:Update entry in database with excel cell value - Type mismatch使用 excel 单元格值更新数据库中的条目 - 类型不匹配
【发布时间】:2014-09-22 07:21:38
【问题描述】:

我正在尝试使用 Excel 单元格中的数字更新 SQL 数据库中的条目。

当我尝试发送的数字没有小数部分时,代码可以正常工作,但如果数字有小数部分,宏会返回类型不匹配错误。

DB字段的类型是:(float, null)。 excel中的单元格格式为“常规”。格式化为“数字”会得到相同的结果。

我已经尝试过 Range("C2").Value,但结果是一样的。 我应该如何从单元格中读取值以将其正确发送到数据库?

Sub Send2DB()

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String
    Dim strResult As String

    ' Connection string.
    sConnString = .......

    ' Connection and Recordset 
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    ' Open connection
    conn.Open sConnString

    ' Read Cell
    Set rs = conn.Execute("UPDATE dbo.TABLE_A SET m_value = '" + Range("C2").Text + "' FROM TABLE_B AS b INNER JOIN TABLE_C AS c ON c.tc_id=b.tb_id WHERE c.ref_value LIKE '" + ActiveSheet.Name + "%'")

【问题讨论】:

  • 您能否添加有关您正在使用的数据库的信息?还是SQL数据库就是SQL Server?
  • 是的,它是一个 SQL Server 数据库。兼容级别(来自 db info):SQL Server 2000 (80)

标签: sql sql-server excel vba


【解决方案1】:

这可能是由小数分隔符引起的。 SQL Server 需要 '.'作为十进制分隔符,因此请尝试将分隔符(例如“,”)替换为“。”

update = "UPDATE dbo.TABLE_A SET m_value = " & VBA.Strings.Replace(Range("C2").Value, ",", ".")

Set rs = conn.Execute(update)

此代码将在 SQL Server 上作为 SQL 执行:

UPDATE dbo.TABLE_A SET m_value = 8.8

【讨论】:

  • 至少在我的情况下,数据库正确接受数字小数分隔符','。用一个 '。'执行给出了一个错误......但一个不同的错误:“将数据类型 varchar 转换为浮点数时出错”
  • 你的建议奏效了!在单元格中使用点“.”来分隔小数部分,查询以这种方式选择数字,但使用“,”将其写入数据库。不知道为什么,但事实是这样数字在数据库中被正确写入。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
相关资源
最近更新 更多