Newsgroup: it.comp.appl.access
Titolo: Alter table in un'altro mdb esterno

ho scoperto da poco che linkando la libreria DAO 360 è possibile fare una
OpenDatabase di un'altro database access rispetto al correnre
e quindi aprire un recordset di tabella su tabe altro database senza
collegarsi le tabelle
mi chiedo, ma è anche possibile, una volta aperto un'altro database,
indirizzargli dei comandi del tipo
ALTER TABLE (per aggiungere colonne a tabelle ecc..)
ADD CONSTRAINT  ecc.. ?
grazie

 ha scritto nel messaggio
news:gs8Kb.41280$VW.19...@news3.tin.it...

Ciao Luciano, tendenzialmente è più lento come operi.
Non ho mai provato se la Clausola ALTER di JET supporta
completamente il codice SQL ANSI, ma la sintassi per il Select
è questa :
SELECT campo1[, campo2[, ...]] INTO nuovatabella [IN databaseesterno]
FROM origine
dove database esterno è il DB remoto, prova ad usare ALTER TABLE con la
medesima sintassi....!
Tieni però presente che anche via codice puoi aggiungere o modificare campi
sempre usando la Libreria DAO:
Ti allego un esempio è in Tedesco perchè era già fatta e mi era più comodo,
ma la sostanza si capisce, quindi non dovresti fare altro che verificare la
struttura e alla prima apertura
eseguire le modifiche.....!
Ovvio che l'oggetto db è il db remoto.
Sub ReadFileInfos(strTblName As String, strFolderName As String, _
    Optional strDatabaseName As String = "[Current]")
'***************************************************************************
*******
'* Hauptfunktion:
'***************************************************************************
*******
'* Beispiel Aufruf:
'* Eigene MDB
'* Call ReadFileInfos("tblNeuDateinamen", "C:\Eigene Dateien")
'* Andere MDB
'* Call ReadFileInfos("tblNeuDateinamen", "C:\Eigene Dateien",
"C:\Hugo\emil.mdb")
'*
'* Öffnet die ACCESS-Datenbank mit dem in strDatabaseName_
'* übergebenen Namen, bzw. legt diese neu an, wenn nicht vorhanden. _
'* Legt dort eine neue Tabelle mit dem in strTblName übergebenen _
'* Namen an (darf nicht bereits existieren) und speichert darin die _
'* Datei-Informationen des Verzeichnisbaums mit der in strFolderName _
'* übergebenen Wurzel.
'***************************************************************************
*******
' MS Hilfe zu CreateField
'Das folgende Beispiel erstellt eine neue Tabelle mit zwei neuen Feldern,
von
'denen eines ein AutoWert-Feld ist. Die Prozedur richtet dieses Feld als
'Primärschlüssel in der Tabelle ein.
'
'Sub NeuesFeld()
'    Dim dbs As Database
'    Dim tdf As TableDef, fld1 As Field, fld2 As Field
'    Dim idx As Index, fldIndex As Field
'
'    ' Verweis auf aktuelle Datenbank holen.
'    Set dbs = CurrentDb
'    ' Erstellen einer neuen Tabelle mit zwei Feldern.
'    Set tdf = dbs.CreateTableDef("Kontakte")
'    Set fld1 = tdf.CreateField("KontaktID", dbLong)
'    fld1.Attributes = fld1.Attributes + dbAutoIncrField
'    Set fld2 = tdf.CreateField("Kontaktperson", dbText, 50)
'
'' Felder anfügen.
'    tdf.Fields.Append fld1
'    tdf.Fields.Append fld2
'    ' Primärschlüsselindex erstellen.
'    Set idx = tdf.CreateIndex("Primärschlüssel")
'    Set fldIndex = idx.CreateField("KontaktID", dbLong)
'    ' Index-Felder anfügen.
'    idx.Fields.Append fldIndex
'    ' Eigenschaft "Primary" einstellen.
'    idx.Primary = True
'    ' Index anfügen.
'    tdf.Indexes.Append idx
'    ' TableDef-Objekt anfügen.
'    dbs.TableDefs.Append tdf
'    dbs.TableDefs.Refresh
'    Set dbs = Nothing
'
'End Sub
Dim db As Database
Dim rs As Recordset
Dim td As TableDef
Dim fld As Field
Dim idx As Index, fldIndex As Field
Dim fFormat As Property
DoCmd.Hourglass True
giMainFolderStrLen = Len(strFolderName)
'* Das if [Current] habe ich eingefügt, um die Tabelle
'* ggf. in der laufenden DB einfügen zu können
If strDatabaseName = "[Current]" Then   ' Verwende CurrentDb
    Set db = CurrentDb
