Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Connessione DATI ad SQLServerExpress

87 views
Skip to first unread message

jfk13

unread,
Jun 9, 2009, 5:19:01 AM6/9/09
to
Ciao a tutti premetto che ho scritto anche nella sezione (forse piu
appropriata) SQL.
Però immagino che qualcuno di voi esperti abbia già affrontato questo tipo
di problema, quindi mi permetto di proporre la domanda anche qui seppure con
excel la cosa centri limitatamente.

Ho un computer windows XP dal quale lavoro.
Qui vi gira SQLEXPRESS 2005 assieme ad un piccolo server web e delle pagine
che prendono/scrivono dati da/su tale DB.

Via web tutto funziona in maniera ottimale.
Adesso viene il problema:

Devo far accedere via EXCEL utenti al mio DB. Ho fatto l'attachment del DB
mediante MS SQL Server Managemente Studio Express.

Ho fatto Tasto destro sull'instanza SQLEXPRESS-> Protezione ed ho impostato:
Autenticazione di SQL Server e di Windows.

Ho creato un utente (adminz) gli ho dato da "autorizzazioni" tutti i
permessi possibili.
Ho riavviato l'instanza (per sicurezza).

Adesso (DAL MIO PC) apro excel e faccio: connetti a SQL Server metto
ip117\SQLEXPRESS nome utente adminz pass xxyyxx85 do invio e tac, mi
visualizza le tabelle, da taskManager SQLSERVER gira come servizio di rete!

