Classic ASP

ADODB.Recordset error 오류코드 "800a0cb3"

최고관리자
2017.12.11 18:38 8,863 0

본문

ADODB.Recordset error "800a0cb3" 
현재 레코드 집합이 북마크를 지원하지 않습니다. 이것은 공급자의 제한 또는 선택한 커서 형식 
일 수 있습니다. 

 

위와같은 에러가 발생하면 정말 미친다..평소 잘 사용하던 프로시저와 레코드셋의 조합으로 하던데로 했는데? 왜? 이유는 레코드셋을 가져다 변수에 담아서 뿌려줄때는 이상이 없었지만, 레코드셋 자체를 가지고 페이지 분할을 하고...등등을 하려다보니 문제가 생긴것이다.

 

우선 프로시저가 아닌 날코딩을 이용하면 간단히 해결된다.

 

Set Rs  = CreateObject("ADODB.Recordset")

Rs.CursorType = adOpenStatic
Rs.CursorLocation = adUseClient

같은 방법으로 간단히 해결된다.

 

SQL = "....."
Rs.Open SQL, DB, 1(혹은3 이나 rs.Open sql, DB, adOpenStatic 으로)

 

그리고 오픈할때는 위와같은 방식으로 하면 끝!

 

하지만, command객체와 recordset 객체를 같이 이용하면 말이 달라진다.

 

아래구문을 실행하면...

ADODB.Recordset error "800a0cb3" 
현재 레코드 집합이 북마크를 지원하지 않습니다. 이것은 공급자의 제한 또는 선택한 커서 형식 
일 수 있습니다.  따위의 에러가 발생한다. 그저 하던데로 했을 뿐인데?? ㅠㅡㅜ;;;

특히나!! rs.absolutepage = PageNo 요줄에서 많이 발생한다. 이유는 Rs.RecordCount가 -1 이기 때문이고!!

 

 '@@@@@@@@@@@@@@@@

Set objCmd = Server.CreateObject("ADODB.Command")
Set Rs  = CreateObject("ADODB.Recordset")

Rs.CursorType = adOpenStatic
Rs.CursorLocation = adUseClient

 

with objCmd

  .ActiveConnection = conn
  .CommandText = "USP_OPENLIST"
  .CommandType = adCmdStoredProc
  .Parameters.Refresh '.Parameters.Append .CreateParameter를 대체하는 부분
  
  .Parameters("@VC_DATE_TYPE")  = VC_DATE_TYPE

 

  .Execute , , adExecuteNoRecords

 

  Set rs = .Execute

 

End With
'@@@@@@@@@@@@@@@@@@@@@@@@@@@

 

뭐가 문제일까???????

 

문제와 해결은 간단한 곳에 있었다.

우선 프로시저가 잘못된 경우라면 당연히 에러가 난다.

프로시저는 정상이라는 전제하에...

 

이놈! Set rs = .Execute

엥? 뭐가 이게 뭐?????

 

그놈이 안에서 돌아가면, 그리고 바로 실행을 받게되면! 

RecordCount 값을 읽기전용으로 열게 됨으로 -1 을 리턴합니다. 즉 앞 위로 커서를 움직일수 없기때문입니다...란다!!!! 그래서!!!!

 

위 프로시저는 아래와 같이 변해야 한다...딱 한줄!!! ㅠㅡㅜ!!

 

 '@@@@@@@@@@@@@@@@

Set objCmd = Server.CreateObject("ADODB.Command")
Set Rs = CreateObject("ADODB.Recordset")

Rs.CursorType = adOpenStatic
Rs.CursorLocation = adUseClient

 

with objCmd

.ActiveConnection = conn
.CommandText = "USP_OPENLIST"
.CommandType = adCmdStoredProc
.Parameters.Refresh '.Parameters.Append .CreateParameter를 대체하는 부분

.Parameters("@VC_DATE_TYPE") = VC_DATE_TYPE

 

.Execute , , adExecuteNoRecords

 

'Set rs = .Execute '이놈이 안에서 실행을 할것이 아니라!!

 

End With

 

Rs.Open objCmd '밖에서 오픈으로 저장해야 한다!!!


출처 : http://blog.daum.net/lexerj/18126285

댓글목록 0

등록된 댓글이 없습니다.