2015-03-27 4 views
0

мне удалось обновить таблицу SQL и запись с помощью этой SQL строкуExcel VBA ADO UPDATE таблицы SQL/записи

"UPDATE Breach_Test_Key SET [VAL_BREACH_REASON] = 'SOME BREACH REASON' WHERE [ID] = 1" 

Две вещи, которые я пытаюсь достичь, и что:

  1. Обновите два конкретных столбца в таблице SQL, как мне определить два столбца в SET?
  2. Мне также нужно обновить все записи, которые находятся в таблице в Excel, назад в таблицу SQL (которая будет существовать в таблице SQL).

Поле идентификатора всегда будет соответствовать данным из этой таблицы.

Возможно, кто-нибудь проведет меня через структуру SQL для этого, пожалуйста?

Спасибо @MatteoNNZ за помощь ч.1, это код, я теперь использую для обновления несколько столбцов

uSQL = "UPDATE Breach_Test_Key SET [VAL_BREACH_REASON] = 'SOME BREACH REASON1',[VAL_BREACH_DETAIL] = 'SOME BREACH DETAIL1' WHERE [ID] = 1" 

Так что для второй части, я на самом деле не получил ничего, достаточного для поста, но где Я указал значение в строке, я бы предпочел, чтобы она была динамической, чтобы прокручивать таблицу/столбец excel. Любые указатели?

+0

Посмотрите на [синтаксис] (http://www.w3schools.com/sql/sql_update.asp), как для точки 1. Попробуйте также, чтобы написать SQL раньше, поэтому у людей будет что-то исправить вместо того, чтобы писать все с нуля. –

+0

Спасибо @MatteoNNZ ОК, поэтому мне удалось сделать часть 1, которая может быть или не быть правильным методом, но она работает. Вот как я это достигаю. USQL = «UPDATE Breach_Test_Key SET [VAL_BREACH_REASON] =« НЕКОТОРЫЕ НАПРАВЛЕНИЯ ПРИЧИНЫ »ГДЕ [ID] = 1" & _ "UPDATE Breach_Test_Key SET [VAL_BREACH_DETAIL] = 'НЕКОТОРЫЕ ДЕТАЛИ НАРУШЕНИЯ' ГДЕ [ID] = 1 "' –

+0

Часть 2 - это то, где я хотел бы, чтобы какой-то цикл прошел цикл по столбцу идентификатора таблицы excel, чтобы соответствовать таблице SQL и обновить эту запись. Надеюсь, это имеет смысл. –

ответ

0

Хорошо, поэтому я получил результаты, которые я хотел. Записи обновляются как ожидается, используя опцию loop в vba. Это может быть не самый красивый способ сделать то, что я пытался достичь, но он работает.

Если кто-то хочет предложить улучшения, то я все уши. Но вот мой последний макрос:

Private Sub UpdateTable() 

Dim cnn As ADODB.Connection 
Dim uSQL As String 
Dim strWard As String 
Dim strDate As Date 
Dim strUser As String 


'=====USER NAME VBA================ 
    Set WSHnet = CreateObject("WScript.Network") 
    UserName = WSHnet.UserName 
    UserDomain = WSHnet.UserDomain 
    Set objUser = GetObject("WinNT://" & UserDomain & "/" & UserName & ",user") 
    UserFullName = objUser.FullName 
'=================================== 


'strDate is a stamp of the date and time when the update button was pressed 
strDate = Format(Now(), "dd/mm/yyyy hh:mm:ss") 
'User is the username of the person logged into the PC the report is updated from 
strUser = UserFullName 


'Set Connection string 
Set cnn = New Connection 
cnnstr = "Provider=SQLOLEDB; " & _ 
      "Data Source=ServerName; " & _ 
      "Initial Catalog=dbName;" & _ 
      **USER DETAILS HERE** 

'Connect and Run the SQL statement to update the reords. 
cnn.Open cnnstr 
Dim row As Range 
For Each row In [tbl_data].Rows 
    uSQL = "UPDATE Breach_Test_Key SET [VAL_BREACH_REASON] = '" & (row.Columns(row.ListObject.ListColumns("VAL_BREACH_REASON").Index).Value) & _ 
    "' ,[VAL_BREACH_DETAIL] = ' " & (row.Columns(row.ListObject.ListColumns("VAL_BREACH_DETAIL").Index).Value) & _ 
    "' WHERE [ID] = '" & (row.Columns(row.ListObject.ListColumns("ID").Index).Value) & "'" 

    'Debug.Print uSQL 
cnn.Execute uSQL 
Next 

cnn.Close 
Set cnn = Nothing 
Exit Sub 
End Sub 
Смежные вопросы