Da Excel a Access

mercoledì 10 giugno 2015 - 16.13

jekisi Profilo | Senior Member

Salve a tutto il forum, avrei il seguente problema:

Dovrei trasferire dei dati di un file excel in una tabella di access.

Guardando in giro su internet ho provato a fare:

Public Class Form1
Public ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Da excel a access\prova.mdb;Persist Security Info=false;"
Public Cn As New OleDb.OleDbConnection(ConnString)
Public dr As OleDb.OleDbDataReader
Public cmd As OleDb.OleDbCommand
Public sql As String


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Cn.Open()
sql = "INSERT INTO table1 SELECT * FROM [Excel 8.0;Database=C:\Da excel a access\prova.xls].[table1]"

cmd = New OleDb.OleDbCommand(sql, Cn)
dr = cmd.ExecuteReader
Cn.Close()
End Sub


Dove table1 e il nome della tabella, ma mi da errore.

Allego il file zippato

1024x768 288Kb


Qualcuno può darmi una dritta?

Distinti Saluti

Fabio Messina

ysdemarc Profilo | Expert

Il problema non è il nome della tabella access ma del foglio excel, in quello che hai allegato si chiama Sheet1 ma andando a leggere i fogli presenti ne vede 1 di nome Sheet1$

se quindi trasformi la stringa sql in

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Non ti da più l'errore e continua, ma si ferma ad un altro errore : "L'istruzione INSERT INTO contiene il seguente nome di campo sconosciuto: 'Prova'."

Questo perchè credo che per default la prima linea excel la considera come nome di colonna e quindi o metti pure i nomi di colonna oppure inserisci HDR=NO nella stringa della connessione excel.

quindi:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Inoltre continuerà sempre a darti errore perchè hai definito un campo contatore che in excel non c'è e anche se ci fosse non potresti sovrascriverlo.

Ed inoltre in excel se le colonne nojn ci sono assume come nome colonne F1, F2 ecc...

L'unico modo per far funzionare quello che ti proponi di fare è oltre che a cambiare quello che ti ho sopra detto devi eliminare il campo ID da access e rinominare i nomi di colonna in F1, F2 ed F3 altrimenti prova nella SELECT dei excel a usare degli alias per i campi come una normale query ma non so se funzionerà, del tipo

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Detto questo ti sconsiglio vivamente una INSERT brutale da excel a access, nei file excel può esserci di tutto e di più e non hai controllo.
Ma queste sono strategie di sviluppo che tu solo puoi conoscere.

ciao
Vincenzo
Programmatore sbilenco
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