Se vado in un altro computer, apro excel, e compio le stesse azioni mi dà
errore..
(ip117 è il mio nome computer, ma ho provato anche con l'ip non cambia)

Che cosa sbaglio??

JFK.

Tiziano Marmiroli

unread,
Jun 9, 2009, 5:26:47 AM6/9/09
to
Il Tue, 9 Jun 2009 02:19:01 -0700, jfk13 ha scritto:

>Devo far accedere via EXCEL utenti al mio DB. Ho fatto l'attachment del DB
>mediante MS SQL Server Managemente Studio Express.
>
>Ho fatto Tasto destro sull'instanza SQLEXPRESS-> Protezione ed ho impostato:
>Autenticazione di SQL Server e di Windows.
>
>Ho creato un utente (adminz) gli ho dato da "autorizzazioni" tutti i
>permessi possibili.
>Ho riavviato l'instanza (per sicurezza).
>
>Adesso (DAL MIO PC) apro excel e faccio: connetti a SQL Server metto
>ip117\SQLEXPRESS nome utente adminz pass xxyyxx85 do invio e tac, mi
>visualizza le tabelle, da taskManager SQLSERVER gira come servizio di rete!
>

>Se vado in un altro computer, apro excel, e compio le stesse azioni mi d�
>errore..
>(ip117 � il mio nome computer, ma ho provato anche con l'ip non cambia)
>
>Che cosa sbaglio??

A non dire quale errore ti d�.
--
Tiziano Marmiroli
Microsoft MVP - Office System
http://www.riolab.org

Mauro Gamberini

unread,
Jun 9, 2009, 5:30:14 AM6/9/09
to
> Devo far accedere via EXCEL utenti al mio DB. Ho fatto l'attachment del DB
> mediante MS SQL Server Managemente Studio Express.
>

Capito pochissimo.

Domanda: ma una cosa tipo:

Public Sub mRecuperaCustomers()


On Error GoTo RigaErrore


Dim cn As Object
Dim rs As Object
Dim sh As Worksheet


Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set sh = Worksheets("Foglio1")

With cn
.CursorLocation = 1
.Open "Provider=SQLNCLI;" & _
"Server=MAURONB\SQLEXPRESS;" & _
"Database=NorthWind;" & _
"Trusted_Connection=yes;"
End With

With rs

.CursorLocation = 1
.Open "SELECT CustomerID, CompanyName, ContactName " & _
"FROM Customers " & _
"ORDER BY CustomerID", cn, 1, 3, 1

End With

With sh
.Range("A1").CopyFromRecordset rs
End With

RigaChiusura:


If rs.State = 1 Then
rs.Close
End If
If cn.State = 1 Then
cn.Close
End If


Set rs = Nothing
Set cn = Nothing
Exit Sub


RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaChiusura


End Sub

visto che(sempre se ho capito) devi collegare direttamente Excel a SQL.

Guarda qui(se gi� non lo sai) per le stringhe di connessione:

http://www.carlprothman.net/Default.aspx?tabid=81
http://www.connectionstrings.com/

--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/

jfk13

unread,
Jun 9, 2009, 5:37:01 AM6/9/09
to

"Tiziano Marmiroli" wrote:

> Il Tue, 9 Jun 2009 02:19:01 -0700, jfk13 ha scritto:
>
> >Devo far accedere via EXCEL utenti al mio DB. Ho fatto l'attachment del DB
> >mediante MS SQL Server Managemente Studio Express.
> >
> >Ho fatto Tasto destro sull'instanza SQLEXPRESS-> Protezione ed ho impostato:
> >Autenticazione di SQL Server e di Windows.
> >
> >Ho creato un utente (adminz) gli ho dato da "autorizzazioni" tutti i
> >permessi possibili.
> >Ho riavviato l'instanza (per sicurezza).
> >
> >Adesso (DAL MIO PC) apro excel e faccio: connetti a SQL Server metto
> >ip117\SQLEXPRESS nome utente adminz pass xxyyxx85 do invio e tac, mi
> >visualizza le tabelle, da taskManager SQLSERVER gira come servizio di rete!
> >

> >Se vado in un altro computer, apro excel, e compio le stesse azioni mi dà
> >errore..
> >(ip117 è il mio nome computer, ma ho provato anche con l'ip non cambia)
> >
> >Che cosa sbaglio??
>
> A non dire quale errore ti dá.


> --
> Tiziano Marmiroli
> Microsoft MVP - Office System
> http://www.riolab.org
>

Scusa Tiziano :)
Ecco l'errore..
[DBNETLIB][ConnectionOpen (Connect()).]Server SQL inesistente o accesso
negato.

jfk13

unread,
Jun 9, 2009, 10:09:07 AM6/9/09
to
"Mauro Gamberini" wrote:

> > Immagino sia poco comprensibile, cosi facendo tiro dentro tutta la
> > tabella,
> > mentre io devo visualizzare solo alcuni dati tramite una query.
> <cut>
>
> Sostituisci:
>
> > .CommandText = Array("""xxx"".""dbo"".""com_eco""")
>
> con:
>
> .CommandText = Array(tuaQuery)
>
> Dove tua query sarà una cosa tipo:
>
> Dim sQuery As String
>
> sQuery = "SELECT id, Nome FROM tuaTabella"
>
> --
> ---------------------------
> Mauro Gamberini

Ciao Mauro, allora ho fatto come mi hai suggerito:

usando : .CommandText = Array(sQuery)

Dim squery As String <-- la dichiarazione e sotto la query (lunga ma semplice)

squery = "SELECT com_lotti.commessa, com_lotti.lotto,
com_lotti.dataconsegna, com_eco.valore, com_eco.datavalore, com.cliente,
com.numeroordinecliente, com.descrizione, com.progetto FROM com_lotti LEFT
OUTER JOIN com ON com_lotti.commessa = com.commessa LEFT OUTER JOIN com_eco
ON com_lotti.lotto = com_eco.lotto AND com_lotti.commessa = com_eco.commessa
WHERE (com.statocommessa = N'I') AND (com_eco.statovalore = N'I') OR
(com_eco.statovalore IS NULL) ORDER BY com_lotti.commessa DESC,
com_lotti.lotto"


Ricevo errore:

Tipo non corrispondente....
Uffa... :(

jfk13

unread,
Jun 9, 2009, 9:31:01 AM6/9/09
to
Mauro con il metodo da te suggerito mi dà: Impossibile connettersi al provider.

Ho registrato la macro nell'office 2007 della signorina che userà il foglio
excel e viene fuori una cosa di questo tipo:

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=True;Data Source=xxx117\sqlexpress;Use Procedure for Prepare=" _
, _
"1;" _
, "le=False;Initial Catalog=xxx"),
Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdTable


.CommandText = Array("""xxx"".""dbo"".""com_eco""")

.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = "C:\xxx117_sqlexpress xxxcom_eco.odc"
.ListObject.DisplayName = "Tabella_xxx117_sqlexpress_xxx_com_eco"
.Refresh BackgroundQuery:=False
End With
End Sub


Immagino sia poco comprensibile, cosi facendo tiro dentro tutta la tabella,

mentre io devo visualizzare solo alcuni dati tramite una query. Quindi,
quello che vorrei fare è incanalare quelle opzioni (che permettono la
connessione) dentro il

With cn

End with

Per poi poter applicare la query legata al record set.
Grazie a chi e se, vorrete aiutarmi :)

JFK

Mauro Gamberini

unread,
Jun 9, 2009, 10:07:29 AM6/9/09
to
> "Si sono verificati errori in un'operazione OLE DB composta da pi�
> passaggi.
> Controllare i singoli valori di stato OLE DB, se disponibili. Nessuna
> operazione eseguita."
>

Il codice era per il vb di Excel
verso il server SQL e *non* per vb.net o c#.
Il tutto tramite ADO e *non* ADO.NET.

Scusa, ma io allora non ho capito il contesto
in cui operi.

Tu hai scritto nel primo post:

> Devo far accedere via EXCEL utenti al mio DB.

E via Excel io ti faccio accedere al db, senza .NET
in qual si voglia linguaggio.

Mauro Gamberini

unread,
Jun 9, 2009, 9:56:56 AM6/9/09
to
> Immagino sia poco comprensibile, cosi facendo tiro dentro tutta la
> tabella,
> mentre io devo visualizzare solo alcuni dati tramite una query.
<cut>

Sostituisci:

> .CommandText = Array("""xxx"".""dbo"".""com_eco""")

con:

.CommandText = Array(tuaQuery)

Dove tua query sar� una cosa tipo:

Dim sQuery As String

sQuery = "SELECT id, Nome FROM tuaTabella"

--

jfk13

unread,
Jun 9, 2009, 9:50:01 AM6/9/09
to
Ho provato a modificare cosi, ma senza successo:

With cn
.CursorLocation = 1

.Open "Provider=SQLOLEDB.1;" & _
"Server=xxx117\SQLEXPRESS;" & _
"Initial Catalog=xxx;" & _
"Trusted_Connection=yes;"
End With

Mi dà errore su questa riga:

With sh
.Range("A1").CopyFromRecordset rs <-------------------- Yellow here
End With


Questo è l'errore:

"Si sono verificati errori in un'operazione OLE DB composta da più passaggi.

Controllare i singoli valori di stato OLE DB, se disponibili. Nessuna
operazione eseguita."

Qualche idea? :)

