Importazione file CSV in tabella Access

martedì 26 dicembre 2006 - 15.06

Shadow Profilo | Junior Member

Buonasera a tutti.
Chi di voi conosce i files CSV? Sono tipi di file (per me) stranissimi apribili con vari programmi, tra i quali Excel; se li apro con WordPad vedo una serie di tanti elementi separati da virgole disposti in righe e colonne, con Excel invece tanti campi ordinati. Ora, sul mio programmino sviluppato in Access 2003 vorrei creare una funzione che in modo automatico, con un solo clic e senza particolari operazioni e seccature per l'utente possa importare in blocco il contenuto di questo file csv e disporlo all'interno di una tabella. Purtroppo però questo file non viene visto tra i files importabili di Access ed io non so come realizzare questa cosa, potete aiutarmi? Sarebbe piuttosto importante! In anticipo grazie a tutti e nuovamente tanti auguroni.
Shadow

Cteniza Profilo | Guru

Magari un'occhiata al mio blog ti può aiutare
http://community.visual-basic.it/lucianob/archive/2005/02/19/5824.aspx
http://community.visual-basic.it/LucianoB/archive/2006/12/23/18312.aspx

Shadow Profilo | Junior Member

Sei come al solito gentilissimo ed incredibilmente rapido. Purtroppo i tuoi chiarissimi articoli non mi sono però stati di aiuto per questo particolare problema, perché innanzitutto nel mio caso si tratterebbe di importare da CSV (non esportare su tale file) ed in secondo luogo dovrei farlo con un piccolo applicativo in Access (quindi da Visual Basic for Application, o con qualche macro elementare). Se potessi aiutarmi a venirne fuori te ne sarei gratissimo.
Shadow

Cteniza Profilo | Guru

Guarda che se lo esegui da access con il file schema.ini posizionato nella cartella prende correttamente i parametri ed importa o collega il file senza problemi.
Se invece lo vuoi leggere da vb6 per metterlo su un recordset o farci un insert into su access puoi benissimo
istruzioni con DAO e flexgrid (con ado devi solo impostare correttamente la stringa di connessione)
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.Form Form1
BorderStyle = 3 'Fixed Dialog
Caption = "Prova Db TextFile con Dao"
ClientHeight = 3732
ClientLeft = 36
ClientTop = 420
ClientWidth = 6744
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 3732
ScaleWidth = 6744
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 2292
Left = 120
TabIndex = 3
Top = 720
Width = 6492
_ExtentX = 11451
_ExtentY = 4043
_Version = 393216
End
Begin VB.TextBox Text1
Height = 288
Left = 1320
TabIndex = 1
Top = 240
Width = 5292
End
Begin VB.CommandButton Command1
Caption = "Esegui"
Height = 372
Left = 5760
TabIndex = 0
Top = 3240
Width = 852
End
Begin VB.Label Label1
Caption = "File:"
Height = 252
Left = 120
TabIndex = 2
Top = 240
Width = 852
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim db As Database
Dim rs As Recordset
Private Sub Command1_Click()
Dim sPath As String
Dim sFile As String
Dim k As Integer, j As Integer
Dim s As String
sFile = Text1
j = 1
Do
k = InStr(j, sFile, "\", vbTextCompare)
If k <= 0 Then Exit Do
j = k + 1
Loop
j = j - 1
If j <= 1 Then
MsgBox "file errato"
Exit Sub
End If
sPath = Left(Text1, j)
sFile = "[" + Mid(Text1, j + 1) + "]"
OpenTextFile sPath, sFile
With MSFlexGrid1
.Clear
.Cols = rs.Fields.Count + 1
.Rows = rs.RecordCount + 1
For j = 0 To rs.Fields.Count - 1
.TextMatrix(0, j + 1) = rs.Fields(j).Name
Next
k = 0
Do While Not rs.EOF
k = k + 1
.Rows = k + 1
For j = 0 To rs.Fields.Count - 1
.TextMatrix(k, j + 1) = CStr(rs.Fields(j))
Next
rs.MoveNext
Loop
rs.Close
End With
End Sub
Sub OpenTextFile(sPath As String, sFile As String)
Set db = OpenDatabase(sPath, False, False, "Text;")
Set rs = db.OpenRecordset("select * from " + sFile)
End Sub

Shadow Profilo | Junior Member

Caro Cteniza,
ti spiego come sono riuscito a risolvere in parte il problema. Ho creato una semplice tabella collegata nel mio database mdb che prende i dati dal file csv (al momento di inserire la domanda non ci ero riuscito in quanto non so perché Access non 'vedeva' questo tipo di file). Ora vorrei fare in modo che l'utente con una finestra tipo 'sfoglia cartelle' possa dire al programma dove si trova il file dal quale prendere i dati; so usare le finestre di dialogo, l'unica cosa che ti chiedo per concludere il quesito è qual'è il comando per impostare l'origine di una tabella collegata ad un file esterno, ovvero c'è un comando tipo:

tabellacollegata.origine = "c:\......\fileExcelSorgente.xls" ?

Grazie!
Shadow

Cteniza Profilo | Guru

Mettendo un riferimento ad adox da vb6
http://community.visual-basic.it/lucianob/archive/2006/06/06/17250.aspx
Credo che il codice per vb.net sia uguale

Shadow Profilo | Junior Member

Grazie,
ma copiando quel codice nel mio modulo VBA in Access leggo una serie di messaggi di errore su tipi di dati non riconosciuti. A questo punto è evidente che il problema è eccessivo per VBA, semplifichiamo il tutto ulteriormente. Anziché far collegare l'origine della tabella collegata al file csv, farò in modo che il file csv venga copiato nella destinazione voluta. Quindi, quesito più semplice per risolvere il problema: qual'è il comando in VBA (non VB 6) che consente di copiare un file da una destinazione ad un'altra? E quale comando consente poi di eliminarlo?
Shadow
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5