Newsgroup: it.comp.appl.access
Titolo: Database relazionale.

Ho creato un discreto applicativo con dv relazionale che ho poi suddiviso
con BE e FE ed ora utilizzo con archivi identici su cartelle diverse. Vorrei
sapere se sia possibile ed eventualmente il modo più semplice, lavorare da
un unico FE su diversi BE posti in cartelle diverse o se devo metterli in
un'unica cartella con nomi diversi,grazie.

 ha scritto nel messaggio news:bq20cf$gni$1...@lacerta.tiscalinet.it...

semplicemente li puoi mettere dove vuoi e con i nomi che vuoi.
quello ceh consiglio io è di crearti una tabella dove registri il nome del db e il suo percorso
(completo ovviamente)
e poi da codice gestisci il collegamento alle varie tabelle con l'istruzione
docmd.transferdatabase ........

Devo crearmi un comando da maschera principale al quale associare il comando
docmd.transferdatabase ....con il percorso che mi interessa?
Puoi farmi un esempio di codice da associare,grazie.


il comando potrebbe essere:
    Dim dbs As Database, rst As Recordset, tdf As TableDef
    Dim percorso As String, Nome As String, Errori As String
    Dim varRestituisce As Variant, Ntab As Integer, ProgTab As Integer
    Ntab = 43
    ProgTab = 0
    varRestituisce = SysCmd(acSysCmdInitMeter, "Cancellazione tabelle .... Attendere prego ", Ntab)
    Errori = " "
    EImpo = 0
' Legge dati comuni
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("TabellaConIPercorsi", dbOpenDynaset)
    rst.MoveLast
    rst.MoveFirst
  Do While Not rst.EOF
    If rst![Attivo] = True Then' con questo if seleziono solo il db che voglio caricare se devi
caricare contemporaneamente da più db devi spostare la fine del loop
    percorso = rst![PercorsoAttivo]
    Nome = rst![NomeAttivo]
    End If
    rst.MoveNext
  Loop
    rst.Close
    Set dbs = Nothing
    ' cancella tabelle collegate
    DoCmd.DeleteObject acTable, "NomeTabella"
    GoSub Progress
    ' apre tabelle collegate
'    DoCmd.TransferDatabase acLink, "Microsoft Access", Percorso & "/" & Nome & ".MDB", acTable,
"TabellaOrigine", "NomeTabella"
    ProgTab = 0
    varRestituisce = SysCmd(acSysCmdInitMeter, "Caricamento tabelle ... Attendere prego", Ntab)
    GoSub Progress
Exit_Cambia_Click:
    If Errori <> " " Then
        If MsgBox("Sono stati riscontrati i seguenti errori nella procedura di caricamenti:" &
Chr(13) & Chr(13) & Errori & Chr(13) & Chr(13) & "Eseguire di nuovo il caricamento?", vbYesNo,
"CARICAMENTO DATI") = vbYes Then
            EImpo = 1
            cambia
        Else
            EImpo = 0
            Exit Sub
        End If
    End If
    varRestituisce = SysCmd(acSysCmdClearStatus)
    Exit Sub
Progress:
ProgTab = ProgTab + 1
varRestituisce = SysCmd(acSysCmdUpdateMeter, ProgTab)
Return
Cambia_Click:
   Errori = Errori & Err.Number & " " & Err.Description & Chr(13)
   Resume Next
End Sub

Mi scuso per la dilungazione dell'argomento, ho poca dimestichezza con i
comandi da codice.
Operando con il db FE che non ha alcuna tabella collegata, quando io lo vado
ad aprire lo ho impostato che mi apre una maschera di avvio cosě denominata
nella quale ho tutti i vari pulsanti e menů principali.
Il codice di Tuo esempio consente la scelta dei collegamenti alle diverse
tabelle dei rispettivi BE posti in altrettante cartelle indicate con i
percorsi di una tabella "path" creata nel FE?
In caso affermativo devo eseguire il codice in autoexec o comunque prima di
aprire la maschera avvio?


