236 messaggi dal 20 febbraio 2007
Ciao a tutti,
io ho questo problema:
devo esportare un query semplicissima (select ... from ... where ...) da una tabella di un db sql ad un file excel.
Io sto lavorando su una applicazione scritta in VBnet, ho provato con il metodo della creazione del QueryTable ma mi da un po di errori da cui non riesco a tirarmi fuori.
Voi sapete aiutarmi, magari in un altro modo più semplice?
Ho un grosso bisogno di questa cosa.

Grazie in anticipo.

Silver's
438 messaggi dal 04 agosto 2002
Contributi
ciao,

perchè non utilizzi direttamente da Excel:
menu' dati -> importa dati esterni -> nuova query su database

Da li ti crea una connessione al db, scrivi la query e i dati vengono restituiti a excel.

E' sicuramente la soluzione piu' semplice e a zero programmazione.

vladi
236 messaggi dal 20 febbraio 2007
vladimiro ha scritto:
ciao,

perchè non utilizzi direttamente da Excel:
menu' dati -> importa dati esterni -> nuova query su database

Da li ti crea una connessione al db, scrivi la query e i dati vengono restituiti a excel.

E' sicuramente la soluzione piu' semplice e a zero programmazione.

vladi


Il problema è che questa file excel deve essere riempito dopo aver cliccato su un pulsante di un'applicazione fatta in VBnet.
236 messaggi dal 20 febbraio 2007
Nessuno ragazzi sa darmi una mano?
438 messaggi dal 04 agosto 2002
Contributi
Silver's ha scritto:
Il problema è che questa file excel deve essere riempito dopo aver cliccato su un pulsante di un'applicazione fatta in VBnet.


ehh, intuivo che mi sfuggiva qualcosa di decisivo
Per leggere e scrivere su excel puoi utilizzare tranquillamente ado.net.
Vedi un po' quì: http://support.microsoft.com/kb/316934
Se hai già provato incontrando qualche problema particolare, facci sapere.

vladi
236 messaggi dal 20 febbraio 2007
vladimiro ha scritto:

ehh, intuivo che mi sfuggiva qualcosa di decisivo
Per leggere e scrivere su excel puoi utilizzare tranquillamente ado.net.
Vedi un po' quì: http://support.microsoft.com/kb/316934
Se hai già provato incontrando qualche problema particolare, facci sapere.

vladi


Io ho provato a guardare qui http://support.microsoft.com/kb/247412/it ma purtroppo nell querytable mi da un errore del tipo 1004 eccezione hresult che non sono riuscito a trovare da nessuna parte.

Sono davvero in crisi
438 messaggi dal 04 agosto 2002
Contributi
ciao,

io ti (ri)consiglio una lettura al link che ho postato sopra.
Magari con un esempio di codice il consiglio si "rafforza" ;)

fai l'import dei namespace oledb e sql
Imports System.Data.OleDb
Imports System.Data.SqlClient


poi nell'evento click del tuo pulsante leggi i dati da sqlserver e li scarichi in excel dopo aver creato un foglio di lavoro:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim conn As New SqlConnection("Data Source=tuoserver;Initial Catalog=tuatabella;User Id=********;Password=**************;")
Dim cmd As New SqlCommand("SELECT Id, Nome, Cognome FROM tuatabella", conn)

Dim connE As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\vlad\Documents\test.xls;Extended Properties='Excel 8.0;HDR=Yes';")
Dim cmdE As New OleDbCommand()
cmdE.Connection = connE

conn.Open()
connE.Open()

'qui crei un nuovo foglio di lavoro
cmdE.CommandText = "CREATE TABLE FoglioTest (Id integer, Nome char(255), Cognome char(255))"
cmdE.ExecuteNonQuery()

'prepari la query di inserimento
cmdE.CommandText = "INSERT INTO FoglioTest (Id, Nome, Cognome) values (?, ?, ?)"
cmdE.Parameters.Add("@Id", OleDbType.Integer)
cmdE.Parameters.Add("@Nome", OleDbType.Char)
cmdE.Parameters.Add("@Cognome", OleDbType.Char)

Dim dr As SqlDataReader = cmd.ExecuteReader
While dr.Read
'inserisci i dati riga dopo riga
cmdE.Parameters(0).Value = CInt(dr(0))
cmdE.Parameters(1).Value = dr(1).ToString
cmdE.Parameters(2).Value = dr(2).ToString
cmdE.ExecuteNonQuery()
End While

connE.Close()
conn.Close()
conn.Dispose()
connE.Dispose()
End Sub


Per scarsa fantasia ho chiamato connE e cmdE la connessione e il command per Excel. Cambia parametri e percorso del file excel e vedrai che funziona a meraviglia.

L'articolo mi pare molto completo e propone esempi di codice per far tutto quel che serve con un "database".
Ad esempio, se ti colleghi alla tabella che vuoi trasferire su excel con oledb (e non tramite SqlClient come ho fatto io) puoi riversare i dati in un colpo solo senza passare per il ciclo while che ho scritto sopra semplicemente con un comando INSERT ... INTO.
Dall'articolo:
cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
         "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"
      cmd.ExecuteNonQuery()


bye,
vladi

p.s. - l'articolo che indichi tu è per vb6 non è rivolto alla tecnologia .net. Io ho preso per buono il titolo del thread e parlo di vb.net; se non fosse così tutto quanto ho scritto può essere tranquillamente cestinato
Modificato da vladimiro il 23 settembre 2008 00.41 -
236 messaggi dal 20 febbraio 2007
Grazie mille Vladi, ora sono riuscito ad importare i dati in excel, però è spuntato un nuovo problema

I dati importati in excel vengono tutti preceduti da un apice e quindi sono visti da excel come testo, io purtroppo ho bisogno che alcune colonne siano dei numeri per fare delle operazioni con i dati.
Come faccio ad inserire dei numeri che siano effettivamente numeri e non testo?

Ps scusa se ti rompo

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.