IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Access
  New Posts New Posts RSS Feed - Problemi con DoCmd.Tranfertdatabase
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

 Topic   Topic Hot   Topic New   Topic Locked   Topic Sticky   Topic Hidden

Problemi con DoCmd.Tranfertdatabase

 Post Reply Post Reply
Author
Message Reverse Sort Order
Luciano View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 05/Giu/2010
Location: Italy
Status: Offline
Points: 1972
Post Options Post Options   Thanks (0) Thanks(0)   Quote Luciano Quote  Post ReplyReply Direct Link To This Post Topic: Problemi con DoCmd.Tranfertdatabase
    Posted: 02/Lug/2012 at 09:17
grazie Alex per le puntualizzazioni che arrichiscono sempre!
 
Potrei inviare la piccola demo, ma si tratta sempre di mdb e non so se sarà esplicativa e utile.
Ciao
Dio è Amore e Pace
Catalogo funzioni
Back to Top
@Alex View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 09/Apr/2012
Location: Mantova
Status: Offline
Points: 821
Post Options Post Options   Thanks (0) Thanks(0)   Quote @Alex Quote  Post ReplyReply Direct Link To This Post Posted: 02/Lug/2012 at 09:08
A mio parere, il codice che ha generato le prime anomalie segnalate non coinvolge Riferimenti a Librerie in quanto si trattava di API.

Ricordo peraltro che le LIB Indispensabili solo poche:
1° Visual Basic For Application
2° Microsoft Access xx.x Object Library

Solo poi si richiede DAO o ADO a seconda, ben sapendo che il DefaultType di Access è DAO, che tuttavia non sono indispensabili se non si aprono RS o non si accede ad Oggetti specifici delle LIB.

Tuttavia l'utente non ha esposto l'anomalia in modo che sia possibile comprenderne la problematica...
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/
Scaricare i DEMO modificando l'Estensione.
Back to Top
Luciano View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 05/Giu/2010
Location: Italy
Status: Offline
Points: 1972
Post Options Post Options   Thanks (0) Thanks(0)   Quote Luciano Quote  Post ReplyReply Direct Link To This Post Posted: 02/Lug/2012 at 08:33
Non ho Access 2007 o 2010.
Io importo una tabella da un file mdb.
Uso queste librerie:
visual basic for Application
microsoft access 10.0 object library
ole automation
microsoft activex data object library
------------
Come dice Bob occorre settare le librerie equivalenti
 
ciao
Dio è Amore e Pace
Catalogo funzioni
Back to Top
bob3m View Drop Down
Utente Senior
Utente Senior
Avatar

Joined: 30/Set/2011
Location: Gorizia
Status: Offline
Points: 434
Post Options Post Options   Thanks (0) Thanks(0)   Quote bob3m Quote  Post ReplyReply Direct Link To This Post Posted: 30/Giu/2012 at 18:33
Ciao goodfly65,
 
Originally posted by goodfly65 goodfly65 wrote:


Ho fatto quanto detto da Luciano per il file dialog ma sbaglio sicuramente qualcosa in quanto quando vado a cliccare sul pulsante mi restituisce un errore nel debug "argomemento non valido" evidenziando la riga di comando del pulsante:
Probabilmente ti mancano i riferimenti, prova a controllare questi sono spuntati:

Visual Basic for Application, Microsoft Access 11.0 Object Library, Microsoft DAO 3.6 Object Library,Microsoft ActiveX Data Objects 2.1 Library, OLE Automation.

Ciao
Massimo


Edited by bob3m - 30/Giu/2012 at 18:34
Back to Top
goodfly65 View Drop Down
Utente Base
Utente Base


Joined: 27/Feb/2012
Status: Offline
Points: 71
Post Options Post Options   Thanks (0) Thanks(0)   Quote goodfly65 Quote  Post ReplyReply Direct Link To This Post Posted: 30/Giu/2012 at 10:09
Grazie ad entrambi !!!

Ora sono in questa situazione: ho utilizzato la soluzione postata da Alex per quanto riguarda l'importazione e cancellazione della vecchia tabella e funziona ;)