il mio esempio ti da l'opportunità di caricare solo le tabelle che ti servono dai vari BE (anche da
più BE contemporaneamente, a patto che il nome della tabella sia diverso ovviamente)
il collegamento è da fare ogni volta che è stata modificata la struttura del BE e nel caso in cui i
BE da caricare sono diversi e quindi bisogna cambiare i riferimenti interni.
ti faccio un esempio:
FE contiene le procedure per la fatturazione
BE1 tabelle del cliente n. 1
BE2 tabelle cliente n. 2
oggi carico di dati del cliente n.1 quindi eseguo la procedura di caricamento per il BE1...
chiudo il FE (quindi anche il BE1) perchè non mi serve più...
mi accorgo di dover inserire nuovi dati
riapro il FE ma posso non fare il caricamento perchè in automatico resta collegato l'ultimo BE
caricato
ora devo gestire i dati del Cliente n. 2
quindi lancio la procedura di caricamento per il BE2
spero di essere stato almeno un po' chiaro.... :-)

Ho capito ma forse non sono stato molto chiaro e mispiego.
Ho una gestione database con tutte le sue maschere,report,querry,vba,ecc.
che apro con una maschera principale all'avvio ed opera con tabelle
collegate al rispettivo BE. Entrambi sono contenuti in un'unica cartella.
Per aprire l'applicazione FE ho creato un collegamento sul desktop con nome
"App1".
Io uso però diverse cartelle come sopra per gestire diverse ditte e che ho
collegato al desktop con"App2",ecc.
Ogni qualvolta devo creare una nuova gestione o ditta devo copiare una delle
cartelle complete e dare un nuovo collegamento al desktop.
La mia domanda era rivolta ad avere la possibilità di avere un unico FE che
mi consenta da maschera principale tramite pulsanti che chiamerei App1,ecc.
il collegamento e gestione dei vari BE di cui sopra.

 ha scritto nel messaggio
news:bq4epg$g61$1...@lacerta.tiscalinet.it...

