Newsgroup: it.comp.lang.visual-basic
Titolo: Connection string

Ciao a tutti del newsgroup!
Ecco il mio problema:
Uso VB5 e sto creando l'interfaccia per un DB Access.
Nel progetto ho creato un riferimento ad ADO (MS ActiveX Data Object 2.1
Library)
Ad un certo punto del codice devo aprire un recordset e lo apro così:
Dim rs As New ADODB.Recordset
Dim strcnt As New ADODB.Connection
strcnt.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:/MioFile.mdb"
rs.Open "MiaTabella", strcnt
Purtroppo arrivati all'apertura della connessione mi segnala che non conosce
il provider!
Come mai?
Dove sbaglio?
Grazie a chi vorrà aiutarmi.

 il provider!
Dando per scontato che tutte le librerie di ambiente siano installate (in
particolare quella del provider), mi sembra a posto. Ho solo un dubbio su
quella barra "dritta". Prova con:
strcnt.Open "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=C:\MioFile.mdb"

 il provider!
Aggiungi un controllo ADO al Form, imposta la connessione tramite
la proprietà ConnectionString e il risultato finale, lo incolli su
strcnt.Open "Provider=............"
Ciao
P.S. non ho mai usato VB5. Con VB6 funziona.

strcnt.Open "Provider=............"
Ottimo suggerimento: imho e' l' unico motivo per cui valga la pena
usare un ADOControl :-P
Ma siccome sono ancora piu' pigro, ho scritto un piccolo exe vb che mi
piazza la stringa di connessione nella clipboard:
Option Explicit
Public Sub Main()
    Dim cn As ADODB.Connection
    Dim wizard As DataLinks
 
    Set wizard = New DataLinks
    Set cn = wizard.PromptNew()
    If (Not (cn Is Nothing)) Then
        Clipboard.SetText cn.ConnectionString, vbCFText
    End If
End Sub
Servono le references ad ADO e Microsoft OLEDB Service Component.
-- 
ciao, hal.HaveANiceSunday();

piazza la stringa di connessione nella clipboard:
Per ancora piu' pigri (purche' con sistemi di classe NT):
1. Creare un nuovo documento da esplora risorse e dargli estensione ".udl";
2. Fare doppio clic sul nuovo doc;
3. Eseguire lo wizard OLEDB;
4. Aprire il file .udl con i blocco note e copiare la stringa di connessione :-)
-- 
ciao, hal

 piazza la stringa di connessione nella clipboard:
Provate anche questa:
create un file con estensione .UDL, apritelo con un doppio click ed eseguite le
impostazioni che vi interessano. Salvate ed aprite con Notepad: eccovi la
stringa di collegamento!
Ciao!
--
Esteban
Hosted by 
www.seber.it
(Remove nonspammare for reply)

 4. Aprire il file .udl con i blocco note e copiare la stringa di connessione
:-)
E allora dillo che hai cambiato l'ora sul tuo PC per poter copiare il mio post e
postarlo prima di me!! :-))


     End If
il Clipboard.Clear è andato in ferie?  :)
Ciao
--
Faber

postarlo prima di me!! :-))
LOL
hai scoperto il mio segreto :-PPP
-- 
ciao, hal.HaveANiceSunday();

il Clipboard.Clear è andato in ferie?  :)
Preso in castagna :-(
Prima del SetText il Clear e' obbligatorio!
-- 
ciao, hal.HaveANiceSunday();

crash...
Questo non lo sapevo.
Come funziona la faccenda?
-- 
ciao, hal.HaveANiceSunday();

usato, mi sa che normalmente si possa far finta di niente...
Grazie al tuo hint mi sono un po' documentato.
Qui, sul sito di Clipmate,
Common (General) Clipboard Mistakes
http://www.thornsoft.com/developer_CommonMistakes.htm
spiega effettivamente l' esistenza di problemi derivanti dal mancato rilascio
e/o azzeramento della clipboard, anche a carico di software famosi, come
Excel e, udite udite, VB:
<citazione>
Why does Visual Basic copy data at startup?
You hear a "POP" or "BOING" (depending on the application profile) when you launch VB6, 
Because they are using the clipboard to put icons onto the toolbar. 
This is a dreadful programmer "short-cut" which was also used in the dreaded 
"Internet Assistant for Word" add-in.  Programmers should never do this.  
Other abusers:  Quicken (the calculator), several card games (hearts, especially).
</citazione>
Mi e' parso quindi di aver ricevuto conferma che la Clipboard vada vuotata prima
di caricarla, pena possibili problemi, come da documentazione Microsoft:
<citazione>
To place information on the clipboard, a window first clears any previous clipboard 
content by using the EmptyClipboard function. 
This function sends the WM_DESTROYCLIPBOARD message to the previous clipboard 
owner, frees resources associated with data on the clipboard, and assigns 
clipboard ownership to the window that has the clipboard open. 
To find out which window owns the clipboard, call the GetClipboardOwner function. 
After emptying the clipboard, the window places data on the clipboard in as many 
clipboard formats as possible, ordered from the most descriptive clipboard format 
to the least descriptive. For each format, the window calls the SetClipboardData function, 
specifying the format identifier and a global memory handle
</citazione>
<codice>
void CMyView::OnEditCopy()
{
  if ( !OpenClipboard() )
  {
    AfxMessageBox( "Cannot open the Clipboard" );
    return;
  }
  // Remove the current Clipboard contents
  if( !EmptyClipboard() )
  {
    AfxMessageBox( "Cannot empty the Clipboard" );
    return;
  }
  // ...
  // Get the currently selected data
  // ...
  // For the appropriate data formats...
  if ( ::SetClipboardData( CF_??, hData ) == NULL )
  {
    AfxMessageBox( "Unable to set Clipboard data" );
    CloseClipboard();
    return;
  }
  // ...
  CloseClipboard();
}
</codice>
Diciamo che tu hai messo una pezza ad un problema in realta provocato
dal comportamento non corretto di qualche altro programma, ma
non mi sembra l' approccio corretto: la clipboard, cosi' come
giustamente sottolineato da Faber, va liberata prima di caricarla
con i nuovi dati.
Quello che non mi e' chiaro e' perche', omettendo il Clear, sei riuscito a risolvere
il problema. 
-- 
ciao, hal

 Per ancora piu' pigri (purche' con sistemi di classe NT):
...
Questa č meno da pigri. Il vero pigro usa il tuo primo prog d'esempio.
...
Sono pigro, si, come tutti i pgmrs, ma non ero mai arrivato a questi
livelli... mi batti di diverse lunghezze :)
Cmq, grazie, ho aggiunto questo simpaticissimo coso ai miei addin di VB,
cosě evito il giro di AdoControl ;).
Dads.
P.S.: Volevo scrivere del "clear", ma sono stato preceduto.


beh! Sinceramente non avrei mai pensato di scatenare un "putiferio" simile
con una domanda "da profano" qual'era la mia.
Sono comunque riuscito a risolvere il mio problema !
Grazie infinite, siete molto generosi e... simpatici!
Ciao.
Gino Palmia