ОК, поэтому у меня есть VBA, который я хочу использовать для обновления и добавления данных в таблицу на SQL-сервере. Я весь день путался с ограниченным знанием этой функциональности в VBA, занимался поиском различных сайтов и не получал никаких ответов, чтобы сделать что-то на месте и не получал ответа при публикации в другом месте. Надеюсь, я смогу решить эту проблему.Изменение и добавление таблиц SQL с помощью Excel VBA
Итак, у меня есть следующий код, который я мощеный вместе:
Sub connectsqlserver()
Dim conn As ADODB.Connection
Dim recset As ADODB.Recordset
Set conn = New ADODB.Connection
Set recset = New ADODB.Recordset
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim msgstrng As String
Dim newstring As String
If conn.State <> 0 Then
conn.Close
End If
With conn
.ConnectionString = "Driver={SQL Server};server=sage500;Database=CS3Live;Uid=sa;Pwd=pass; ReadOnly=False;"""
.ConnectionTimeout = 5
.Open
End With
recset.Open Source:="custinfosheetdata", ActiveConnection:=conn, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
If Sheets("Changes").Range("A1").Value <> 0 Then
For i = 1 To Sheets("Changes").Range("A1").Value
recset.Find "Col2 = " & Sheets("Changes").Cells(2, i + 2) 'find the value in B from B3 onwards
'Do something
Next i
Sheets("Changes").Rows("3:" & i + 2).Delete xlUp
Else
i = 0
End If
If Sheets("New").Range("A1").Value <> 0 Then
For j = 1 To Sheets("New").Range("A1").Value
newstring = ""
For k = 1 To 38
If k = 38 Then
newstring = newstring & "'" & Cells(j + 2, k).Value & "'"
Else
newstring = newstring & "'" & Cells(j + 2, k).Value & "', "
newstring = Format(newstring, "")
End If
Next k
Debug.Print (newstring)
With recset
.AddNew (newstring)
.Update
End With
Next j
Sheets("New").Rows("3:" & j + 2).Delete xlUp
Else
j = 0
End If
recset.Close
conn.Close
If i = 0 And j = 0 Then
msgstring = "No Changes/New Data to add"
Else
If i = 0 And j <> 0 Then
msgstring = "No Changes and " & j & " New Customers added"
Else
If i <> 0 And j = 0 Then
msgstring = i & " Changes and no New Customers added"
Else
msgstring = i & " Changes and " & j & " New Customers added"
End If
End If
End If
End Sub
Часть 1: Это в настоящее время выкидывает ошибку в «С recset.AddNew ...» (3001) о том, что аргументы неправильного типа. Стол, который он собирается, отформатирован как nvarchar (255), и все данные отформатированы как текст в разных полях, поэтому я не совсем уверен, что там происходит.
Часть 1 Код:
If lastrow <> 0 Then
For j = 1 To lastrow
For k = 1 To lastfield
If k = lastfield Then
newstring = newstring & "'" & Cells(j + 2, k).Value & "'"
Else
newstring = newstring & "'" & Cells(j + 2, k).Value & "', "
newstring = Format(newstring, "")
End If
Next k
With recset
.AddNew (newstring)
.Update
End With
Next j
End If
Часть 2: Как мое знание VBA для соединения ADODB ужасно, в лучшем случае, я не могу понять, как продолжить, как только я нашел строку я требую, отсюда " «Сделай что-нибудь». Мне нужно это, чтобы найти запись, сопоставленную с столбцом B в таблице «Изменить» excel, а затем отредактировать эту строку в таблице SQL, чтобы она соответствовала ей. Я не могу понять, как это сделать. Часть 2 Код:
If lastrow <> 0 Then
For i = 1 To lastrow
recset.Find "Col2 = " & Sheets("Changes").Cells(2, i + 2) 'find the value in B from B3 onwards
' Do something
Next i
End If
Любая помощь люди могли бы дать с этим было бы удивительным.
Приветствия
Бен
EDIT: Я это из Debug.Print, которые могут помочь некоторым людям визуализировать это немного больше:
"23/07/13","TEST123","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test","Test"
Это для полной линии (так поэтому список полей не требуется, так как это данные для каждого столбца в правильном порядке).
Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. –
Addnew принимает два аргумента: http://msdn.microsoft.com/en-us/library/windows/desktop/ms677536(v=vs.85).aspx – dennythecoder
@mehow, я немного изменил его, чтобы объяснить, что я становясь немного лучше. – bmgh1985