2016-07-01 3 views
0

빠른 질문,이 사이트의 새로운 기능, 특히 프로그래밍이 처음 인 경우.VB6에서 레코드 세트 업데이트

SqlServer에서 데이터를 선택하고 여전히 레코드 집합 인 동안 업데이트하려고합니다. 데이터로 실제 테이블을 업데이트하고 싶지 않습니다. RS라고하는 필드 ("FirstName")가 있는데 "MR"과 같은 문자열을 추가하려고합니다 (예 : "MR")

이것은 내가 그것에 대해 이동하는 방법입니다

str = "Select FirstName from tblClient" 
rs.Open SQL, g_cn, adOpenStatic 

rs.movefirst 
do while not rs.eof 
    rs("FirstName") = "MR" & rs("FirstName") <--- this is what i'm trying to do but it tells me I cannot update it. 
    rs.movenext 
loop 

+0

이게 어렵습니까? 내가 잘못된 일을하고 있니? 불가능한가요? 빌어 먹을, 적어도 코멘트 나 뭐라구. – BubbaSparxx

+0

VB6을 작성한 지 수년이 지났지 만, 예전의 코드를 보았습니다.'rs! [FirstName] = "MR"& rs! [FirstName]' . – Mark

+1

@markels 커서와 관련이 있다고 생각합니다. 나는 adopendynamic과 그 모든 것을 시도했지만 오류는 현재 레코드 셋이 업데이트를 허용하지 않는다고 말합니다. – BubbaSparxx

답변

0

당신은 쉽게 당신을 도울 수 있도록 모든 코드를 표시해야합니다 해결하는 방법.

당신이 보여준 바로는 - 확실한 수정은 str 변수를 사용하는 것입니다. 모듈의 맨 위에 Option Explicit를 추가하면 더 빨리 표시 될 것입니다. 그런 다음 일부 vars를 선언하지 않았다고 말할 수 있습니다.

선언 한 SQL을 사용하는 경우 -

str = "Select FirstName from tblClient" 
rs.Open SQL, g_cn, adOpenStatic 

에 :

str = "Select FirstName from tblClient" 
rs.Open str, g_cn, adOpenDynamic, adLockOptimistic 

루프 : 그것은

변경 작업을해야 당신의 레코드 유형을 변경

rs.Edit 
rs("FirstName") = "MR" & rs("FirstName") 
rs.Update 
rs.movenext 
+0

str이 String으로 선언됩니다. rs.open을 사용하여 작동하지 않는다고 변경하면 오류 처리기에서 오류 3001을 발생시킵니다. 인수가 범위를 벗어난 잘못된 형식입니다.쉼표 중 하나를 꺼내면 작동하지만 작동하지 않습니다 – BubbaSparxx

+0

여분의 쉼표 제거 - rs.Open str, g_cn, adOpenDynamic, adLockOptimistic 사용 - 이전에 편집 추가 및 – dbmitch

+0

이후 업데이트 감사합니다. 이걸로 당신 도움을. – BubbaSparxx

1

실제 해답은 연결이 끊긴 새 레코드 집합을 만드는 것입니다. 당신이 원하는대로 할 수 있으며, 끝내면 아무것도 설정하지 않아도됩니다. 수정하려는 레코드 세트에만 구체적으로 적용하거나 소스 레코드 세트를 복사하는보다 일반적인 방법을 작성할 수 있습니다.

다음은 일반적인 예입니다. rsOriginal은 전달 된 후 나중에 코드에서 사용되는 레코드 세트입니다. rsUpdateable은 원래 레코드 세트 변수에 할당 된 원본 복사본으로 작성된 로컬 레코드 세트입니다. 이제 완전히 갱신 가능하며 변경 사항을 소스 테이블에 다시 저장할 수 없습니다.

... 

'clone a recordset into a new updateable recordset 
Dim rsUpdateable As New ADODB.Recordset 
Dim fld As ADODB.Field 
'errors here are unlikely, but if happens I don't want to alert the user 
On Error Resume Next 
'build the table schema 
For Each fld In rsOriginal.Fields 
    rsUpdateable.Fields.Append fld.Name, fld.Type, fld.DefinedSize 
Next fld 
rsUpdateable.Open 
'populate the new recordset with the original values 
rsUpdateable.AddNew 
For Each fld In rsOriginal.Fields 
    rsUpdateable.Fields(fld.Name).Value = fld.Value 
Next fld 
Set rs = rsUpdateable 'done 
On Error GoTo OriginalErrorHandler 'restore error handler 

... 
+0

새 레코드 세트를 만들려고하지 않습니다. 콤보 상자에로드되기 전에 내 레코드 세트의 데이터를 업데이트하고 싶습니다. 그래서 기본적으로 내 recorset 값 : 마이크, 존, 밥, 제인 (이러한 각각의 값을 ID가 구성되어 있습니다) - 그리고 나서 ID를 기반으로 (이 경우에는 내가 성명서를 할거예요) MR "(ID를 기준으로) 각 남성 앞에 표시되므로 다음과 같이 표시됩니다. 마이크, 존 선생님, 밥 선생님 그리고이 값을 사용하여 내 콤보 박스를로드하십시오. – BubbaSparxx

+0

@ user6539508 데이터베이스에 다시 저장하지 않을 원래 레코드 집합의 데이터를 업데이트해야하는 비슷한 상황에 있었기 때문에이 방법을 개발했습니다. 이것은 원래의 레코드 세트를 갱신 할 수없는 쉬운 방법이었습니다. – jac

관련 문제