#sql #excel #vba #sharepoint
#sql #преуспеть #vba #sharepoint
Вопрос:
Я могу добавить новые данные в пустой список, но когда список заполнен. У меня возникает проблема, когда в списке есть элемент. У меня есть следующее сообщение об ошибке, которое отображает: «дескриптор строки ссылается на удаленную строку или строку, помеченную для удаления».
Вот код:
Option Explicit
Sub AddNew_SP()
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String
Dim intRowActive As Integer
Dim intcolumnActive As Integer
Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset
intRowActive = ActiveCell.Row
intcolumnActive = ActiveCell.Column
mySQL = "SELECT * FROM [test Prestations actif] WHERE [Test] = '" Sheets("Plannification").Cells(intRowActive, 2).Value "'And [Date] = #" Format(Sheets("Plannification").Cells(6, intcolumnActive).Value, "dd/MM/yyyy") "#;"
With cnt
.ConnectionString = _
"Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE= url;LIST={47D821D1-325A-44CC-A22A-E838B6C6B8E1};"
.Open
End With
rst.Open mySQL, cnt, adOpenDynamic, adLockOptimistic
rst.AddNew
rst.Fields(1) = "Nom1"
rst.Fields(2) = "PréNom1"
rst.Fields(3) = "addresse"
rst.Update
If CBool(rst.State And adStateOpen) = True Then rst.Close
Set rst = Nothing
If CBool(cnt.State And adStateOpen) = True Then cnt.Close
Set cnt = Nothing
End Sub
Не могли бы вы мне помочь?
Ответ №1:
Попробуйте использовать инструкцию INSERT
Sub AddNew_SP()
Const mySQL = "INSERT INTO [test1] VALUES (?,?,?)"
Dim cnt As new adodb.Connection
With cnt
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;" amp; _
"DATABASE= URL;LIST={47D821D1-325A-44CC-A22A-E838B6C6B8E1};"
.Open
End With
Dim cmd As adodb.Command
Set cmd = New adodb.Command
With cmd
.ActiveConnection = cnt
.CommandText = mySQL
.CommandType = 1 'adCmdText
.Parameters.Append .CreateParameter("P1", adVarChar, 1, 10) ' varchar(10)
.Parameters.Append .CreateParameter("P2", adVarChar, 1, 10) ' 1 = adParamInput
.Parameters.Append .CreateParameter("P3", adVarChar, 1, 10) '
End With
' new record
Dim n As Integer, ar
ar = Array("Nom1", "PréNom1", "address")
cmd.Execute n, ar
MsgBox n amp; " record(s) inserted", vbInformation, "Done"
If CBool(cnt.State And adStateOpen) = True Then cnt.Close
Set cnt = Nothing
End Sub