Else
    If Dir(strDatabaseName) = "" Then ' Datenbank existiert nicht
        Set db = DBEngine.CreateDatabase(strDatabaseName, dbLangGeneral)
    Else    ' Datenbank existiert
        Set db = DBEngine.OpenDatabase(strDatabaseName)
    End If
End If
On Error Resume Next
db.TableDefs.DELETE strTblName
On Error GoTo 0
Set td = db.CreateTableDef(strTblName)
' Felder hinzufügen.
Set fld = td.CreateField("IDNum", dbLong)
fld.Attributes = fld.Attributes + dbAutoIncrField
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Autowert Primary
Key für Tabelle")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Ordner", dbText, 255)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Pfad des
Bildnamens")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Dateiname", dbText, 255)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Dateiname des
Bildes")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Version", dbText, 50)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Versionsnummer
der Datei")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Datum", dbDate)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Datum der letzten
Änderung der Datei")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Länge", dbDouble)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Dateigröße in
Bytes")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Beschreibung", dbText, 255)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Ihre Beschreibung
des Bildes (255 Zeichen)")
'fld.Properties.Append fFormat
Set fld = td.CreateField("Anzahl", dbInteger)
td.Fields.Append fld
'Set fFormat = fld.CreateProperty("Description", DB_TEXT, "Ihre Anzahl der
Bildbestellungen")
'fld.Properties.Append fFormat
'    ' Primärschlüsselindex erstellen.
    Set idx = td.CreateIndex("Primärschlüssel")
    Set fldIndex = idx.CreateField("IDNum", dbLong)
'    ' Index-Felder anfügen.
    idx.Fields.Append fldIndex
'    ' Eigenschaft "Primary" einstellen.
    idx.Primary = True
'    ' Index anfügen.
    td.Indexes.Append idx
'    ' TableDef-Objekt anfügen.
' TableDef-Definition durch Anfügen an TableDefs-Auflistung speichern.
    db.TableDefs.Append td
    db.TableDefs.Refresh
Set rs = db.OpenRecordset(strTblName)
ReadFolderInfo rs, strFolderName & "\"
rs.close
'* Von mir eingefügt, um die aktuelle DB nicht zu schließen
If strDatabaseName <> "[Current]" Then
    db.close
Else
    Set db = Nothing
End If
DoCmd.Hourglass False
End Sub
Ciao.
@Alex.

Luciano996 ha scritto:

Dim db As DAO.Database
Set db = OpenDatabase("c:\percorso\altroDB")
db.Execute "ALTER TABLE..."
...
db.Close
Set db = Nothing
-- 
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com

brutta bestia l'esempio che mi hai passato
comunque ti ringrazio
forse la cosa più semplice da provare (mi è venuta in mente solo poi) è
referenziare il dbesterno nella .QueryDefs
anche se così devo avere la query contenente le ALTER nel db esterno, mi
sembra di ricordare comunque che una query posso sempre crearla
al volo con una opzione Temporanea del Query ...qualcosa (non ricordo, ma si
può creare al volo una query e mandarla in eseguzione)

 ha scritto nel messaggio
news:btbg5r$5bekj$1...@ID-46617.news.uni-berlin.de...

così meglio ancora
preferisco variare le tabelle con SQL (anche se la ALTER è un po limitata
come possibilità) piuttosto che entrare nel merito dell eproprietà
dell'oggetto
grazie