|
Microsoft har nyligen introducerat Windows 7 och Office 2010 och som
vanligt har man struntat i allt vad bakåtkompatibilitet heter. Kanske
är det ett sätt att ge Microsoftkonsulter jobb? Om ditt makro för att
hämta data slutar fungera i de nya versionerna kan det bero på att
makrot använder en metod som inte stöds längre. För att ringa in
orsaken kan du öppna din Visual Basic-kod,
leta upp den del av koden som kopplar upp mot din databas, sätta
markören först i koden och "stega" genom makrot med F8-tangenten. Får
du felmeddelandet "ODBCDirect stöds inte längre. Skriv om koden med ADO
i stället för DAO."? Grattis, Microsoft kommer aldrig mer att stödja
din kod.
Ett konkret exempel på en sådan kod stötte jag på hos min förre arbetsgivare:
Sub Connect()
ConnectionStr = "ODBC;UID=" & varUID & ";PWD=" & varPWD & ";DSN=" & varDSN & ""
Set WrkODBC = CreateWorkspace("NewODBCWorkspace", "sa", "", dbUseODBC)
Set ConODBC = WrkODBC.OpenConnection("Connection1", , True, ConnectionStr)
Set DB1 = ConODBC.Database
End Sub
Den här koden behövde skrivas om till följande:
Sub Connect()
Set
ConODBC = New ADODB.Connection ConnectionStr = "Provider=sqloledb; Data
Source=" & varDSN & "; Initial Catalog=" & varDB & ";
User Id=" & varUID & "; Password=" & varPWD & ";
Integrated Security=SSPI" ConODBC.ConnectionString = ConnectionStr
ConODBC.Open
End Sub
Den stora skillnaden mellan dessa två är att den förra kopplar upp
sig med en ODBC-källa (variabeln "varDSN") medan man i den senare måste
ange både server ("Data Source") och databas ("Initial Catalog").
Jag behövde också skriva om mina variabler enligt följande:
- Dim WrkODBC As Workspace utgick helt.
- Dim DB1 As Database utgick helt.
- Dim ConODBC As Workspace ersattes av Dim ConODBC As New ADODB.Connection
- Dim RSData As Recordset ersattes av Dim RSData As New ADODB.Recordset
Till sist behövde jag skriva om koden där data hämtades enligt följande:
Set RSData = DB1.OpenRecordSet(QueryString, dbOpenSnapshot)
ersattes av
Set RSData = ConnODBC.Execute(QueryString)
Jag hoppas att mina exempel hjälper dig i din konvertering. Mer om ODBCDirect, DAO och ADO kan du läsa om i dokumentet Migrating DAO to ADO.
|