Newsgroup: it.comp.lang.visual-basic
Titolo: Importare dati da un file DB3 (.dbf) in una tabella access (.mdb)

E' possibile fare una procedura che mi accodi i dati da un file DB3 (.dbf)
in una tabella del file .MDB ???
Aiutatemi !!
P.S.: Lo so che si può fare con Access, ma io vorrei utilizzare una
procedura interna al mio pgm.
Denis
--
Solo risposte sul news

procedura interna al mio pgm.
un modo "terra-terra" potrebbe essere:
Dim dbDBF As Database,dbAccess as Database
Dim rsDBF As RecordSet, rsAccess as RecordSet
Dim i as Long
Set dbDBF = DBEngine.Workspaces(0).OpenDatabase("c:\mydbf", False, False,
"dBase IV;")
Set dbAccess = DBEngine.Workspaces(0).OpenDatabase("c:\myaccess.mdb", False,
False)
Set rsDBF = dbDBF.OpenRecordSet("select * from tabella", dbOpenForwardOnly)
Set rsAccess = dbAccess.OpenRecordSet("select * from tabella", dbOpenDynaset,
dbAppendOnly)
Do While Not rsDBF.EOF
    rsAccess.AddNew
    For i=0 to rsAccess.Fields.Count
        rsAccess.Fields(i)=rsDBF.Fields(i)
    Next
    rsAccess.Update
    rsDBF.MoveNext
Loop
rsDBF.Close
rsAccess.Close
In realta' non e' un sistema molto efficiente, visto che crea comunque il
RecordSet della tabella Access , cosa che potresti evitare; per ovviare puoi
costruirti, all'interno del Loop, il comando SQL di tipo "INSERT INTO ..." e
usarlo con il metodo dbAccess.Execute, vedi tu....
Ciao.
--
Luca Dormio
l...@sig-la.com
ldo...@tin.it

Ciao,
il concetto è semplice e veloce.
Ti apri contemporaneamente il db di Db3 e il db Access, con i relativi
recordset.
Poi non devi far altro che girarti tutti i record (ad. esempio con for
each...in...) del db Db3 e li copi uno per uno nel db Access.
Ho una routine che fa ciò se vuoi te la posto.
Bye
May
---------------------------------------------------------
MaySist...@lycosmail.com
Togliere MAYBE
ICQ_UIN: 27234690
---------------------------------------------------------

Aggiudicato; la aspetto con ansia.

Puoi farmi un esempio pių chiaro ???

Puoi farmi un esempio più chiaro ???
Se intendi con l'uso dei 2 RecordSet penso che piu' chiaro di cosi' non possa
essere; cambia il percorso dei 2 database e delle 2 tabelle con i nomi giusti e
dovrebbe funzionare gia'.
Per il metodo 1 RecordSet+Comando SQL le modifiche sono poche:
Dim dbDBF As Database, dbAccess As Database
Dim rsDBF As Recordset, fldDBF As Field
Dim SQLCmd As String
Set dbDBF = DBEngine.Workspaces(0).OpenDatabase("c:\mydbf", False, False, "dBase
IV;")
Set dbAccess = DBEngine.Workspaces(0).OpenDatabase("c:\myaccess.mdb", False,
False)
Set rsDBF = dbDBF.OpenRecordset("select * from tabella", dbOpenForwardOnly)
Do While Not rsDBF.EOF
    SQLCmd = "INSERT INTO tabella VALUES ("
    'Impostiamo i delimitatori corretti per il tipo di dato
    For Each fldDBF In rsDBF.Fields
        Select Case fldDBF.Type
        Case dbChar, dbText
            SQLCmd = SQLCmd & "'" & fldDBF.Value & "',"
        Case dbDate, dbTime
            SQLCmd = SQLCmd & "#" & fldDBF.Value & "#,"
        Case Else
            SQLCmd = SQLCmd & fldDBF.Value & ","
        End Select
    Next
    'Sostituiamo l'ultima virgola con una parentesi
    'per chiudere quella aperta all'inizio
    Mid$(SQLCmd, Len(SQLCmd), 1) = ")"
    dbAccess.Execute SQLCmd
    rsDBF.MoveNext
Loop
rsDBF.Close
