Newsgroup: it.comp.lang.visual-basic
Titolo: Controllo ADO DATA & Connessione SQL

Salve.
Avrei bisogno di risolvere un problema di connessione ad un Server SQL
tramite un ADO CONTROL con VB6.
L'applicazione è client/server ma, per svariati problemi, non posso
configurare un origine dati ODBC diverso dal collegamento con il DSN già
esistente sui vari client.
Ogni client punta su server diversi.
Il programma esegue una prima connessione diretta senza utilizzo di
DataControl (ADO) configurata nella seguenta maniera:
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase(NomeDb, dbDriverNoPrompt, True,
"ODBC;DATABASE=OrigineDati;DSN=" & NomeDb)
(NomeDB è una Public Const)
Ovviamente le varie tabelle di lavoro sono sul DB "OrigineDati" mentre
NomeDb è il DSN configurato nell'ODBC di ogni client.
Il problema sorge nel momento in cui utilizzo degli ADO DATA per eseguire in
manierea molto più rapida operazioni di Visualizzazione, modifica, Update e
Delete.
Con una connessione identica, sia per quanto riguarda il Database che il
DSN, basta inserire nel campo ConnectionString del DataControl la stringa
"DSN=OrigineDati" (cioè il nome del DB) e tutto funziona alla grande, ma nel
caso specifico non sono riuscito a trovare una stringa adatta.
Ho provato a inserire i parametri DATABASE=OrigineDati;DSN=NomeDb
ma niente da fare.
Ho fatto anche altri tentativi ma finora nulla.
Qualcuno ha già eseguito un lavoro del genere o sa come ci si comporta con
una problematica simile?
Direte voi, ma perchè non configuri ogni client con il suo DSN?
Beh perchè non è possibile modificare oltre 50 client che per "ordini
superiori" non devono essere modificati... :(((
Cmq grazie in anticipo per l'eventuale aiuto.
Ciao
Nibbler
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 "ODBC;DATABASE=OrigineDati;DSN=" & NomeDb)
Sicuro che quanto sopra sia roba di ADO? A me pare DAO...
Se, come mi pare, č cosě, come pensi di condividere DAO e ADO sullo stesso
database?
Intendiamoci, DAO e ADO convivono benissimo (anteponendo il nome della
libreria di competenza), ma non scommetterei un cent che un database aperto
con DAO (o ADO) possa essere gestito anche con ADO (o DAO). Tanta manna che
non si scassi...
In altre parole, DAO e ADO insieme sě, DAO e ADO insieme  _sullo stesso
database_ no!

 superiori" non devono essere modificati... :(((
E, allora, perchč usare un DSN?

 non si scassi...
Dunque, il DB viene aperto e chiuso di continuo perchè vi lavorano più
client in contemporanea; viene aperto in modo esclusivo e subito chiuso e
rilasciato.
L'applicazione funziona così da oltre due anni senza problemi.
Il problema è sorto ora che deve essere "necessariamente" creato un DSN
diverso!
Ripeto, le varie operazioni create con query sql direttamente da codice e
poi passate con db.Execute query, dbSQLPassThrough funzionano alla grande.
Funzionava tutto anche con gli ADO quando il DSN era identico al DB, ma ora
non riesco a dare in pasto alla ConnectionString degli ADO un DB diverso.
Allora, per rendere più cara la questione, diciamo che voglio aprire un DB
SQL con gli ADO passando però un DSN diverso, come si fa???
Cmq mi rendo conto che la problematica è complessa ed è difficile spiegare
il tutto qui...
Grazie ancora!


 un DB SQL con gli ADO passando però un DSN diverso, come si fa???
1) Con i Data Control (ADO), pur con tutta la mia antipatia per gli stessi,
non ho avuto difficoltà:
-Ho creato un DSN di tipo SQL Server, indicando solo il nome del server, non
il nome del database
-Ho creato un progetto VB (6, SP5) nuovo e ho messo fra i riferimenti ADO
2.7 e ho aggiunto i componenti Microsoft ADO Data Control 6.0 (SP4) (OLEDB)
e Microsoft DataGrid Control 6.0 (SP5) (OLEDB)
-Sul form ho messo un Adodc1 e una DataGrid1
-Nella ConnectionString di Adodc1  ho messo
DSN=NomeDSN;DATABASE=NomeDatabase
-Nella RecordSource di Adodc1 ho messo il nome di una tabella di quel
database (BANCHE)
-Nella DataSource della DataGrid1 ho messo Adodc1
-Avvio e la griglia mostra i records della tabella (le mie banche)
2) Da codice, senza uso di controlli, col DSN:
-Ho creato un DSN di tipo SQL Server, indicando solo il nome del server, non
il nome del database
-Ho creato un progetto VB (6, SP5) nuovo e ho messo fra i riferimenti ADO
2.7
-Ho inserito le seguenti istruzioni:
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=False;Initial Catalog=NomeDatabase;DSN=NomeDSN"
    rs.Open "SELECT * FROM BANCHE", cn, adOpenStatic, adLockOptimistic
'    In rs ho le mie banche...
3) Da codice, senza uso di controlli, nè di DSN:
-Ho creato un progetto VB (6, SP5) nuovo e ho messo fra i riferimenti ADO
2.7
-Ho inserito le seguenti istruzioni:
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security
Info=False;Initial Catalog=NomeDatabase;Data Source=NomeServerSQL"
    rs.Open "SELECT * FROM BANCHE", cn, adOpenStatic, adLockOptimistic
'    In rs ho le mie banche...
Ora, a parte eventuali UID e PWD facilmente aggiungibili, quale delle
alternative ti crea problemi?


Ok grazie... Buona la prima :))))
Ora funziona tutto alla grande compresi i vecchi report realizzati ancora
con il Crystal Report del VB4!!!!!
Ciaoooo


 ancora con il Crystal Report del VB4!!!!!
Meglio così, ma ora son curioso: Cosa facevi (o non facevi) perchè NON
andasse?


Eheheheh beh non so da quanto bazzichi con VB... io da parecchio (dalla
versione 3 a 16 bit) e, molto probabilmente per la scadenza del lavoro da
consegnare e quindi per la fretta, avevo sbagliato a scrivere DSN e DATABASE
sulla ConnectionString perchč non trovo altra soluzione!!!
Database la'avevo scritto in minuscolo sicuramente ma non credo che abbia
importanza. Piuttosto penso piů un problema di sintassi, tipo l'assenza di ;
o qualcosa del genere....
Bah!!!!
Cmq grazie ancoram e spero di ricambiare presto l'aiuto.. ;)
Bye
Nibbler


 (dalla versione 3 a 16 bit)...
Io da parecchio e, proprio per questo, mi sento di dire "no problem, sono
cose che capitano, ... a tutti"