jfk13

unread,
Jun 9, 2009, 10:15:01 AM6/9/09
to
"Mauro Gamberini" wrote:

> > "Si sono verificati errori in un'operazione OLE DB composta da più

> > passaggi.
> > Controllare i singoli valori di stato OLE DB, se disponibili. Nessuna
> > operazione eseguita."
> >
>
> Il codice era per il vb di Excel
> verso il server SQL e *non* per vb.net o c#.
> Il tutto tramite ADO e *non* ADO.NET.
>
> Scusa, ma io allora non ho capito il contesto
> in cui operi.
>
> Tu hai scritto nel primo post:
>
> > Devo far accedere via EXCEL utenti al mio DB.
>
> E via Excel io ti faccio accedere al db, senza .NET
> in qual si voglia linguaggio.
>
> --
> ---------------------------
> Mauro Gamberini
> http://www.riolab.org/
> http://blog.maurogsc.eu/

Si mauro, opero dentro excel quindi vb6.0 non .net :)

Mauro Gamberini

unread,
Jun 9, 2009, 10:32:03 AM6/9/09
to
> Si mauro, opero dentro excel quindi vb6.0 non .net :)
>

Quindi, il primo codice postato *deve* funzionare
(fatte le debite modifiche di path e query).
Si tratta di un problema legato
probabilmente alla stringa di connessione
al db.
Io non la posso sapere...
Cos� come non posso sapere se tipo di accessi
hai autorizzato sul db SQL(e qui devi chiedere
su microsoft,public.it.sql).
Hai darto un'occhiata ai link che ti ho proposto?
Su che macchine operi(sistema operativo e versione di
Excel), perch� l'errore alla riga che mi hai segnalato � dato,
di solito, ad Excel pre 2000. Inoltre, su vecchi sistemi
operativi potrebbe non essere installato questo:

http://www.microsoft.com/downloadS/details.aspx?familyid=6C050FE3-C795-4B7D-B037-185D0506396C&displaylang=it

Francy

unread,
Jun 9, 2009, 10:36:01 AM6/9/09
to
> > .CommandText = Array("""xxx"".""dbo"".""com_eco""")
>
> con:
>
> .CommandText = Array(tuaQuery)
>
> Dove tua query sarà una cosa tipo:

>
> Dim sQuery As String
>
> sQuery = "SELECT id, Nome FROM tuaTabella"
>
> --
> ---------------------------
> Mauro Gamberini

Ciao Mauro, ciao JFK.
Se non ho letto male il tuo precedente post vedo un:

.CommandType = xlCmdTable

Prova a sostituirlo in

.CommandType = xlCmdSQL

Un abbraccio !
Frà.

jfk13

unread,
Jun 9, 2009, 11:14:01 AM6/9/09
to
Ok, non ho ancora provato da un altro computer però sembra andare.
Adesso il problema è un'altro.. Seguendo questa pratica, i dati mi vengono
importati in forma tabellare (e qui ok) ma con intestazioni filtrabili e
righe colorate.

Questo mi crea dei grossi problemi perchè ho già lavorato sullo stile della
pagina.

