Newsgroup: it.comp.appl.access
Titolo: estrpolarevdyrectory backend

Buona Notte a tutto il Ng
chiedo lumi:
Avevo pensato di estrapolare la directory del backend usando una
routine del tipo
Public Function CurrentDBFolder() As String
   Dim strPath As String
        strPath = CurrentDb.name
    Do While Right$(strPath, 1) <> "\"
        strPath = Left$(strPath, Len(strPath) - 1)
    Loop
    CurrentDBFolder = strPath
End Function
ma ciò mi restituisce la dyrectory del frontend che a me non serve,
potete aiutarmi a capire come poter estrapolare invece la dyrectory del
backend per poi farmela restituire in una casella di testo?
Grazie
Salui
Diego

 ha scritto nel messaggio 
news:1162428943....@h54g2000cwb.googlegroups.com...
Buona Notte a tutto il Ng
chiedo lumi:
Avevo pensato di estrapolare la directory del backend usando una
routine del tipo
Public Function CurrentDBFolder() As String
   Dim strPath As String
        strPath = CurrentDb.name
    Do While Right$(strPath, 1) <> "\"
        strPath = Left$(strPath, Len(strPath) - 1)
    Loop
    CurrentDBFolder = strPath
End Function
ma ciň mi restituisce la dyrectory del frontend che a me non serve,
potete aiutarmi a capire come poter estrapolare invece la dyrectory del
backend per poi farmela restituire in una casella di testo?
_________________________
Prova un pň sto SQL :
SELECT MSysObjects.Database AS Percorso FROM MSysObjects WHERE 
(((MSysObjects.Database) Is Not Null));
Magari il recordset lo leggi da questa... ;-)
Fammi sapere.
-- 
-- 
Ciao
Pablitomf (Maurizio Facciuti)
-----------------------------------------------------------------
Access: 97, 2000, XP e 2003
ASP
-----------------------------------------------------------------
http://www.accessgroup.it/
-----------------------------------------------------------------
Il mio motto :
""Non mi fido molto delle statistiche, perchč un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media."

 Diego
Cio,
Max

where MSysObjects.Type=6
Forse meglio cosě, che ne dici?
SELECT Trim([Database]) AS DB, MSysObjects.Type FROM MSysObjects GROUP BY 
Trim([Database]), MSysObjects.Type HAVING (((MSysObjects.Type)=6));
Non dimenticare... parliamo di Access! :-D


 ha scritto nel messaggio 
news:1162428943....@h54g2000cwb.googlegroups.com...

chiedo lumi:



Grazie
Salui
Diego
---------------------Risposta---------------------
Le soluzioni proposte dagli ottimi Maurizio e Massimo sono quelle più 
immediate ma funzionano solo se il BE si trova nella stessa cartella del FE.
Qualora ciò non sia vero potresti elaborare la proprietà connect della 
tabella allegata.
Per esempio:
Function DimmiPathBE() As String
    Dim dbs As Database
    Dim intContatore As Integer
    Dim tdf As TableDef
    Dim PathBE As String
    Set dbs = CurrentDb()
    For intContatore = 0 To dbs.TableDefs.Count - 1
        Set tdf = dbs.TableDefs(intContatore)
        If Len(tdf.Connect) > 0 Then
            PathBE = tdf.Connect
            DimmiPathBE = Mid(PathBE, InStr(1, PathBE, "=") + 1, 
Len(PathBE))
            Dim i As Integer
                For i = Len(DimmiPathBE) To 1 Step -1
                    If Mid(DimmiPathBE, i, 1) = "\" Then
                    DimmiPathBE = Mid(DimmiPathBE, 1, i - 1)
                    Exit For
                    End If
                Next i
            Exit Function
        End If
           Next intContatore
End Function
Le cose si complicano un pochino se i BE allegati sono più di uno e se 
questi risiedono in tabelle differenti.
In questo caso potrebbe esserti utile creare una tabella di appoggio nella 
quale accodare tutti i percorsi dei BE. Questo si può fare con una piccola 
modifica al codice proposto.
Ciao, Carlo

Come da segnalazione di pablito... correggo
SELECT Trim([Database]) AS DB FROM MSysObjects where MSysObjects.Type=6  GROUP BY Trim([Database]) 

 immediate ma funzionano solo se il BE si trova nella stessa cartella del FE.
Carlo ne sei certo?  A me da correttamente qualsiasi percorso locale o 
remoto
-- 
ac
email: w+1=x


Sě č vero e uso anche io questa strada. Chissa cosa ho capito!
Anzi ti propongo la stringa SQL che uso prevedendo anche il valore 4:
SELECT DISTINCTROW MSysObjects.Name, IIf([Type]=6,"Tabella 
Collegata",IIf([Type]=4,"Tabella ODBC","Tabella Locale")) AS TableType, 
MSysObjects.Type, MSysObjects.Database
FROM MSysObjects
WHERE (((MSysObjects.Name) Not Like 'MSys*') AND ((MSysObjects.Type)=6 Or 
(MSysObjects.Type)=4))
ORDER BY MSysObjects.Name;
Comunque Diego deve scrivere un pochino di codice per estrare solo la 
cartella.
Ciao, Carlo 

 FE.
N'č vero!!!!!!! :-D
Funziona per tutto... anche per connessioni remote. ;-)



