私たちは、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)
にハイライトします。私がアクセスに本当に新しいので、ここでこの問題を投稿する前に研究を行いましたが、運はありません。 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に書き直す作業はたくさんあります。あるいは、DAOを使用してODBC WorkSpaceを使用せずに作業することもできます。 – Gustav
私はすべてをSQL Serverのフリー版に移植します。私はAccessとの時間を費やし、最近はまだバグがたくさんあります。恐ろしい。 –
コードブロックを修正するためにあなたの質問を再フォーマットしましたが、あなたの質問は本質的には*あまりにも広すぎ*ました。 ADOに関する情報は、[Documentation.SO](http://stackoverflow.com/documentation/vba/3578/working-with-ado#t=201612301821243706514)にあります。特定の問題に取り組むと、*具体的な*質問があり、あなたに*特定の*回答を与えることができます。今では、他の人にあなたのために "翻訳"作業を依頼しているように見えますが、これはStack Overflowの目的ではありません。 –