21. marts 2006 - 12:35Der er
22 kommentarer og 1 løsning
Ændre DSN gemt i .mdb fil
Hej
Jeg sidder med en gammel Access 97 applikation, som blandt andet trækker data, via ODBC, fra SQL server på netværket. I forbindelse med en en opgradering har SQL serveren skiftet port og IP adresse og Access 97 applikationen virker ikke længere.
Findes der et værktøj eller et trick til at skifte de værdier for ODBC forbindelsen, der er gemt i applikationen?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jeg har lavet noget lignende - det ser sådan her ud, i en lidt barberet udgave.
Public Sub RenewAttach(ByVal vsDatabase As String) Dim db As Database Dim tdf As TableDef
Set db = Workspaces(0).OpenDatabase(vsDatabase) For Each tdf In db.TableDefs If InStr(tdf.Connect, "ODBC") >= 1 Then If InStr(tdf.Connect, "DBQ=XYZ;") Then tdf.Connect = Replace(tdf.Connect, "DBQ=XYZ;", "DBQ=NY_XYZ;") tdf.RefreshLink DoEvents Debug.Print tdf.Name & " er blevet reattached" End If End If Next tdf
Set tdf = Nothing db.Close Set db = Nothing
End Sub
Jeg ville ALDRIG bruge MSys-tabeller til andet end at kigge i. Vær meget, meget varsom med dem.
IP-nummeret bør faktisk ikke betyde noget, bare din odbc-forbindelse i øvrigt hedder det samme. Til gengæld kan dsn-formatet sagtens have ændret format hvis odbc-driveren er blevet opgraderet.
Det jeg har sat ind er vba-kode, som bruges i Access og som kan bruges til at skifte en del af dsn'en. Det kræver at du laver et modul i Access og kalder rutinen. Men det kræver også at du ved præcis hvad der skal ændres og at du kan ændre i koden.
Hvis jeg fjerner ODBC datakilden på klient PC'en, nægter applikationen prompte at starte.
Hvis jeg opretter den igen, med den nye IP adresse etc, ignorer applikationen de nye settings og bruger nogle den har gemt "inde i maven", med en timeout til følge, efter et minuts tid.
Resultatet er det samme, ingen adgang til at relinke tabellerne eller MSys tabeller, for den sags skyld.
Oki - så virker din odbc jo. Så er det bare et spørgsmål om at løbe alle dine tabledefs igennem og rette dsn'en, men det er jo ikke så vildt nemt når du ikke rigtig kan kode. Kan du indsætte DSN'en fra en gammel tabel og fra en du lige har tilknyttet?
Gammel: databasenavn;DESCRIPTION=blabla;DSN=MySQL;OPTION=0;PORT=33306;SERVER=192.168.1.75 Ny : databasenavn;DESCRIPTION=blabla;DSN=MySQL;OPTION=0;PORT=3306;SERVER=192.168.1.69
Public Sub RenewAttach Dim db As Database Dim tdf As TableDef
Set db = currentDb ' Workspaces(0).OpenDatabase(vsDatabase) For Each tdf In db.TableDefs If InStr(tdf.Connect, "ODBC") >= 1 Then If InStr(tdf.Connect, "DBQ=SERVER=192.168.1.75;") Then tdf.Connect = Replace(tdf.Connect, "PORT=33306;SERVER=192.168.1.75", "PORT=3306;SERVER=192.168.1.69") tdf.RefreshLink DoEvents Debug.Print tdf.Name & " er blevet reattached" End If End If Next tdf
Set tdf = Nothing db.Close Set db = Nothing
End Sub
Indsæt koden i et modul og kør den. Og sørg for at have en backup tilgængelig. Man kan lave frygtelig meget rod på meget kort tid når man roder direkte i metadata på den måde.
Jeg vil gætte på at Access er så sur over ikke at kunne få adgang til de linkede tabeller at den i ren trods lukker af for adgang til metadata også *suk*
*hehe* - Access er ganske temperamentsfuld. Men jeg tvivler nu på at det er grunden. Hvis du vælger Moduler under Objekter i databasevinduet, har du så adgang til knappen Ny eller er den også grå?
Er din fil for resten en .mdb eller en .mde?
Jeg er ikke tilgængelig igen før i aften, så kigger jeg lige ind igen.
hold the shift key down when you open the database so that it doeasnt try to connect to the dB. Then find re-link tables manager (cant rememeber where it is in 97) and then choose Always Prompt for new location. Then Press the Select All button (or choose the tables) and press OK.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.