2014-08-29 2 views
1

내가 뭘하려고하면 SQL 쿼리를 통해 온라인 서버에서 일부 데이터를 가져온 다음 레코드를 수정하는 레코드 집합을 반복합니다.ADODB 레코드 집합의 레코드 편집

나는 레코드 수정하려고 오류 얻을 : ". 여러 단계 작업을하는 동안 오류가 발생했습니다 각 상태 값을 확인하십시오."

내 질문 : 쿼리에서 가져온 레코드 세트의 레코드를 수정하는 방법이 있습니까?

이 경우 필드 1이 특정 기준을 충족하면 필드 2가 수정됩니다.

당신의 SQL이 수행되지
Dim adoConn As ADODB.Connection 
Dim locRS As New ADODB.Recordset, proRS As ADODB.Recordset 
Dim strConnection As String 

Set getSQL = New ADODB.Recordset 


'Set Objects 
Set adoConn = New ADODB.Connection 

'Specify connection string 
strConnection = "User ID=xxx; Password=xxx;Data Source=xxx;Provider=OraOLEDB.Oracle" 

'Open the connection 
adoConn.Open (strConnection) 

'Set up recordset properties 
getSQL.CursorType = adOpenStatic 
getSQL.CursorLocation = adUseClient 
getSQL.LockType = adLockBatchOptimistic 

'Import the data 
getSQL.Open "SELECT FIELD1, FIELD2 FROM TABLE", adoConn, adOpenStatic, adLockOptimistic 
Set getSQL.ActiveConnection = Nothing 
getSql.Update 


'Loop through data 
getSQL.MoveFirst 
Do While Not stockRS.EOF 
'If cetrain condition is met then modify the null column 
if getSQL!FIELD1=CRITERIA then 
'Error here 
getSQL!FIELD2="SOME STRING" 
End If 
getSQL.MoveNext 
Loop 

'Close 
adoConn.Close 
Set adoConn = Nothing 

답변

0

당신이 무슨 생각을 : 여기

는 간단한 코드입니다 (이 경우 필드 2는 문자열) SELECT를 ... NULL 결과는 ... 반환 할 것입니다 OUTCOME이라는 필드에 NULL 값이 있지만 현재 구문이 필드를 선택하지 않고 ALIAS를 설정하고 있으므로 OUTCOME (사용자가 찾고 있다고 생각하는 것)이라는 테이블의 필드에 연결되지 않습니다. 필드 OUTCOME이 테이블에 있다고 가정합니다. 그렇지 않으면 앞에 테이블을 만들거나 필드를 추가하기 위해 alter table을 사용하여 필드에 아무 것도 쓸 수 없습니다. 필드를 앞쪽으로 만드는 것이 좋습니다 (이미 완료했다고 생각합니다). 그러나 디폴트 값이 NULL인지 확인하여 select 필드에서 NULL 트릭을 수행 할 필요가 없도록하십시오. 또한 필드가 NULL 값을 갖도록 허용되어 있는지 확인하십시오. 그렇지 않으면 오류가 표시됩니다.

getSQL.Open "SELECT FIELD1, FIELD2, OUTCOME FROM TABLE", adoConn, adOpenStatic, adLockOptimistic 

을 다음과 같이 다음 함수에서 NULL 값을 관리 : 선택이된다

if getSQL!FIELD1=CRITERIA then 
'Error here 
    getSQL!OUTCOME="SOME STRING" 
ELSE 
    getSQL!OUTCOME=NULL 
End If 

이 처리하고 결과가 동기화하지 않도록 항상 결과 변수 필드에 뭔가를 쓰기 있는지 확인 . 당신의 완료 후

Set getSQL.ActiveConnection = Nothing 

리소스를 해제하기 위해이 작업을 수행합니다 :

또한 나는 아직도 당신이 서버에서 레코드 데이터를 이혼했다고 생각합니다.

getSql.Update 

데이터베이스를 다시 커밋하도록 변경 한 후.

+0

아직 없습니다. 심지어 레코드를 딥 복사하려고했습니다 ([link] (http://stackoverflow.com/questions/25553594/deep-copy-or-clone-an-adodb-recordset-in-vba)). 그러나 아직도 아무것도. 필드 속성이 아닌가요? –

+0

다른 문제를 발견했습니다. pls는 업데이트 된 답변을 확인합니다. – nempnett

+0

여전히 작동하지 않는 경우 모든 권장 사항을 통합 한 최신 버전의 코드를 게시 할 수 있으므로 다시 살펴볼 수 있습니다. – nempnett

관련 문제