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.
>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
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/
> 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.
> > 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... :(
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
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.
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"
--
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? :)
> > "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 :)
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:
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à.
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) :)
Lascia perdere OLEDB ed utilizza ADO.
E' pi� flessibile.
Poi fai come preferisci.
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..
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 :
Buona programmazione :)
Frà
"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
Adesso funziona :) :)
No infatti non era una "scemenza" ma la chiave di volta. Adesso tutto
funziona da dio.
Grazie a tutto il ng per il supporto
"eliano" wrote:
Ciao Eli :)
Come stai? Lavori sempre ad orari impossibili? :)
Un saluto,
Frà
> 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