如何使用" INSERT INTO"从Access VBA到Sharepoint的命令

时间:2014-08-26 21:35:30

标签: vba ms-access sharepoint access-vba ms-access-2010

我正在使用与Sharepoint Server链接的MS Access数据库。 MS Access Forms作为FrontEnd和Sharepoint列为BackEnd。

今天我可以使用访问表单查看列表中的所有信息,没有问题。

我需要什么:

我正在尝试使用SQL命令在列表中插入新的寄存器:“INSERT INTO ...”

如果有另一种可能性在列表中插入记录,可能会有用

发生了什么事?

当我调用DoCmd.RunSQL(txtsql)时,我收到运行时错误3999,说我已从服务器断开连接。

我的代码现在:

我尝试使用记录集,但没有成功。 我需要多次运行这个SQL,在循环中更改字符串“txtSql”。像这样:

Dim MaxSonda As Integer

'Get the max ID from the list
MaxSonda = Nz(DMax("IdSonda", "Sondas", "((Sondas.[Tipo Sonda])<>1 Or (Sondas.[Tipo Sonda]) Is Null)"), 0)
MsgBox "MaxSonda = " & MaxSonda

'Run the code for each "sonda"
Do While MaxSonda > 1
    If Nz(DLookup("[Tipo Sonda]", "Sondas", "Sondas!IdSonda = " & MaxSonda), 1) <> 1 Then
        DoCmd.OpenTable "Resumo", acViewNormal, acAdd
        DoCmd.GoToRecord acDataTable, "Resumo", acNewRec

        txtSql = "INSERT INTO Resumo ( Data, Sonda, Status ) SELECT #" & LastData + 1 & "#, " & MaxSonda & ", 0;"
        MsgBox txtSql
        DoCmd.RunSQL txtSql

        DoCmd.Close acTable, "Resumo", acSaveYes
    End If
    MaxSonda = MaxSonda - 1
Loop

P.S。:MsgBox仅用于检查步骤

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您无需打开列表/表格即可插入记录。我不知道为什么你使用循环来插入行,但如果你打算在循环中尝试这个SQL_COMMAND:

If Nz(DLookup("[Tipo Sonda]", "Sondas", "[IdSonda] = " & MaxSonda), 1) <> 1 Then
        txtSql = "INSERT INTO Resumo ( Data, Sonda, Status ) VALUES ('" & LastData + 1 & "'," & MaxSonda & ",0);"
        MsgBox txtSql
        DoCmd.RunSQL txtSql
End If

另请注意#tags用于在Access中插入日期,如果您打算保存日期,请将其保存为国际格式,如

vba.Format$([date_field],"yyyy-mm-dd hh:mm:ss")

这样你就可以在不使用#tags的情况下保存为字符串。

答案 1 :(得分:0)

也许这可以帮助某人。我确实有同样的问题,我解决了从访问中删除sharepoint列表并再次添加它。花几秒钟做一个SQL查询,但它确实有效。

迎接