2014-03-06 2 views
1

아래 코드를 사용하여 현재 셀을 가져 와서 SQL Server에서 테이블을 업데이트하려고합니다.Excel VBA에서 SQL Server 테이블을 업데이트하십시오.

Sub UpdateTable() 
Dim rngName As Range 
cnnstr = "Provider=SQLOLEDB; " & _ 
      "Data Source=MyServer; " & _ 
      "Initial Catalog=Mydb;" & _ 
      "User ID=User;" & _ 
      "Password=Pwd;" & _ 
      "Trusted_Connection=No" 
Set rngName = ActiveCell 
'Debug.Print (rngName) 
Set cnn = New ADODB.Connection 
Application.ScreenUpdating = False 
cnn.Open cnnstr 
Set rs = New ADODB.Recordset 
uSQL = "UPDATE MyTable SET FieldNameX = 1 WHERE FieldNameY = '" & rngName & "' " 
rs.CursorLocation = adUseClient 
rs.Open uSQL, cnn, adOpenStatic, adLockOptimistic, adCmdText 
rs.Close 
Set rs = Nothing 
cnn.Close 
Set cnn = Nothing 
Exit Sub 
End Sub 

내가 설정하고 코드에서 설정 한 기록을 연 Operation is not allowed when the object is closed 왜이 폐쇄 될 코드를 단계별로 때, 라인 rs.close에 시간 오류를 실행 말한다?

문제를 해결하고 활성 셀이 쿼리를 채우고 SQL Server에서 테이블을 업데이트하도록하려면 어떻게해야합니까?

+0

'rs'레코드 세트가 성공적으로 열렸 음을 확인할 수 있습니까? 직접 실행 창에서'? rs.recordcount'를 시도하십시오 (CTRL_G 사용). 라인 'rs.Open'에서 오류가 발생하면 회의가 열려 있지 않은 것 같습니다. –

+0

어디에 rs.recordcount 줄을 써야합니까? 내 줄 rs.open 후 그것을 배치하고 인수가 잘못되었거나 잘못된 속성 할당을 사용하여 시간 오류가 발생했습니다 – Jez

+1

업데이트 SQL이 레코드를 반환하지 않으므로 레코드 집합이 비어있을 것으로 예상됩니다. 업데이트의 경우 Connection.Execute 접근법을 사용하는 것이 훨씬 낫습니다. 업데이트로 영향을받는 행 수를 결정하는 데 사용할 수있는 'RecordsAffected'매개 변수가 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms675023(v=vs.85).aspx –

답변

2

아래는 SQL Server에서 테이블을 업데이트하는 데 사용 된 코드입니다.이 코드는 원하는대로 작동합니다. 그것은 activecell과 업데이 트가 걸립니다.

Sub UpdateTable() 
Dim cnn As ADODB.Connection 
Dim uSQL As String 
Dim rngName As Range 
Set cnn = New Connection 
cnnstr = "Provider=SQLOLEDB; " & _ 
      "Data Source=MyServer; " & _ 
      "Initial Catalog=Mydb;" & _ 
      "User ID=User;" & _ 
      "Password=Pwd;" & _ 
      "Trusted_Connection=No" 
    Set rngName = ActiveCell 
cnn.Open cnnstr 
uSQL = "UPDATE MyTable SET FieldNameX = 1 WHERE FieldNameY= '" & rngName & "' " 
'Debug.Print (uSQL) 
cnn.Execute uSQL 
cnn.Close 
Set cnn = Nothing 
Exit Sub 
End Sub 
관련 문제