Gekoppelde ODBC tabellen met primary key vernieuwen met VBA

Status
Niet open voor verdere reacties.

Mark Boerkamp

Gebruiker
Lid geworden
13 mrt 2010
Berichten
70
Hallo,

Ik heb een backend op een Sql Server, middels ODBC worden de tabellen gekoppeld en de primary key gekozen, ik wil dit graag automatisch laten plaatsvinden.

Nou heb ik een paar stukjes code samengevoegd en daarmee lukt het om de bestaande gekoppelde tabel "Connectie_Test" met PK "primary_key" te verwijderen en opnieuw te koppelen, dus met 1 tabel lukt het inclusief PK.
(het stukje code verwijderd alle gekoppelde tabellen dat is dus al goed, het koppelt alleen maar 1 tabel)

Code:
Sub BuildTableLink()

Dim db As Database
Dim tdf As TableDef
Dim strDSNName As String
Dim strTableName As String
Dim strDDL As String
Dim strFieldName As String

'verwijder tabellen verbinding gemaakt met ODBC

StartAgain:
 For Each tdf In CurrentDb.TableDefs
    If InStr(1, tdf.Connect, "ODBC") > 0 Then
       DoCmd.DeleteObject acTable, tdf.Name
       GoTo StartAgain
    End If
 Next tdf
 Set tdf = Nothing

'verbinding opnieuw maken

Set db = CurrentDb
strTableName = "Connectie_Test"
strFieldName = "Primary_Key"

Set tdf = db.CreateTableDef(strTableName)
 tdf.Connect = "ODBC;DSN=CCv1.0;;TABLE=" & strTableName & ""

tdf.SourceTableName = "Connectie_Test"
db.TableDefs.Append tdf

strDDL = "CREATE UNIQUE INDEX _uniqueindex ON " & _
strTableName & " (" & strFieldName & ")" & _
"WITH PRIMARY;"

db.Execute strDDL

End Sub

Probleem waar ik tegenaan loop is dat het niet om 1 tabel gaat, wat ik graag zou willen is dat ik een tabel vul met alle gekoppelde tabel namen en bijbehorende primary key's, deze kunnen dan worden verneiuwd op elk gewenst moment

Is dit mogelijk of zijn er betere oplossingen, en hoe zet ik dit op ?

Alvast bedankt voor je reactie,
Groet, Mark
 
Waarom zou je de koppeling opnieuw maken? Je kunt dan toch net zo goed RefreshLink gebruiken?
 
Hoi Michel,

Heb ik geprobeerd maar dan verdwijnt de primary key, of zit er iets niet goed in de code ?

Code:
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
If Len(tdf.Connect) > 0 Then
tdf.RefreshLink
End If
Next
 
De primary key zit sowieso in je Backend, dus zo'n ramp is het niet dat je hem niet ziet. Je kunt hem toch niet dubbel invoeren. Of heb je daar problemen mee?
 
Je hebt gelijk, de primare key zit in de backend.

Probleem bij een koppeling met een sql server is dat je een unieke key moet aanwijzen in de koppeling, doe je dat niet dan kun je de tabel enkel raadplegen en geen data aanpassen of toevoegen.
 
Als je meerdere tabellen opnieuw wilt koppelen, dan zou ik ze in dezelfde lus aanmaken waarin je ze verwijdert. Met strTableName = tdf.Name zet je de naam in de variabele, en daarna kun je hem weer toevoegen. Of, als je eerst alles weg wilt gooien, dan maak je een matrix variabele aan waar je alle namen in zet, en gebruik je een lus op basis van de matrix om alles weer aan te maken.
 
Als ik het goed begrijp bedoel je dat zowel de tabelnaam als de primare key in een variable wordt weggeschreven, dan worden de koppelingen verwijderd en dmv de waarden in de variable weer toegevoegd.

Dat gaat me zonder hulp niet lukken, mag ik je vragen om hiervoor een aanzet te maken ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan