0
    If cell.Value <> "" Then

        uid = cell
        lname = Left(Replace(Range(cell.Address).Offset(0, 1), "'", ""), 50)
        fname = Replace(Range(cell.Address).Offset(0, 2), "'", "")
        stat = Replace(Range(cell.Address).Offset(0, 3), "'", "")
        role = Left(Replace(Range(cell.Address).Offset(0, 4), "'", ""), 50)
        iqn = Replace(Range(cell.Address).Offset(0, 5), "'", "")
        sdate = Format(Replace(Range(cell.Address).Offset(0, 6), "'", ""), "yyyy-mm-dd")
        bdate = Format(Replace(Range(cell.Address).Offset(0, 7), "'", ""), "yyyy-mm-dd")
        rodate = Format(Replace(Range(cell.Address).Offset(0, 8), "'", ""), "yyyy-mm-dd")
        End If
        hirereason = Replace(Range(cell.Address).Offset(0, 9), "'", "")
        roreason = Replace(Range(cell.Address).Offset(0, 10), "'", "")


        sql = "BEGIN TRAN IF EXISTS (SELECT * FROM " & TableName & " WITH (updlock, serializable)"
        sql = sql & " WHERE UID = '" & uid & "')"
        sql = sql & " BEGIN"
        sql = sql & " UPDATE" & TableName
        sql = sql & " SET LName='" & lname & "', FName='" & fname & "'"
        sql = sql & ", Status='" & stat & "', Role='" & role & "'"
        sql = sql & ", IQNRole='" & iqn & "', StartDate='" & sdate & "'"
        sql = sql & ", BillableDate='" & bdate & "', RollOffDate='" & rodate & "'"
        sql = sql & ", HireReason='" & hirereason & "', RollOffReason='" & roreason & "'"
        sql = sql & " WHERE UID = '" & uid & "'"
        sql = sql & " END"
        sql = sql & " ELSE BEGIN"
        sql = sql & " INSERT " & TableName & " (UID, LName, FName, Status, Role, IQNRole, StartDate"
        sql = sql & ", BillableDate, RollOffDate, HireReason, RollOffReason)"
        sql = sql & " VALUES('" & uid & "', '" & lname & "', '" & fname & "', '" & stat & "'"
        sql = sql & ", '" & role & "', '" & iqn & "', '" & sdate & "', '" & bdate & "', '" & rodate & "'"
        sql = sql & ", '" & hirereason & "', '" & roreason & "')"
        sql = sql & " END COMMIT TRAN"

        Cn.Execute (sql)

    End If

我有一些值,我正在将日期值格式化为迄今为止的字符串。如果我按原样运行它,它会将“”的默认值作为 1900-1-1 放入数据库中。我希望 NULL 值实际保留在数据库中并且不会被覆盖。此外,如果说以前不是但现在是,我希望他们用 NULL 更新一个单元格。

我尝试将我的值 rodate 包装在 IF 语句中,并尝试针对 NULL、NOTHING 和 EMPTY 验证它是否是这些带有“NULL”的 UPDATE DB 之一,但它没有这样做。日期仍然是 1900-1-1。有任何想法吗?

4

2 回答 2

0

我很困惑,不知道我是否答对了这个问题。

我从中唯一了解到的是,您正在努力将日期保存为 NULL 在数据库中。NULL 和空字符串是不一样的。
试试看这是否有效:

dim vNull as variant 

vNull = Null 

if sDate = "" then 
    //Save vNull instead of Date
end if

我不相信您可以在字符串数据类型中捕获 NULL。

编辑
也许我以前没有想到这一点很愚蠢,但是您不能将字符串“NULL”放在查询字符串中,而不是空字符串吗?

于 2013-10-16T16:03:46.167 回答
0
Dim roDate
'...
'...
rodate = Trim(cell.Offset(0, 8).Value)
If len(rodate)=0 Then
    rodate = null
else
    rodate = "'" & Format(rodate, "yyyy-mm-dd") & "'"
end if
'....
'....
'note no single quote here around rodate
sql = sql & ", BillableDate='" & bdate & "', RollOffDate=" & rodate
'...
'...
于 2013-10-16T16:17:23.680 回答