우리는 2000 동안 개발 된 오래된 레거시 응용 프로그램을 가지고 우리는 내가 응용 프로그램의 모듈을 실행하려고 할 때, 그것은 나에게 오류주고있다 2007 액세스 2003 년 이사 :DAO에서 ADO로 코드를 다시 작성하는 방법은 무엇입니까?
"Run-time error 3847. ODBCDirect is no longer supported. Rewrite the code to use ADO instead of DAO".
과 그것은 라인 Set WS = CreateWorkspace("NewWS", "", "", dbUseODBC)
하이라이트. 내가 Access에 정말 처음 왔기 때문에이 문제를 게시하기 전에 조사를했지만 행운은 없습니다. DAO 대신 ADO를 사용하도록 코드를 다시 작성하려고합니다.
다음은 내 오랜 VBA 코드 : 나는 코드를 다시 작성하기 시작했다
Public Function GetID (ByRef SegmentItem As clsSegmentDefinitions) As Long
Dim qdf As QueryDef
Dim qdfNewID As QueryDef
Dim rs As Recordset
Dim rsNewID As Recordset
Dim NaturalDescription As String
Dim WS As Workspace
Dim con As Connection
Set WS = CreateWorkspace("NewWS", "", "", dbUseODBC)
WS.DefaultCursorDriver = dbUseODBCCursor
Set con = WS.OpenConnection("", , , SQLConnectString)
DoCmd.Hourglass False
DoCmd.OpenForm " frmQuickAdd_AddNatural ", , , , , acDialog, SegmentItem.AddValue
DoCmd.Hourglass True
If Form_frmQuickAdd_AddNatural.Tag Then
Set qdf = con.CreateQueryDef("", "{ ? = call sp_Insert(?, ?, ?) }")
qdf.Parameters.Refresh
qdf![@prmDescription] = Left(Form_frmQuickAdd_AddNatural.txtSegmentDescription, 34)
qdf![@prmCreateUser] = CurrentUser
qdf![@prmProjectID] = 0
qdf.Execute
Set qdfNewID = CodeDb.CreateQueryDef("")
qdfNewID.Connect = SQLConnectString
qdfNewID.ReturnsRecords = True
qdfNewID.SQL = "sp_GetNewSegmentID"
Set rsNewID = qdfNewID.OpenRecordset
If Not IsNull(rsNewID!MaxOfSegmentID) Then
GetID = rsNewID!MaxOfSegmentID
Else
GetID = 0
End If
Else
GetID = 0
End If
DoCmd.Close acForm, "frmQuickAdd_AddNatural"
End Function
하지만 전혀 이런 식으로 생각하면 나는 단서가 없다.
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
cnn.Open "Provider=mssql;Data Source=" & dbq & ";User Id=" & uid & ";Password=" & pwd
With rst
.Open "SELECT COUNT(*) FROM " & tbl, cnn, adOpenKeyset, adLockOptimistic
num = .Fields(0)
.Close
End With
cnn.Close
Set rst = Nothing
Set cnn = Nothing
ADO에 다시 작성하는 작업이 많습니다. 또는 ODBC 워크 스페이스없이 작업하려면 DAO를 사용하여 수정하십시오. – Gustav
나는 모든 것을 SQL Server 무료 버전으로 이식 할 것입니다. Access와 시간을 보냈는데 최근에는 여전히 버그가 있습니다. 무서운. –
코드 블록을 수정하기 위해 질문을 다시 형식화했지만이 시점에서는 질문이 너무 광범위합니다. ADO에 대한 정보는 [Documentation.SO] (http://stackoverflow.com/documentation/vba/3578/working-with-ado#t=201612301821243706514)에서 확인할 수 있습니다. * 특정 * 문제에 빠질 때 * 구체적인 * 질문이 생기면 * 구체적인 * 답을 줄 수 있습니다. 지금은 다른 사람들에게 스택 오버플로가 아닌 "번역"작업을 요청하는 것처럼 보입니다. –