Sě, sě ho capito male...io stesso uso sempre o quasi questa strada.
Ciao, Carlo 

 Ciao, Carlo
Ciao,
Max

 cartella.
Ma dai ;<)
se a>97
aFold = split(db,"\")
myPath= replace(db,"\" & ubound(aFold),"")
"so du" righette ;<)
-- 
ac
email: w+1=x

 Beh... questo poi lo deve fare lui, mica gli possiamo far trovare tutta la pappa pronta...
Va bene mi dovrei scudisciare. Ma se mai lo "dovrebbi" fare non non 
accetterei mai il sale sulle ferite. Condizionerebbe troppo il mio stato 
di salute. Quello mentale e' gia' compromesso da tempo!
-- 
ac
email: w+1=x

 stato di salute. Quello mentale e' gia' compromesso da tempo!
Anche tu bisognoso di ferie vedo ;-)
Ciao,
Max

Ragazzi non ho Parole.
grazie di cuore davvero....
Comunque era importante per me sapere la patch anche se il BE fosse
stato in un pc diverso da dove è alloggiato il FE, anzi per essere
precisi era necessario solo sapere il percorso della singola cartella
tralasciando il nome del db.
Le soluzioni che mi avete proposto quindi sono più di quanto in
effetti mi necessitava e di questo
ve ne sono immensamente grato.
Spero un giorno di poter ricambiare se DOVESSIVO avere bisogno di una
mano.
Saluti
Diego

Dimenticavo...Uso Access 2003
Saluti
Diego

 Ciao, Carlo