è quello che ti ho proposto io...
solo che io non vedo il quoting che ho messo prima di questo, tu lo vedi?
sintetizzando il discorso funziona così:
usi la procedura che ti ho scritto sopra che funziona esattamente come serve a te.
nel tuo FE principale  (dove ovviamente risiede la sub)
la tabella che ti ho proposto deve avere i seguenti campi minimi e deve essere sul FE:
PercorsoDB formato stringa (qui inserici il percorso completo del DB senza il nome)
NomeDB formato stringa (nome del DB senza estensione)
FlagAttivo formato si/no (serve per dirgli quale record caricare)
con una maschera gestisci la selezione del record (ricorda che devi avere solo 1 flag su tutti i
tuoi record altrimenti ti carica l'ultimo in ordine di scorrimento)
lanci tale sub che in base ai dati raccolti dalla tabella di importazione (dove c'è il percorso
completo del BE da caricare)
ed il giorco è fatto...

"Neo" <senz...@chiedetesul.NG> ha scritto nel messaggio
news:lxjxb.149916$e6.54...@twister2.libero.it...

Ho provato ad usare un'unico BE inserendo il codice come suggerito nella sub
apertura maschera di avvio e mi dà errore di compilazione evidenziando la
stringa di codice: dbs As Database...

 ha scritto nel messaggio
news:bq4img$rk6$1...@lacerta.tiscalinet.it...

ha ragione!
dimenticavo:
devi aggiungere ai riferimenti del codice la versione più alta che hai della libreria "Microsoft DAO
....."
(dovresti avere la 3.6)

"Neo" <senz...@chiedetesul.NG> ha scritto nel messaggio
news:aQkxb.146642$vO5.5...@twister1.libero.it...

come sarebbe??
Uso un db creato con access 2000 ma potrei usare il FE anche su Xp...

 ha scritto nel messaggio
news:bq4rcd$426$1...@lacerta.tiscalinet.it...

la DAO è di Access 2000 se non sbaglio.. io lo creo con xp ma uso il formato 2000....
se devi distribuire la procedura fai prima un debug su una macchina con access 2000 per essere
sicuro che i riferimenti vadano bene

"Neo" <senz...@chiedetesul.NG> ha scritto nel messaggio
news:rFmxb.146928$vO5.5...@twister1.libero.it...

Non sopravulutare, non devo distribuire alcunchè è un applicativo che mi
sono creato un pò con autocomposizione un pò studiando su un testo d'uso di
msaccess.
Io lo ho creato in access2000 che uso anche però su pc con office Xp senza
problemi. In verità però mi sono accorto che errore simile me lo ha dato
qualche tempo fà quando ho inserito del codice come libro di testo proprio
usando il Dim dbs...
Se gentilmente mi spieghi cosa intendi per versione di libreria
probabilmente risolvo prima,grazie.


semplicemente il fatto che è meglio utilizzare la versione di libreria più recente, ossia quella con
il numero più alto (vedi DAO 3.6)
quando fai (in visualizzazione codice) dal menu strumenti --> riferimenti  trovi un elenco di
librerie da aggiungere (in base alle esigenze) al tuo applicativo
scorri l'elenco e trova "Microsoft DAO 3.6...." e inseriscila mettendo il flag in parte alla voce
compila (dal menu debug --> compila) e dovrebbe funzionare..

 [CUT]
Ho risolto con le librerie e vorrei ricapitolare.
Ho creato nel FE una tabella con nome Tab_path che è composta da n. 4 campi
come di seguito
1° Contatore
2° Path  ( Testo)
3° Nome_db (Testo)
4° Flag (Si/No)
Devo inserire il Tuo codice su apertura della maschera principale?
Dai una controllata nuovamente al codice poichè in compilazione mi dà un
errore di sintassi e fammi sapere, grazie.

 ha scritto nel messaggio
news:bq5f2r$tg6$1...@lacerta.tiscalinet.it...

La tabella è ok
il codice è ok, devi solo inserirlo in una sub in questo modo:
public sub cambia()
on error goto Cambia_Click
'ora inserisci il codice che ho scritto
..
.
.
.
.
ricorda di cambiare i riferimenti alla tabella e ai campi
il codice lo devi inserire in un modulo qualsiasi (meglio se in un modulo generale)
e lo devi richiamare (inserendo nell'evento "OnClick" di un pulsante il nome che hai dato alla sub,
in questo caso cambia)
non è necessario che sia nella maschera principale, l'unica cosa è che ultimato quel codice dovrai
inserire un'istruzione del tipo
docmd.openform "principale"
così torna al punto di partenza

"Neo" <senz...@chiedetesul.NG> ha scritto nel messaggio
news:TZCxb.152720$e6.55...@twister2.libero.it...

In fase di compilazione non trova dichiarata la variabile "EImpo = 0 "
Ok quasi... tutto
Ho creato un modulo con il codice come hai detto ed a fine esecuzione codice
il comando Docmd.openform frm_avvio
Il modulo,per l'esecuzione del codice,a cosa lo abbino?

"Neo" <senz...@chiedetesul.NG> ha scritto nel messaggio
news:k4oxb.150605$e6.54...@twister2.libero.it...

Ahhhh....
finalmente un pò di quoting...
MAssimiliano


se la variabile nn è dichiarata ... dichiarala... è di tipo integer
il modulo non lo abbini a nulla
inserisci (come detto prima) sull'evento on click di un pulsate il richiamo alla funziona Cambia...

 ha scritto nel messaggio
news:H0Exb.10151$i_5....@news.edisontel.com...

...è si quando uno è autodidatta come me puo succedere anche che ci sia
quoting
Comunque non sono riuscito a capire come richiamare il modulo all'apertura
del FE,scusate!


sull'evento Click di un pulsante che vuoi tu metti il nome della sub che hai inserito nel modulo
generale.
tutto qua :-)