Ho fatto quanto detto da Luciano per il file dialog ma sbaglio sicuramente qualcosa in quanto quando vado a cliccare sul pulsante mi restituisce un errore nel debug "argomemento non valido" evidenziando la riga di comando del pulsante:
Private Sub Comando0_Click()
DoCmd.TransferDatabase acImport, "Microsoft Access", Nomefile, acTable, "iscritti", _
    "iscritti"

.. e lì sono arenato !!!
Ho visto ora il suggerimento di Alex e proverò anche questo ma volevo sapere (quando hai un attimo) da Luciano se ha una mezza idea di dove mi sono incasinato.

GRAZIE ancora !!!

Ruggero
Back to Top
@Alex View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 09/Apr/2012
Location: Mantova
Status: Offline
Points: 821
Post Options Post Options   Thanks (0) Thanks(0)   Quote @Alex Quote  Post ReplyReply Direct Link To This Post Posted: 29/Giu/2012 at 13:07
Aggiungendo i riferimenti alle LIB OFFICE senza API possiamo accedere all'oggetto FILEDIALOG:
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(FileDialogType:=msoFileDialogOpen)
With dlgOpen
  .AllowMultiSelect = True
  .Show
End With

ecc...


Vedete dettagli nell'utilizzo quì:http://support.microsoft.com/kb/288543/it


Edited by @Alex - 29/Giu/2012 at 13:08
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/
Scaricare i DEMO modificando l'Estensione.
Back to Top
Luciano View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 05/Giu/2010
Location: Italy
Status: Offline
Points: 1972
Post Options Post Options   Thanks (0) Thanks(0)   Quote Luciano Quote  Post ReplyReply Direct Link To This Post Posted: 29/Giu/2012 at 10:05

Per il secondo quesito in un modulo incolli questo codice:

Option Compare Database
Option Explicit
Private Declare Function GetOpenFileName Lib "comdlg32.dll" _
            Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
   lStructSize As Long
   hwndOwner As Long
   hInstance As Long
   lpstrFilter As String
   lpstrCustomFilter As String
   nMaxCustFilter As Long
   nFilterIndex As Long
   lpstrFile As String
   nMaxFile As Long
   lpstrFileTitle As String
   nMaxFileTitle As Long
   lpstrInitialDir As String
   lpstrTitle As String
   flags As Long
   nFileOffset As Integer
   nFileExtension As Integer
   lpstrDefExt As String
   lCustData As Long
   lpfnHook As Long
   lpTemplateName As String
End Type

Public Function cmdlg_file()

   Dim OpenFile As OPENFILENAME
   Dim lReturn As Long
   Dim sFilter As String
  
   OpenFile.lStructSize = Len(OpenFile)

   sFilter = "Database (*.accdb)" & Chr(0) & "*.accdb" & Chr(0)

   OpenFile.hwndOwner = Application.hWndAccessApp
   OpenFile.lpstrFilter = sFilter
   OpenFile.nFilterIndex = 1
   OpenFile.lpstrFile = String(257, 0)
   OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
   OpenFile.lpstrFileTitle = OpenFile.lpstrFile
   OpenFile.nMaxFileTitle = OpenFile.nMaxFile
   OpenFile.lpstrInitialDir = "C:\Documenti\Immagini"
   OpenFile.lpstrTitle = "Selezione"
   OpenFile.flags = 0
   lReturn = GetOpenFileName(OpenFile)
  
   If lReturn = 0 Then
      cmdlg_file = ""
     
   Else
      cmdlg_file = Left(OpenFile.lpstrFile, InStr(OpenFile.lpstrFile, Chr$(0)) - 1)

   End If
End Function

Nel codice del form incolli questo codice per richiamare la funzione.
Option Compare Database
Dim Nomefile  As String
 
Private Sub Carica()
On Error GoTo Errore
Nomefile = cmdlg_file
Errore:
Exit Sub
End Sub
"Nomefile" è una variabile dichiarata nel modulo di classe quindi è visibile anche al di fuori della routine "carica".
ora puoi sostituirla alla stringa  "c:\2012_prova\iscrizioni gs\bck1503.accdb" il nome della variabile.
 

Private Sub Comando0_Click()
DoCmd.TransferDatabase acImport, "Microsoft Access",  Nomefile, acTable, "iscritti", _
    "iscritti"
 End Sub
