Avatar billede plysdyret Nybegynder
21. marts 2006 - 12:35 Der 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?

Mvh.

Torkil
Avatar billede ffsoft Praktikant
21. marts 2006 - 13:42 #1
I Access vælger du Indtillinger>Vis systemobjekter.
Nu kan du se tabellen MSysObjects. Åben den og kig
i kolonnen Connect
Avatar billede plysdyret Nybegynder
21. marts 2006 - 13:49 #2
Jeg formoder at du mener Funktioner -> Indstillinger; den er grey'd out (formentligt pga manglende adgang til ODBC tabellerne)
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 13:50 #3
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.
Avatar billede plysdyret Nybegynder
21. marts 2006 - 14:00 #4
Det er noget VB dims? Jeg ved intet om programmering til Microsoft platformen.

Jeg besidder:

1) En .mdb fil
2) IP, port etc på gamle server
3) IP, port etc på nye server

Hvordan kan jeg bruge din kode sammen med dette?
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 14:04 #5
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.
Avatar billede plysdyret Nybegynder
21. marts 2006 - 14:20 #6
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.
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 14:28 #7
ODBC-kilden SKAL selvfølgelig være der.

Kan du vedhæfte en tabel manuelt til den nye odbc-kilde?
Avatar billede plysdyret Nybegynder
21. marts 2006 - 14:35 #8
Ja, det kan jeg godt.
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 14:42 #9
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?
Avatar billede plysdyret Nybegynder
21. marts 2006 - 14:48 #10
Sådan her?

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
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 14:54 #11
Lige præcis sådan der.

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.
Avatar billede plysdyret Nybegynder
21. marts 2006 - 14:57 #12
Så skal jeg bare lure, hvordan man indsætter koden i et modul... =)
Avatar billede plysdyret Nybegynder
21. marts 2006 - 14:58 #13
Hvis vejen er Indsæt -> Module, så er den også grey'd out :|
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 15:00 #14
Hvilken access-version bruger du? Det kan være din version er nyere end din db og så skal din db konverteres.
Avatar billede plysdyret Nybegynder
21. marts 2006 - 15:04 #15
Access 97 SR-2, databasen er i samme format

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*
Avatar billede jesperthomsen Nybegynder
21. marts 2006 - 15:08 #16
*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.
Avatar billede plysdyret Nybegynder
21. marts 2006 - 15:25 #17
Hmm det kan jeg ikke finde; hvordan navigerer jeg mig frem til et databasevindue?

Filen er en .mdb
Avatar billede terry Ekspert
21. marts 2006 - 20:25 #18
whats the problem with just altering the ODBC data source and then re-link the tables?
Avatar billede terry Ekspert
21. marts 2006 - 20:28 #19
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.
Avatar billede plysdyret Nybegynder
22. marts 2006 - 09:05 #20
Thanks a lot terry, holding down shift made it possible to access and relink the tables =)

Also thanks to jesperthomsen for his help.
Avatar billede plysdyret Nybegynder
22. marts 2006 - 09:07 #21
Hmm you need to make an answer insted of a comment, for me to grant you the points I think?
Avatar billede terry Ekspert
22. marts 2006 - 11:06 #22
:o)
Avatar billede terry Ekspert
22. marts 2006 - 11:56 #23
thanks
have a good day
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger chef for Lokal IT i hovedstadsområdet

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Kickstart din IT-karriere som IT-supporterelev på Flyvestation Aalborg

Netcompany A/S

Test Consultant

Politiets Efterretningstjeneste

Teamledere til PETs indhentningsafdeling

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations