Discussione:
CONNESSIONE ODBC
(troppo vecchio per rispondere)
MICHELE
2006-02-22 16:47:06 UTC
Permalink
Mi scuso se richiedo aiuto su questo argomento
Ho trovato sul sito comune questo codice per la connessione al database
SQL:

'Driver ODBC per SQL Server per Standard Security
oConn.Open "Driver={SQL Server};" & _
"Server=FERR;" & _
"Database=ritiri;" & _
"Uid=SA;" & _
"Pwd=pippo"

L'ho modificato mettendo nome del server, del database, l'utente e
password
Gli stessi parametri che metto per il dns e con quello funziona.

L'ho messo all'apertura di un form ma mi dà errore.
oConn variabile non definita... se anche tolgo optionn explicit non da
ugualmente errore..

Grazie per l'attenzione
Alessandro Baraldi
2006-02-23 06:02:38 UTC
Permalink
Cosa significa che l'hai messo all'apertura di una Form...?????

Va usato per una connessione di un Recordset che poi puoi associare
alla proprietà Recordset di maschera.....

Spiega meglio cosa hai fatto.

In ogni caso forse conviene usare DAO e linkare le tabelle che ne
dici...?

@Alex
MICHELE
2006-02-23 14:16:01 UTC
Permalink
Ciao Alessandro , ti ringrazio per la tua attenzione visto che gli
articoli sulle stringhe di connessione li hai scritti tu..
Cerco di spiegare quello che ho fatto..
Sto cercando di usare MSDE come database. Partendo da un file mdb ho
fatto l'upsize guidato ottendendo un file adp.
Ora come sai meglio di me mi sono trovato la sorpresa che il codice
scritto in visual basic ha smesso di funzionare..
Per ovviare al problema sono andato in origine dati ODBC mi sono fatto
un DNS su file, ho aperto un file mdb ho collegato le tabelle e tutto a
ripreso a funzionare. In sostanza nel mio file mdb vedo le tabelle
rappresentate dal mondo con la freccia...
Ora Simone in un intervento precedente mi ha detto lascia perdere il
dns ed è quello che stavo cercando di fare...
Sul sito comune scrivi tutte le stinghe connessione per i vari tipi di
database ma non ho capito dove vanno messe.
Se apro un form che contiene un elenco di clienti solitamente faccio
come ho riportato di seguito

Private Sub Form_Load()
Set RS = CurrentDb.OpenRecordset("SELECT * FROM tbl_Clienti ORDER BY
ID_CLIENTE ;")
Set Me.Filtro_Cli.Form.Recordset = RS.OpenRecordset
End Sub

In un modulo a parte per dichiarare cosa è rs scrivo
Public RS As Recordset


Senza tabelle reali o collegate devo dargli una stringa di
connessione..Giusto?
Private Sub Form_Load()

'stringa connessione database sql

Set RS = CurrentDb.OpenRecordset("SELECT * FROM tbl_Clienti ORDER BY
ID_CLIENTE ;")
Set Me.Filtro_Cli.Form.Recordset = RS.OpenRecordset
End Sub


Se metto come stringa di connessione:
oConn.Open "Driver={SQL Server};" & _
"Server=FERR;" & _
"Database=ritiri;" & _
"Uid=SA;" & _
"Pwd=pippo
Lui mi dice variabile non definita.. non capisco come definire oConn
ammesso sia questo il problema..
Spero di essermi spiegato..
Ciao Michele
Simone Calligaris
2006-02-23 17:58:22 UTC
Permalink
"MICHELE" <Ciao Alessandro , ti ringrazio per la tua attenzione visto che
gli
articoli sulle stringhe di connessione li hai scritti tu..
Cerco di spiegare quello che ho fatto..
Sto cercando di usare MSDE come database. Partendo da un file mdb ho
fatto l'upsize guidato ottendendo un file adp.
Ora come sai meglio di me mi sono trovato la sorpresa che il codice
scritto in visual basic ha smesso di funzionare..
Per ovviare al problema sono andato in origine dati ODBC mi sono fatto
un DNS su file, ho aperto un file mdb ho collegato le tabelle e tutto a
ripreso a funzionare. In sostanza nel mio file mdb vedo le tabelle
rappresentate dal mondo con la freccia...
Ora Simone in un intervento precedente mi ha detto lascia perdere il
dns ed è quello che stavo cercando di fare...
Sul sito comune scrivi tutte le stinghe connessione per i vari tipi di
database ma non ho capito dove vanno messe.
Se apro un form che contiene un elenco di clienti solitamente faccio
come ho riportato di seguito


Michele, esistono molti modi di lavorare con ODBC: se vuoi puoi anche aprire
recordsets (specificando la stringa di connessione) e assegnarli a Runtime
alle maschere.
Oppure aprire connessioni ODBCDirect (sempre recordsets) per effettuare
operazioni batch di aggiornamento o eliminazione.
Oppure, ancora, usare un misto tra ODBC e ADO...

Ma la cosa più semplice e trasparente (che ti permette d'avere applicazioni
*multi-back end*) è usare normalissime tabelle collegate.
Ora, ti ho semplicemente suggerito di specificare la stringa di connessione
nella proprietà .Connect del codice che usi tutti i giorni per ricollegare
le tabelle a un back-End dal Front-End.

Cosa non ti è chiaro?

Sul problema relativo alla richiesta di user e pass non so che dirti: dovrei
essere fisicamente sul tuo PC...

Ciao, Simone
MA
2006-02-23 18:06:37 UTC
Permalink
dovrei essere fisicamente sul tuo PC...
Ciao, Simone
Pensa se una minaccia del genere te la fa il Biso...
povero pc, lo "sdruma"!!!
--
_ _
Ciao
MAssimiliano Amendola www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info: www.donkarl.com/it
Simone Calligaris
2006-02-23 18:12:59 UTC
Permalink
"MA" <
Post by MA
dovrei essere fisicamente sul tuo PC...
Pensa se una minaccia del genere te la fa il Biso...
povero pc, lo "sdruma"!!!
Ma insomma povero Biso: quanto prezza in KG??
Eh?

:-)

Ciao, Simone
MICHELE
2006-02-23 18:54:57 UTC
Permalink
Vi ringrazio per la Vostra disponibilità..davvero instancabile!

Sto usando come hai detto le tabelle collegate ( quando le collego c'è
una spunta salva password ) però per collegarle mi sono fatto
un'origine dati come per collegare le tabelle su AS400
Anche se non ci sono riuscito questo discorso mi ha fatto capire che
posso collegarmi ad un database con del codice ( come si fa in una
pagina asp)

La stinga di connessione dovrebbe essere questa:
oConn.Open "Driver={SQL Server};" & _
"Server=FERR;" & _
"Database=ritiri;" & _
"Uid=SA;" & _
"Pwd=pippo"
Ma non ho capito dove si mette e di certo bisognerà dirgli in qualche
modo cosa è oconn ( credo che comunque su un libro di access avanzato
queste le troverò)
Per il momento rinuncio ed userò le tabelle collegate, comunque usando
msde penso di aver fatto un passo in avanti..
Grazie !
P.S
Non si sa mai magari capiterà occasione di mettere le mani sul mio
portatile...
Simone Calligaris
2006-02-23 19:34:22 UTC
Permalink
"MICHELE" <

Vi ringrazio per la Vostra disponibilità..davvero instancabile!

Sto usando come hai detto le tabelle collegate ( quando le collego c'è
una spunta salva password ) però per collegarle mi sono fatto
un'origine dati come per collegare le tabelle su AS400
Anche se non ci sono riuscito questo discorso mi ha fatto capire che
posso collegarmi ad un database con del codice ( come si fa in una
pagina asp)

La stinga di connessione dovrebbe essere questa:
oConn.Open "Driver={SQL Server};" & _
"Server=FERR;" & _
"Database=ritiri;" & _
"Uid=SA;" & _
"Pwd=pippo"
Ma non ho capito dove si mette e di certo bisognerà dirgli in qualche
modo cosa è oconn ( credo che comunque su un libro di access avanzato
queste le troverò)
Per il momento rinuncio ed userò le tabelle collegate, comunque usando
msde penso di aver fatto un passo in avanti..



Ti puoi collegare al Server SQL senza creare un'origine dati ODBC, ma ancora
non ti è chiaro come...

Ti faccio io una domanda: che codice utilizzi per collegare le tabelle di un
database .mdb al relativo Front-End?

Ciao, Simone
Alessandro Baraldi
2006-02-23 21:38:53 UTC
Permalink
Secondo me il problema è che lui sta usando ADP come si evince dal suo
replay
al mio post, pertanto non deve usare ODBC, ma OLE attraverso la
connessione
diretta al Server.

Sempre che non abbia capito male...!

@Alex
Simone Calligaris
2006-02-23 22:27:05 UTC
Permalink
"Alessandro Baraldi" <


Secondo me il problema è che lui sta usando ADP come si evince dal suo
replay
al mio post, pertanto non deve usare ODBC, ma OLE attraverso la
connessione
diretta al Server.

Sempre che non abbia capito male...!



Dici?
Oèèè Michele: com'è la situazione? ;-)

Ciao, Simone
MICHELE
2006-02-23 22:35:39 UTC
Permalink
Alla domanda di Alessandro rispondo che ho un file adp ma lo utilizzo
solo per modificare le strutture delle tabelle tipo aggiungere un
campo... aggiungere una tabella ecc...Da quello che ho capito il file
ADP non contiene dati ma solo una connessione all servee asl
Se stoppo il servizio infatti non funziona nulla...

Poi ho preso un file vuoto mdb vuoto e ho collegato le tabelle...
Tutte le maschere le query report sono nel file mdb. Questo perchè mi
sono accorto che nel file adp le farie query dovevano essere modificate
nel modo seguente
Dim RS as new ADODB.Recordset
RS.Open("SELECT * FROM tbl_Utenti WHERE ....... ",
CurrentProject.Connection)

Allora ho preferito lasciare il file adp e usare il file mdb
collegando le tabelle. Quando ho creato il dns su file ho usato come
driver sql server.

Ora vorrei creare maschere e report query ecc..senza usare la sezione
tabelle di access ma solo via via codice..
Proverò la stringa di connessione OLE
Per il momento buona notte e grazie!
giorgio rancati
2006-02-23 23:31:22 UTC
Permalink
"MICHELE" <***@sis.it> ha scritto nel messaggio news:***@j33g2000cwa.googlegroups.com...
[CUT]
Post by MICHELE
Ora vorrei creare maschere e report query ecc..senza usare la sezione
tabelle di access ma solo via via codice..
Proverò la stringa di connessione OLE
Per il momento buona notte e grazie!
Ciao Michele,
forse questo può esserti d'aiuto per le maschere.
----
How to bind Microsoft Access forms to ADO recordsets
http://support.microsoft.com/default.aspx?scid=kb;en-us;281998&Product=acc2002
----


per i report devi generare direttamente nella proprietà origine record la
stringa di connessione.
es...
----
Private Sub Report_Open(Cancel As Integer)

Dim StrSql As String
StrSql = "SELECT * FROM " & _
"[ODBC;Driver=Sql Server;" & _
"Server=(local);" & _
"Database=NomeDb;" & _
"USER=Sa;PWD=pippo].NomeTabella "

Me.RecordSource = StrSql

End Sub
----

La stessa cosa puoi scriverla direttamente in una query
-----
SELECT *
FROM [ODBC;Driver=Sql
Server;Server=(local);Database=NomeDb;USER=Sa;PWD=pippo].NomeTabella
----
(dopo la From tutto su una riga)

Ciao
--
Giorgio Rancati
[Office Access MVP]
Simone Calligaris
2006-02-24 07:47:22 UTC
Permalink
"MICHELE" <

Allora ho preferito lasciare il file adp e usare il file mdb
collegando le tabelle. Quando ho creato il dns su file ho usato come
driver sql server.


Bene, abbiamo chiarito che lavori con .MDB e tabelle collegate al Server.
Modalità che, evitando oscenità nella scrittura del codice SQL, va
benissimo.


Ora vorrei creare maschere e report query ecc..senza usare la sezione
tabelle di access ma solo via via codice..
Proverò la stringa di connessione OLE
Per il momento buona notte e grazie!


NON c'è alcun motivo che imponga la rinuncia alla creazione di tabelle
collegate ODBC al Server!
Anzi, la programmazione si complicherebbe oscenamente....

Per creare (e questa è l'ultima volta che lo scrivo) le tabelle collegate al
Server "a codice" Visual Basic utilizza l'esempio STANDARD che trovi anche
nell'Help di Access per gli .mdb.
L'unica differenza è che nella proprietà Connect devi passare la stringa di
connessione al Server SQL.

Ciao, Simone
MICHELE
2006-02-24 15:28:33 UTC
Permalink
Non potevi trovare espressione migliore quando hai detto che volevo
collegare le tabelle "a codice"
Forse con il link che mi ha indicato Giorgio ho risolto..
Ho usato Opening a Separate ADO Connection
1) Ho creato una nuova maschera vuota
2) Sull'evento caricamento della maschera ho messo il codice riportato
di seguito per esteso
3) Ho inserito nella maschera delle caselle di testo con origine
controllo uguale al nome dei campi della tabella
4) ho cancellato la vecchia tabella collegata
Aprendo la maschera vedo correttamente i record
Spero sia questo quello che cercavate di suggerirmi
Grazie per la Vostra attenzione!


Private Sub Form_Load()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

'Create a new ADO Connection object
Set cn = New ADODB.Connection

'Use the Access 10 and SQL Server OLEDB providers to
'open the Connection
'You will need to replace MySQLServer with the name
'of a valid SQL Server
With cn
.Provider = "Microsoft.Access.OLEDB.10.0"
.Properties("Data Provider").Value = "SQLOLEDB"
.Properties("Data Source").Value = "serversqlmichele"
.Properties("User ID").Value = "sa"
.Properties("Password").Value = "PIPPO"
.Properties("Initial Catalog").Value = "RITIRI"
.Open
End With

'Create an instance of the ADO Recordset class, and
'set its properties
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM tbl_Utenti"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Open
End With

'Set the form's Recordset property to the ADO recordset
Set Me.Recordset = rs
Set rs = Nothing
Set cn = Nothing

End Sub
Simone Calligaris
2006-02-24 16:13:14 UTC
Permalink
"MICHELE"
Post by MICHELE
Non potevi trovare espressione migliore quando hai detto che volevo
collegare le tabelle "a codice"
Forse con il link che mi ha indicato Giorgio ho risolto..
Ho usato Opening a Separate ADO Connection
1) Ho creato una nuova maschera vuota
2) Sull'evento caricamento della maschera ho messo il codice riportato
di seguito per esteso
3) Ho inserito nella maschera delle caselle di testo con origine
controllo uguale al nome dei campi della tabella
4) ho cancellato la vecchia tabella collegata
Aprendo la maschera vedo correttamente i record
Spero sia questo quello che cercavate di suggerirmi
Grazie per la Vostra attenzione!
Ehmm: no, non è quello ;-)

Ciao, Simone
MICHELE
2006-02-24 20:15:05 UTC
Permalink
Come stringa di connessione da passare intendi:
strConnection = "ODBC;DSN=MyDSN;UID=sa;PWD=;DATABASE=Northwind"

Quindi anche se non mi funziona ( nome origine dati non trovato e
driver non specificato) il codice dovrebbe essere:
Private Sub Form_Open(Cancel As Integer)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strConnection As String

'MODIFICATA SENZA DNS
strConnection = "ODBC;server=MIOSQLSERVER; DRIVER=SQL
SERVER;UID=sa;PWD=pippo;DATABASE=ritiri"
'Create a new ADO Connection object
Set cn = New ADODB.Connection

With cn
.Provider = "MSDASQL"
.Properties("Data Source").Value = strConnection
.Open
End With

Grazie lo stesso ! Ho salvato tutti i messaggi con un bel manuale
rifletterò su quanto mi avete detto

Loading...