Newsgroup: it.comp.appl.access
Titolo: Creazione Indice in un tabella collegata tramite frontend mde

Ciao a tutti,
come si fa a creare\impostare (in modo definitivo) tramite il frontend in
formato mde un indice ad un campo in una tabella collegata ?
Ho l'esigenza di apportare modifiche algli indici di una tabella collegata e
di aggiungere un indice a questa in modo permanente.
Ho guardato sul sito comune, nel NG, nell'help, in MSDN ma non ho trovato
nulla di soddisfaccente.
Grazie.
Con simpatia.
Marco

 ha scritto nel messaggio
news:YcVA9.31536$Zn2.8...@twister1.libero.it...

Se la tabella si chiama Pippo.
Se il nuovo indice lo vuoi chiamare Pluto.
Se il campo su cui vuoi creare il nuovo indice si chiama Paperino ed č di
tipo Testo.
Usa il metodo CreateIndex (vedi help).
Prova cosě:
Dim Db As Database
Dim Tab As TableDef
Dim idxNuovo As Index
Set Db = CurrentDb
Set Tab = Db.TsbleDefs!Pippo
Set idxNuovo = Tab.CreateIndex("Pluto")
idxNuovo.Fields.Append idxNuovo.CreateField("Paperino", dbText)
'******************
' Se l'ndice deve essere univoco inserisci anche questa riga
idxNuovo.Unique = True
'******************
Tab.Indexes.Append idxNuovo
Tab.Indexes.Refresh
Set idxNuovo = Nothing
Set Tab = Nothing
Set Db = Notihing
La routine fa uso delle librerie Microsoft DAO, quindi se usi una versione
di Access successiva ad Access 97 aggiugi al tuo database i riferimenti a
tale libreria; fai in maniera che il riferimento a tale libreria preceda,
nella lista dei riferimenti, l'eventuale riferimanto alla libreria Microsoft
ADO.
Se non vado errato l'istruzione CREATE INDEX (vedi help) per una tabella
collegata non puoi usarla.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


Scuasami, ma vista anche l'ora o scritto qualche cavolata di troppo nella
routine che ho postato nel precedente messaggio.
Se il database che contiene la tabella per la quale vuoi creare il nuovo
indice si chiama Minnie.mdb ed č contenuto nella cartella Clarabella del
disco C.
Fermi restando gli altri presupposti del messaggio precedente, prova con
questo codice VBA:
Dim Db As Database
Dim Tab1 As TableDef
Dim idxNuovo As Index
Set Db = OpenDatabase("C:\Clarabella\Minnie.mdb")
Set Tab1 = Db.TableDefs!Pippo
Set idxNuovo = Tab1.CreateIndex("Pluto")
idxNuovo.Fields.Append idxNuovo.CreateField _
("Paperino", dbText)
'******************
' Se l'ndice deve essere univoco inserisci anche questa riga
idxNuovo.Unique = True
'******************
Tab1.Indexes.Append idxNuovo
Tab1.Indexes.Refresh
Set idxNuovo = Nothing
Set Tab1 = Nothing
Set Db = Nothing
Spero che cosě funzioni


CUT
Roberto da casa ha scritto

Grazie Roberto,
le tue risposte sono sempre molto gradite,
se hai tempo e voglia di dare un'occhiata io hao fatto cosě per scoprire
alla fine
che l'operazione non č supportata dall'oggetto /come dicevi tu , non si puo'
fare su tabelle collegate).
*******inizio ************
Private Sub Form_Current()
Dim Db As Database
Dim Tab1 As TableDef
Dim idxNuovo As Index
Dim percorso As String
Dim i As Long
Set Db = CurrentDb
percorso = PathCorrente + "\data.mdb"
With Db
'**qui volevo fare in modo di collegare la tabella impianto termico ma non
sapendo le ho collegate tutte '**credo !!!
For i = 0 To .TableDefs.Count - 1
If .TableDefs(i).Connect <> "" Then
.TableDefs(i).Connect = ";DATABASE=" & percorso & "; pwd=miapassword"
.TableDefs(i).RefreshLink
End If
Next i
End With
'Set Db = OpenDatabase(percorso)
Set Tab1 = Db.TableDefs![impianto termico]
Set idxNuovo = Tab1.CreateIndex("nuovo indice marco")
idxNuovo.Fields.Append idxNuovo.CreateField _
("modello gen cal", dbText)
'******************
' Se l'ndice deve essere univoco inserisci anche questa riga
idxNuovo.Unique = True
'******************
Tab1.Indexes.Append idxNuovo
Tab1.Indexes.Refresh
Set idxNuovo = Nothing
Set Tab1 = Nothing
Set Db = Nothing
End Sub
***********fine**************
Non conosci il modo per fare questo aggiornamento ?
Potrei anche fare un db a parte solo per aggiornare la tabella ma come fare
visto che sarebbe sempre un db che si collega alla tabella per modificarla ?
E se invece (non so come fare) riuscissi ad importare nel frontend la
tabella collegata (impianto termico), potrei settarle gli indici dal
frontend e dopo potrei ritrasferirla nel backend (data.mdb)
Il fatto sta che il Frontend č protetto da password ed č un mde. Il backend
č protetto da password anch'esso.
Se qualcuno avesse delle considerazioni o suggerimenti !!!
Ciao e grazie a tutti.
Marco.
Con simpatia.

 Con simpatia.