Ciao


 
Dio è Amore e Pace
Catalogo funzioni
Back to Top
@Alex View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 09/Apr/2012
Location: Mantova
Status: Offline
Points: 821
Post Options Post Options   Thanks (0) Thanks(0)   Quote @Alex Quote  Post ReplyReply Direct Link To This Post Posted: 28/Giu/2012 at 17:37
Per verificare se una Tabella esiste la cosa più semplice è chiamarla ed intercettare l'errore....!
Se hai un'errore non esiste, se non hai errore significa che ESISTE quindi procedi con il DELETE.
Alternativa è CANCELLARLA a prescindere ed intercettare l'errore... skippandolo(che viene generato se non esiste).

Per conoscenza puoi usare questo codice per verificarne la presenza:
Function TableExists(TableName As String) As Boolean

Dim strTableNameCheck
On Error GoTo ErrorCode

strTableNameCheck = CurrentDb.TableDefs(TableName)

TableExists = True

ExitHere:
    On Error Resume Next
    Exit Function

ErrorCode:
    Select Case Err.Number
        Case 3265  'Item non trovato nella Collection TABLEDEFS
            TableExists = False
            Resume ExitHere
        Case Else
            MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "hlfUtils.TableExists"
            Resume ExitHere
    End Select

End Function

Per cancellarla puoi usare il DeleteObject oppure il Metodo Delete sulla collection TableDefs.

Personalmente userei più volentieri questo

    DBEngine(0)(0).TableDefs.Delete NomeTabella


Il Suggerimento dato da Luciano, essendo un comando DDL, viene eseguito lato BE o SERVER nel caso di LINKED TABLE, quindi ha l'azione di ELIMINARE la tabella REALE e non quella LINKATA...
Nel caso in cui siano da eliminare le LOCAL_TABLE è perfettamente alternativo.


Edited by @Alex - 28/Giu/2012 at 20:39
Non SUPPORTO il CROSSPOST.
http://mirror.masterdrive.it/alessandrobaraldi/
Scaricare i DEMO modificando l'Estensione.
Back to Top
Luciano View Drop Down
Utente Onorario
Utente Onorario
Avatar

Joined: 05/Giu/2010
Location: Italy
Status: Offline
Points: 1972
Post Options Post Options   Thanks (0) Thanks(0)   Quote Luciano Quote  Post ReplyReply Direct Link To This Post Posted: 28/Giu/2012 at 15:52
DoCmd.RunSQL "Drop table iscritti"
 
 
 
ciao
Dio è Amore e Pace
Catalogo funzioni
Back to Top
goodfly65 View Drop Down
Utente Base
Utente Base


Joined: 27/Feb/2012
Status: Offline
Points: 71
Post Options Post Options   Thanks (0) Thanks(0)   Quote goodfly65 Quote  Post ReplyReply Direct Link To This Post Posted: 28/Giu/2012 at 12:19
Ciao a tutti,
ho la necessità di importare i dati di una tabella da un database ad un altro e per risolvere ho creato un pulsante al quale ho assoviato la seguente routine:

Private Sub Comando0_Click()
DoCmd.TransferDatabase acImport, "Microsoft Access", _
    "c:\2012_prova\iscrizioni gs\bck1503.accdb", acTable, "iscritti", _
    "iscritti"
 End Sub

Funzia ma ... c'è un però: nel database nel quale importo i dati esiste già una tabella che si chiama iscritti e quando eseguo l'importazione la tabella importata viene rinominata "iscritti 1".
A me invece serve che il nome rimanga "iscritti".

C'è la possibilità di cancellare la tabella esistente al momenti dell'importazione di quella "nuova"?

E poi (ma qui andiamo un pò più sul complicato mi sa): posso al click del pulsante far apparire un "file browser" per scegliere il percorso e da quale database importare i dati evitando così di adare un percorso d'importzione predefinito?

Grazie a tutti in anticipo per l'attenzione.

Ruggero
Back to Top
 Post Reply Post Reply
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.11
Copyright ©2001-2012 Web Wiz Ltd.

This page was generated in 0,156 seconds.