| 큐브리드버젼 | |
|---|---|
| 사용환경(OS) |
ADO란 객체를 이용하여 프로그램을 작성하는데 이 객체는 ODBC나 OLEDB Driver를 이용합니다.
그런데 ADO객체는 connection이나 recordset을 만들 때 cursor의 위치를 지정할 수 있습니다.
ODBC는 server side cursor or client side cursor를 모두 지원하고 있고 잘 동작이 됩니다.
그러나 OLEDB는 client side cursor가 지원이 안되고 있습니다. ADO기본값은 server side cursor입니다.
client side cursor가 지원되지 않으면 많은 개발 툴이나 질의 툴 등에서 문제가 발생합니다.
' make ODBC connection string
' strConn = strConn & "driver={CUBRID Driver};"
' strConn = strConn & "server=" & UserInfo.ServerIP & ";"
' strConn = strConn & "port=" & UserInfo.PortNO & ";"
' strConn = strConn & "uid=" & UserInfo.DBUserID & ";"
' strConn = strConn & "pwd=" & UserInfo.DBPassword & ";"
' strConn = strConn & "db_name=" & UserInfo.DBName & ";"
'make OLEDB connection string
strConn = strConn & "Provider = CUBRIDProvider;"
strConn = strConn & "Data Source =" & UserInfo.DBName & ";"
strConn = strConn & "Location =" & UserInfo.ServerIP & ";"
strConn = strConn & "User ID =" & UserInfo.DBUserID & ";"
strConn = strConn & "Password =" & UserInfo.DBPassword & ";"
strConn = strConn & "Port =" & UserInfo.PortNO & ";"
strConn = strConn & "Fetch Size = 100;"
strConn = strConn & "Persist Security Info = True;"
' connect to database with ado connection object
Set GadoConn = New ADODB.Connection
With GadoConn
.ConnectionString = strConn
.ConnectionTimeout = 30 '
.Properties("Prompt") = adPromptNever ' 이것은 ADO에서 기본 프롬프트 모드입니다.
.CursorLocation = adUseClient
.Open
End With
위의 소스에서 연결 문장을 ODBC를 이용하면 문제가 없이 잘 동작하는데 OLEDB를 이용하면 데이타를 가지고 오지
못해서 데이타 처리가 안됩니다.
내부 에러로 보입니다. 확인 부탁합니다.
VB6.0에서 테스트를 해보았습니다.
제가 테스트에서 사용한 소스 코드는 아래과 같으며, 테스트 결과 odbc와 oledb 모두 정상적으로 값이 출력되었습니다.
테스트에 사용된 CUBIRD 버젼은 최신 버젼은 CUBRID 2008 R2.1 (8.2.1.0215)입니다.
'소스 시작
Private Sub Command1_Click()
Dim GadoConn As New ADODB.Connection
Dim cmdCommand As New ADODB.Command
Dim rstRecordSet As New ADODB.Recordset
Dim strConn As String
'strConn = strConn & "driver={CUBRID Driver};"
'strConn = strConn & "server=localhost;"
'strConn = strConn & "port=33000;"
'strConn = strConn & "uid=dba;"
'strConn = strConn & "pwd=;"
'strConn = strConn & "db_name=demodb;"
strConn = strConn & "Provider = CUBRIDProvider;"
strConn = strConn & "Data Source = demodb;"
strConn = strConn & "Location = localhost;"
strConn = strConn & "User ID = dba;"
strConn = strConn & "Password =;"
strConn = strConn & "Port = 33000;"
strConn = strConn & "Fetch Size = 100;"
strConn = strConn & "Persist Security Info = True;"
Set GadoConn = New ADODB.Connection
With GadoConn
.ConnectionString = strConn
.ConnectionTimeout = 30 '
.Properties("Prompt") = adPromptNever ' 이것은 ADO에서 기본 프롬프트 모드입니다.
.CursorLocation = adUseClient
.Open
End With
With cmdCommand
.ActiveConnection = GadoConn
.CommandText = "SELECT * FROM code;"
.CommandType = adCmdText
End With
With rstRecordSet
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open cmdCommand
End With
If Not rstRecordSet.EOF Then rstRecordSet.MoveFirst
Do While Not rstRecordSet.EOF
List1.AddItem rstRecordSet.Fields(0) & ", " & rstRecordSet.Fields(1)
rstRecordSet.MoveNext
Loop
GadoConn.Close
Set GadoConn = Nothing
Set cmdCommand = Nothing
Set rstRecordSet = Nothing
End Sub
'소스 끝














