Relazioni db access

domenica 11 maggio 2014 - 23.38

Giovi Profilo | Newbie

buonasera, ho creato un db access con be e fe, ho creato una maschera che mi permette di esportare e aggiornare le relazioni tra le tabelle tramite vba
il problema sorge quando voglio rendere dinamica la cosa, cioe' quando voglio utilizzare delle variabili che contengono le tabelle da relazionare, l'id della relazione
il codice che utilizzo e' questo

VTabellaPrimaria = RRelazioni.Fields("TabellaPrimaria")
VTabellaSecondaria = RRelazioni.Fields("TabellaSecondaria")
VIDRelazione = RRelazioni.Fields("IDRelazione")
VRelazione = "Rel" & Mid(VTabellaPrimaria, 2) & Mid(VTabellaSecondaria, 2)
With VDbArchivio
' creare la relazione con update e delete cascade
Set VRel = .CreateRelation(VRelazione, VTabellaPrimaria, VTabellaSecondaria, _
VDbArchivioRelationUpdateCascade + VDbArchivioRelationDeleteCascade)
' creare i campi nella relazione
VRel.Fields.Append VRel.CreateField(VIDRelazione)
VRel.Fields![VIDRelazione].ForeignName = VIDRelazione
.Relations.Append VRel
End With
Set VRel = Nothing

il punto in cui va in errore e' questo
VRel.Fields![VIDRelazione].ForeignName = VIDRelazione
dice elemento non presente nell'insieme
come posso fare?
spero di essere stata chiara
grazie
saluti
Gio'

renarig Profilo | Expert

Solitamente le relazioni non si esportano !!!
Tuttavia esiste la possibilità tecnica di farlo.

Ma non ho capito il contesto globale, devi esportare le relazioni del BE nel FE ?


Provo a buttare giu poche impressioni che mi incuriosiscono:

Hai una tabella che ti alimenta il RecordSet "RRelazioni" su cui definisci ad ogni record una relazione,
ma non vedo il ciclo sul RecordSet


quella formulina .... Mid(VTabellaPrimaria, 2) ......
solitamente il Mid vuole 2 parametri tu ne metti solo 1
( ma forse sbaglio io )

Adesso devo andare .....
Magari postaci una MiniDemo di esempio ........

.


Gio' Profilo | Newbie

allora, non ho postato il ciclo, perche' il problema non e' nel ciclo, ma piuttosto nell'impostazione delle variabili, il codice che io utilizzo per creare le relazioni del db esterno e' questo

With VDbArchivio
' creare la relazione con update e delete cascade
Set VRel = .CreateRelation("RelProvaProva1", "TProva", "TProva1", _
dbRelationUpdateCascade + dbRelationDeleteCascade)
' creare i campi nella relazione
VRel.Fields.Append VRel.CreateField("IDProva")
VRel.Fields!IDProva.ForeignName = "IDProva"
.Relations.Append VRel
End With

e funziona perfettamente

il problema e' quando utilizzo le variabili al posto dei campi fissi, come il codice che ho postato precedentemente

Set VDbArchivio = OpenDatabase(VArchivio)

Set RRelazioni = VDb.OpenRecordset("SELECT TabellaPrimaria, TabellaSecondaria, IDRelazione From TRelazioni")

Do While Not RRelazioni.EOF
VTabellaPrimaria = RRelazioni.Fields("TabellaPrimaria")
VTabellaSecondaria = RRelazioni.Fields("TabellaSecondaria")
VIDRelazione = RRelazioni.Fields("IDRelazione")
VRelazione = "Rel" & Mid(VTabellaPrimaria, 2) & Mid(VTabellaSecondaria, 2)
With VDbArchivio
' creare la relazione con update e delete cascade
Set VRel = .CreateRelation(VRelazione, VTabellaPrimaria, VTabellaSecondaria, _
DbRelationUpdateCascade + DbRelationDeleteCascade)
' creare i campi nella relazione
VRel.Fields.Append VRel.CreateField(VIDRelazione)
VRel.Fields![VIDRelazione].ForeignName = VIDRelazione
.Relations.Append VRel
End With
Set VRel = Nothing
RRelazioni.MoveNext
Loop

volevo rendere tutto dinamico, cioe' prendere tabelle, relazioni e campo da relazionare, da una tabella che ho creato appositamente
ma mi va male su questa riga
VRel.Fields![VIDRelazione].ForeignName = VIDRelazione
mi dice elemento non presente in questo insieme

cosa sbaglio?

grazie

saluti

Gio'

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5