为啥 ADODB 在更新时插入 NULL 值?

Posted

技术标签:

【中文标题】为啥 ADODB 在更新时插入 NULL 值?【英文标题】:why is ADODB inserting NULL values on update?为什么 ADODB 在更新时插入 NULL 值? 【发布时间】:2010-05-12 21:38:08 【问题描述】:

我有:

With rs
    .AddNew ' create a new record
    ' add values to each field in the record
    .Fields("datapath") = dpath
    .Fields("analysistime") = "atime"
    .Fields("reporttime") = "rtime"
    .Fields("lastcalib") = "lcalib"
    .Fields("analystname") = "aname"
    .Fields("reportname") = "rname"
    .Fields("batchstate") = "bstate"
    .Fields("instrument") = "NA"
    .Update ' stores the new record
End With

当我检查数据库时,看起来它只插入了最后一个字段!

有人遇到过这个问题吗?

【问题讨论】:

这是真实数据吗?肯定 reporttime 是一个日期时间字段并且不会接受“rtime”文本?这只是一个例子,其他领域也有类似的问题。 remou,好问题,不,我确定它的所有文本,它肯定会接受它 恐怕我已经使用 Excel 和 mysql 使用测试表对此进行了测试,并且所有字段都按预期更新。试试这个表进行测试:create table binfo (datapath text,analysistime text,reporttime text,lastcalib text,analystname text, reportname text, batchstate text, instrument text); remou,还有一个字段叫做 rowid 主键 int(11) - 你认为这可能是问题吗? 顺便说一句,你建议我做的很好! 【参考方案1】:

编辑:下面的代码有效,但可以在这里找到正确的解决方案:Connecting Excel to Mysql Update PROBLEM

涉及到使用文本数据类型的难点。


这似乎有效,但不要问我为什么:

dpath = "a" ''Trim(Range("B2").Text)
atime = "a" ''Trim(Range("B3").Text)
rtime = "a" ''Trim(Range("B4").Text)
lcalib = "a" ''Trim(Range("B5").Text)
aname = "a" ''Trim(Range("B6").Text)
rname = "a" ''Trim(Range("B7").Text)
bstate = "a" ''Trim(Range("B8").Text)

cn.Open strCon
cmd.ActiveConnection = cn
cmd.CommandText = _
    "INSERT INTO `batchinfo` (`datapath`, `analysistime`," _
       & "`reporttime`,`lastcalib`,`analystname`,`reportname`," _
       & "`batchstate`,`instrument`) " _
       & "VALUES (?,?,?,?,?,?,?,?);"

cmd.Parameters.Append _
    cmd.CreateParameter("datapath", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("analysistime", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("reporttime", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("lastcalib", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("analystname", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("reportname", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("batchstate", adChar, adParamInput, 100)
cmd.Parameters.Append _
     cmd.CreateParameter("instrument", adChar, adParamInput, 100)

cmd.Parameters("datapath").Value = "abc"
cmd.Parameters("analysistime").Value = atime
cmd.Parameters("reporttime").Value = rtime
cmd.Parameters("lastcalib").Value = lcalib
cmd.Parameters("analystname").Value = aname
cmd.Parameters("reportname").Value = rname
cmd.Parameters("batchstate").Value = "bstate"
cmd.Parameters("instrument").Value = "NA"

cmd.Execute

【讨论】:

以上是关于为啥 ADODB 在更新时插入 NULL 值?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql5.1中,datetime类型的字段为啥插入不了NULL值

如何从此 ADODB.Recordset 中获取插入 ID?

4数据更新

在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效

将数据插入表时出现 ADODB VBA 自动化错误

为啥 Spring 在配置时并不总是使用批量插入/更新?