Esiste un modo per avere questi dati crudi come sql li ha fatti? :P :P

Secondo me il problema sta qui (ho sintetizzato la registrazione di excel
2007 a poche righe)

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _

"OLEDB;Provider=SQLOLEDB.1;" & _
"Integrated Security=SSPI;" & _
"Persist Security Info=True;" & _
"Data Source=xxx117\sqlexpress;" & _
"Initial Catalog=CEG"), Destination:=Range("$A$1")).QueryTable

E' quel ActiveSheet.ListObjects.Add().QueryTable, mi sà che è una classe pre
compilata di excel che ti mette i dati presi in maniera formattata...

Esiste una proprietà di tale classe che permette di selezionare i dati
crudi? senza formattazione (solo valore per intenderci)

Grazie e con questo spero di non rompere più (per oggi) :)


Mauro Gamberini

unread,
Jun 9, 2009, 11:33:40 AM6/9/09
to
> Ok, non ho ancora provato da un altro computer per� sembra andare.
>

Lascia perdere OLEDB ed utilizza ADO.
E' pi� flessibile.
Poi fai come preferisci.

jfk13

unread,
Jun 9, 2009, 12:34:06 PM6/9/09
to
Allora Mauro, scusa se oggi ti ho rotto le scatole a lungo..
Io non riesco a capire dove sbaglio ma quello di cui son sicuro è che
sbaglio :D

Lasciando perdere OLEDB e tornando all'esempio in ADO

With cn
.CursorLocation = 1

.Open "Provider=SQLNCLI;" & _
"Server=CEG117\Sqlexpress;" & _
"Database=CEG;" & _
"Trusted_Connection=yes;"
End With

Questo sul mio pc funziona su un altro no. Stesso sistema operativo XP sp3
stesso office 2007 sp2. Anche su altri pc della rete sia Office2002 che 2007
non và. Dice che non trova il provider specificato..

Il che è surreale... Perchè le autorizzazioni ci son tutte addirittura
telnettando da qualsiasi macchina mi collego al server SQL..
Ci deve essere qualcosa in quella stringa che non funziona. O magari è
sbagliata la sintassi del provider... Non saprei... ma è davvero davvero
strano..

Francy

unread,
Jun 9, 2009, 1:24:03 PM6/9/09
to

"jfk13" wrote:


Ehh non è surreale :) Il fatto è che voi possenti programmatori avete
regalato durante l'installazione di SQLEXPRESS il famoso: Sql Native Client!
:)

Invece a noi poveri utenti non ci viene somministrato assieme al campo
minato ed al wordpad quando ci mettono il buon (ormai) vecchio windows xp!

Ok, ho finito di dire scemenze, come di mio solito, trovi comunque il
download a quello che cerchi qui :

http://www.microsoft.com/downloadS/details.aspx?familyid=D09C1D60-A13C-4479-9B91-9E8B9D835CDC&displaylang=en#filelist

Buona programmazione :)

Frà

eliano

unread,
Jun 9, 2009, 7:46:02 PM6/9/09
to

"Francy" ha scritto:

[cut]


> Invece a noi poveri utenti non ci viene somministrato assieme al campo
> minato ed al wordpad quando ci mettono il buon (ormai) vecchio windows xp!
>
> Ok, ho finito di dire scemenze, come di mio solito, trovi comunque il
> download a quello che cerchi qui :

Ciao Frà.
Tutti noi disponiamo di ambienti "simili" ma non "identici";
quindi vai tranquilla e dici tutto quello che vuoi dire perchè
che siano "scemenze" è sempre tutto da dimostrare.
Saluti
Eliano

jfk13

unread,
Jun 10, 2009, 2:14:01 AM6/10/09
to

"Francy" wrote:

Adesso funziona :) :)

jfk13

unread,
Jun 10, 2009, 2:15:01 AM6/10/09
to

"eliano" wrote:

No infatti non era una "scemenza" ma la chiave di volta. Adesso tutto
funziona da dio.

Grazie a tutto il ng per il supporto

Francy

unread,
Jun 10, 2009, 4:48:00 AM6/10/09
to

"eliano" wrote:

Ciao Eli :)
Come stai? Lavori sempre ad orari impossibili? :)
Un saluto,
Frà

eliano

unread,
Jun 11, 2009, 6:07:01 PM6/11/09
to

"Francy" ha scritto:

> Ciao Eli :)
> Come stai? Lavori sempre ad orari impossibili? :)
> Un saluto,
> Frà

Non sono impossibili, ma orari adatti ad essenze eteree; quindi come senti
sferragliar di catene, gemiti e strida di gufi civette ed upupe entra sul NG
e lì mi trovi. :-))
Contraccambio con saluti^2
Eliano

0 new messages