Scusa Carlo ma nel modulo che dichiarazioni devo fare?
Io scrivo:
public function DammiPercorso()
Dim Db as Database
Dim Percorso as String
Set Db = CurrentDb
Percorso=  SELECT DISTINCTROW MSysObjects.Name, IIf([Type]=6,"Tabella
  Collegata",IIf([Type]=4,"Tabella ODBC","Tabella Locale")) AS
TableType,
  MSysObjects.Type, MSysObjects.Database
  FROM MSysObjects
  WHERE (((MSysObjects.Name) Not Like 'MSys*') AND
((MSysObjects.Type)=6 Or
  (MSysObjects.Type)=4))
  ORDER BY MSysObjects.Name;
ma cosa devo sostituire al posto di "Tabella Collegata","Tabella
ODBC","Tabella Locale"
e comunque ho provato ad eliminre quelle voci modificando la query in :
Percorso=  SELECT DISTINCTROW MSysObjects.Name,
IIf([Type]=6,IIf([Type]=4)) AS TableType,
  MSysObjects.Type, MSysObjects.Database
  FROM MSysObjects
  WHERE (((MSysObjects.Name) Not Like 'MSys*') AND
((MSysObjects.Type)=6 Or
  (MSysObjects.Type)=4))
  ORDER BY MSysObjects.Name;
e di seguito
DammiPercorso=Percorso
End Function
Poi quando faccio il Debug.Print non mi restituisce nulla.
Dove sbaglio?
La Funzione che mi hi postato prima quella con il Connect
va alla grande e mi restituisce solo ill percorso fino alla cartella
omettendo il nomedel db, ce era quello che volevo, ma mi interesserebbe
capire anche questo metodo che mi sembra interessante, inoltre così
come non riesco a far funzionare la soluzione da te proposta, non
riesco neppure a far funzionare le soluzioni proposte sia da Massimo
che Maurizio, non capisco dove sbaglio e cosa manca come dichiarazione,
inoltre chiedo ad Alessandro;
aFold = split(db,"\")
myPath= replace(db,"\" & ubound(aFold),"")
e per access97
io che ho il 2003 cosa devo modificare? o va bene questa se aggiungo(ma
già c'è) il riferimento DAO 3.6 Object Library?
Grazie di nuovo
Saluti
Diego.

 già c'è) il riferimento DAO 3.6 Object Library?
Urca che bestialita' ho scritto:
myPath= replace(db,"\" & aFold(ubound(aFold)),"")
this is
La libreria DAO non c'entra nulla
Va bene per versioni a > 97 indi anche per la 2003
-- 
ac
email: w+1=x

 Va bene per versioni a > 97 indi anche per la 2003
Grazie Alessandro
Ciao, Diego

 ORDER BY MSysObjects.Name;
ho risolto in parte con le dichiarzioni opportune adesso però mi da il
seguente messaggio d'errore: Numero errato di argomenti usati con la
funzione nell'espressione della query
 'IIf([Type]=6,IIf([Type]= 4 ))'
la cosa strana è che mi evidenzia parte dela query ed mi fa vedere i
due apicetti all'estremità opposte della stringa come se mancasee o ci
fosse qualcosa tipo virgole o punti che non dovrebbero esserci o che
non ci sono.
scusate...ma che vuol dire??
Saluti
Diego

 ha scritto nel messaggio 
news:1162468050....@m7g2000cwm.googlegroups.com...







e di seguito
DammiPercorso=Percorso
End Function

Dove sbaglio?



Grazie di nuovo
Saluti
Diego.
----------------------risposta------------------
Ciao Diego
la strada della funzione va bene così come è e non c'entra nulla con 
l'istruzione sql che è una query.
Per provare l'istruzione SQL fai così: apri una nuova query, nuova query, 
chiudi quando ti propone l'elenco, visualizza sql e qui incolli la stringa 
che ho postato:
SELECT DISTINCTROW MSysObjects.Name, IIf([Type]=6,"Tabella
Collegata",IIf([Type]=4,"Tabella ODBC","Tabella Locale")) AS TableType,
MSysObjects.Type, MSysObjects.Database
FROM MSysObjects
WHERE (((MSysObjects.Name) Not Like 'MSys*') AND ((MSysObjects.Type)=6 Or
(MSysObjects.Type)=4))
ORDER BY MSysObjects.Name;
Ora esegui la query e vedrai l'elenco di tutte le tabelle allegate con il 
relativo percorso.
Questa query è venuta fuori seguendo il discorso del tread e si adatta solo 
in parte alle tue esigenze. Infatti dovresti eliminare in nome del db e 
lasciare solo il percorso della tabella. Per fare questo o usi la funzione a 
se stante o integri la query con i suggerimenti proposti.
Insomma sono due cose diverse.
Per quanto riguarda la funzione questa prevede un riferimento alla libreria 
DAO. Se è presente il riferimento insieme al riferimento alla libreria ADO, 
bisogna modificare la funzione così:
Function DimmiPathBE() As String
    Dim dbs As DAO.Database
    Dim intContatore As Integer
    Dim tdf As DAO.TableDef
    Dim PathBE As String
    Set dbs = CurrentDb()
    For intContatore = 0 To dbs.TableDefs.Count - 1
        Set tdf = dbs.TableDefs(intContatore)
        If Len(tdf.Connect) > 0 Then
            PathBE = tdf.Connect
            DimmiPathBE = Mid(PathBE, InStr(1, PathBE, "=") + 1, 
Len(PathBE))
            Dim i As Integer
                For i = Len(DimmiPathBE) To 1 Step -1
                    If Mid(DimmiPathBE, i, 1) = "\" Then
                    DimmiPathBE = Mid(DimmiPathBE, 1, i - 1)
                    Exit For
                    End If
                Next i
            Exit Function
        End If
           Next intContatore
End Function
Se vuoi usare solo la funzione e se le tabelle allegate sono tutte derivanti 
da un solo db allora, per avere il percorso e scriverlo in un controllo di 
testo, puoi usare questa semplice istruzione per esempio al clic di un 
pulsante: Me.NomeTuoControlloSuMaschera  =  DimmiPathBE
Ciao, Carlo

Carlo Costarella ha scritto:
Grazie Carlo per avermi risposto, il riferimento alla libreia Dao c'e'
ed è DAO 3.6
in quanto all'eseguire la query onestamente non avevo pensato di
eseguirla dall'editor SQL ma di provarla direttamente in un modulo vba,
infatti come ti dicevo prima la funzione che tu gentilmente mi hai reso
disponibile, quella con il connect per intenderci, funziona benissimo,
e faccio restituire il percorso in un controllo textbox cosi' come mi
hai suggerito tu in quest'ultimo post,
Vedi Carlo...magari sarò tacciato come rompiballe, però io credo, e
spero che il mio pensiero sia  condiviso, che uno come me alle prime
armi e con una forte volontà d'imparare debba necessariamente studiare
e chiedere cio' che non riesce a capire con le sole sue forze, io
studio, mi impegno, ma purtroppo non avendo molti mezzi economici per
poter frequentare corsi di formazione che costano un'occhio della testa
e per uno che guadagna da impiegato ed ha anche famiglia è un lusso
che non puo' permettersi, devo arrangiarmi in qualche modo leggendo su
manuali, e chiedendo a chi ne sa piu di me, ecco perche' ho chiesto di
capire di piu' su questa funzione, se il mio unico scopo fosse stato
quello di far funzionare cio' che mi premeva funzionasse mi sarei
limitato a prendere per buono il tuo suggerimento precedente e
stop...ma non e' questo quello che voglio, mi preme capire, le
differenze tra un metodo e l'altro...e sopratutto imparare...e devo
dirti, che grazie a voi sto imparando molto, e di questo ve ne sono
sinceramente grato.
adesso vado a provare il suggerimento che mi hai postato...vedro' di
capirci di piu'
Grazie di nuovo
Saluti
Diego

 ha scritto nel messaggio 
news:1162558586....@k70g2000cwa.googlegroups.com...
Carlo Costarella ha scritto:


Grazie di nuovo
Saluti
Diego
--------------------
Ciao Diego
qui troverai sempre persone disponibili a darti una mano, non solo per 
soluzioni già pronte ma anche per spiegazioni.
Tieni presente che la guida in linea di Access è una fonte inesauribile di 
apprendimento e, appena puoi, ti consiglio di cominciare a pensare 
l'acquisto di un buon testo per principianti.
Complimenti e auguri.
Ciao, Carlo