Il problema sta sul settaggio del database: non devi scrivere:
Set Db = CurrentDb
facendo quindi riferimento al database corrente e di conseguenza alla
tabella collegata in essa contenuto.
Come ho fatto nell'esempio del mio SECONDO messaggio (quello del primo
messaggio, come ho scritto era errato), devi aprire il database indicando il
suo percorso per intero:
Set Db = OpenDatabase(PercorsoDB)
dove PercorsoDB è una variabile stringa che contiene il path completo del
database che contiene FISICAMENTE la tabella per la quale vuoi creare
l'indice.
Io, nell'esempio del mio secondo messaggio ho scritto:
Set Db = OpenDatabase("C:\Clarabella\Minnie.mdb")
Naturalmente tu indicherai il percorso reale del database che contiene la
tabella che vuoi modificare.
Ti rammento di NON far riferimento all'esempio del mio PRIMO messaggio: è
pieno di strafalcioni; l'esempio del mio SECONDO messaggio funziona: per
precauzione l'ho provato.


Grazie Roberto dell'esempio che risulta molto utile.
Io infatti ho fatto cosě e mi funziona tutto tranne che per la password : mi
viene visualizzato il messaggio  errore di run time 3031 password non
valida.
Ho sbagliato qualcosa ?
Se levo la password dal db mi funziona. Se la rimetto non funziona eppure la
inserisco correttamente ve lo assicuro.
Se mi puoi dare una dritta !!
Grazie
Ciao.
Marco.
********codice********
Private Sub Form_Current()
Dim Db As Database
Dim Tab1 As TableDef
Dim idxNuovo As Index
percorso = PathCorrente + "\db1.mdb"
Set Db = OpenDatabase(percorso, , , ";pwd=test")
Set Tab1 = Db.TableDefs![impianto termico]
Set idxNuovo = Tab1.CreateIndex("prova indice")
idxNuovo.Fields.Append idxNuovo.CreateField _
("modello gen cal", dbText)
'******************
' Se l'ndice deve essere univoco inserisci anche questa riga
idxNuovo.Unique = True
'******************
Tab1.Indexes.Append idxNuovo
Tab1.Indexes.Refresh
Set idxNuovo = Nothing
Set Tab1 = Nothing
Set Db = Nothing
End Sub
********fine**************

 Set Db = OpenDatabase(percorso, , , ";pwd=test")
[CUT]
Vai sul Sito Comune e nella Sezione General leggiti la FAQ di Federico
Luciani intitolata "Aprire, da codice, un mdb protetto da password".
Insomma dovresti provare con:
Set Db = OpenDatabase(percorso, False, False, ";pwd=test")



Sei un mito !!
Ora funziona. L'errore consisteva nel fatto che io facevo
OpenDatabase(percorso, , , ";pwd=test")
Sei grande scusami ancora e grazie.
Con simpatia.
Marco.

 OpenDatabase(percorso, , , ";pwd=test")
in realta', imho, non e' un errore, ma una cacchiata di access!
-- 
Federico
----------------------------------
Rimuovi paperino. per e-mail
----------------------------------
Tutte le richieste che arrivano
in privato, vengono cestinate.
----------------------------------
Sito Comune di it.comp.appl.access
http://www.sitocomune.com
mailto:
webm...@sitocomune.com
----------------------------------