2010-08-20 3 views
0

대 :SCOPE_IDENTITY() 방식의 차이는 이러한 일이 무엇인지 rs.Fields

Sql = "INSERT INTO mytable (datapath, analysistime,reporttime, lastcalib,analystname,reportname,batchstate,instrument) " & _ 
     "VALUES (dpath, atime, rtime,lcalib,aname,rname,bstate,instrument) SELECT SCOPE_IDENTITY()" 

Set rs = cn.Execute 
Set rs = rs.NextRecordset 

이 : 내가

: 내 질문에 구체적으로이

With rs 
    .AddNew ' create a new record 
    ' add values to each field in the record 
    .Fields("datapath") = dpath 
    .Fields("analysistime") = atime 
    .Fields("reporttime") = rtime 
    .Fields("lastcalib") = lcalib 
    .Fields("analystname") = aname 
    .Fields("reportname") = rname 
    .Fields("batchstate") = bstate 
    .Fields("instrument") = instrument 

    .Update ' stores the new record 
     id=fields.Fields("rowid") ' ** Answer to Question ***  
End With 

입니다

다중 사용자 환경에서. 사용자가 레코드를 추가 한 직후 레코드의 ROWID를 잡아야합니다. 어떻게해야합니까?

rs.Open "batchinfo", cn, adOpenKeyset, adLockOptimistic, adCmdTable 
+0

레코드 집합을 열 수있는 코드를 게시하시기 바랍니다 있습니다. – Quassnoi

+0

rs.Open "batchinfo", cn, adOpenKeyset, adLockOptimistic, adCmdTable –

답변

1

서로 다른 당신이 레코드를 추가하고 결과를 다시 얻는 방법 :

이 난 레코드를 열 방법이다.

첫 번째 경우 INSERT 문 다음에 SCOPE_IDENTITY이 호출됩니다.

두 번째 경우에는 업데이트 가능한 커서를 열고 레코드를 추가 한 다음 새로 추가 된 레코드를 다시 읽습니다.

커서를 여는 것은 리소스 집약적 인 작업 일 수 있습니다 (이 작업은 수행 방법에 따라 다름). 동시성도 저하 될 수 있습니다.

+0

품질 저하 동시성의 의미를 말씀해 주시겠습니까? 다중 사용자 환경에서 수행되지 않습니까? –

1

첫 번째 코드 예는 SQL Server에서 유효하지 않습니다. VALUES 절 이후의 이름은 무엇입니까? 나는 그들이 매개 변수가되어야한다고 생각하지만 당신은 그런 매개 변수를 전달할 수 없습니다. 매개 변수화 된 저장 프로 시저 및 매개 변수 개체를 사용하여 매개 변수를 전달하지 않는 이유가 있습니까?

0

오픈 레코드 세트를 사용하는 대부분의 경우 Quassnoi는 자원 집약적이라고 말한 것처럼 데이터를 추가하고 업데이트하고 ID 메서드를 추가합니다. 응용 프로그램에서 많이 호출되거나 가능한 빨리 실행해야하는 부분에 대해서는 새 행의 ID가 반환 매개 변수 인 저장 프로 시저를 사용하는 경향이 있습니다. 여기

코드 예제

Set cmd = New ADODB.Command 

With cmd 

    .CommandText = "sptblTest_questions_UPSERT" 
    .CommandType = adCmdStoredProc 
    .ActiveConnection = dbCon 

    .Parameters.Append .CreateParameter("@Question_ID", adInteger, adParamInput, 0, Me.txtQuestion_ID) 

    .Parameters.Append .CreateParameter("@Section_ID", adInteger, adParamInput, 0, Me.txtSection_ID) 

    .Parameters.Append .CreateParameter("@Question_number", adTinyInt, adParamInput, 0, Me.txtQuestion_number) 

    .Parameters.Append .CreateParameter("@Question_text", adVarChar, adParamInput, 1000, Me.txtQuestion_text) 

    .Parameters.Append .CreateParameter("@Max_score", adSmallInt, adParamInput, 0, Me.txtMax_score) 

    .Parameters.Append .CreateParameter("@User", adVarChar, adParamInput, 50, fOSUserName) 

    .Parameters.Append .CreateParameter("@Inserted_ID", adInteger, adParamOutput, 0) 

    .Execute 

    Me.txtQuestion_ID = .Parameters("@Inserted_ID") 

End With