Newsgroup: it.comp.lang.visual-basic
Titolo: Verificare se recordset=nothing

Ciao a tutti,
ho una routine che è nata inizialmente per effettuare delle operazioni su
di una tabella passandogli un ID come stringa.
Public Sub Calcolo (IDk as string)
  rs.activeconnection=adocn
  rs.source= "select * from tabella where IDk=" & Idk
  rs.open
  do until rs.eof
    'tutta la mia routine
  loop
end sub
Ora avrei un programma che mi apre quel recordset a monte, e quindi vorrei
usare la stessa routine (che sta in un modulo globale usata da più
applicazioni), però passandogli il recordset aperto.
Qualcosa tipo:
Public Sub Calcolo (IDk as string, Optional Rs as ADODB.Recordset)
  if rs=nothing then 'Lo apro se non passo niente
    rs.activeconnection=adocn
    rs.source= "select * from tabella where IDk=" & Idk
    rs.open
  endif  
  do until rs.eof
      'tutta la mia routine
  loop
end sub
Come mi consigliate di procedere?
Grazie

 end sub
-- 
ciao, hal

     */
La pensavo anche io cosě. Ma poi qualcuno di bravo bravo ha detto che mi
sbagliavo...
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
Se i tempi non chiedono la tua parte migliore, inventa altri tempi. 
(Baolian, libro II, vv. 16-17)
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 sbagliavo...
io invece non ne dubito, ma vorrei capire la differenza, cioè quali sono
all'atto pratico le conseguenze delle due diverse assegnazioni.
(Comunque in genere non utilizzo la proprietà ActiveConnection, ma passo il
parametro al metodo rs.Open. Ora sono fuori casa, appena vado a casa vado a
vedere cosa dice il Balena su ActiveConnection).
Hal, i tuoi interventi sono sempre illuminanti, sarei interessatissimo a
saperne di più.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 all'atto pratico le conseguenze delle due diverse assegnazioni.
La differenza è molto semplice, ed è una delle caratteristiche distintive
di visual basic (before net)
Gli oggetti hanno, per cercare di semplificare la vita al programmatore,
delle proprietà predefinite. In pratica, vuol dire che se scrivo solo il
nome dell'oggetto non mi sto riferendo all'oggetto stesso, ma alla sua
proprietà predefinita. A prima vista è molto comodo: se supponiamo di
avere un controllo TextBox che si chiama myText, possiamo scrivere
myText = "Pippo"
ottenendo lo stesso effetto di
myText.Text = "Pippo"
Peccato che, se uno non è ben cosciente della cosa, si possano creare
delle antipatiche situazioni. Prendiamo in esame il caso dell'active
connection:
rs.activeconnection = myConn
Non sto assegnado l'oggetto myConn al recordset (descrizione imprecisa, ma
passamela), mi sto riferendo alla proprietà predefinita delle due
connessioni. In realtà sto facendo in modo che la connessione del
recordset e myConn condividano la stessa ConnectionString, ma sono di
fatto due oggetti diversi (due istanze diverse della stessa classe)
se invece scrivo 
Set rs.activeconnection = myConn
faccio in modo che sia rs.activeconnection che myConn si riferiscano allo
stesso oggetto.
Spero di essermi spiegato. (e di aver capito la domanda too)


 delle proprietà predefinite.
[cut]
L'hai scritto di tuo pugno o è un copiaincolla di un (mio?) vecchio 
post?
Non che dubiti delle tue capacità, ma ho avuto come un deja-vu...
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

 post?
Materialmente, l'ho scritto di mio pugno.
Che sia poi un plagio di un tuo post, è possibile.
Ma anche il tuo post, con tutta probabilità, è una semplice riproduzione
del testo di un qualche libro...


 Set rs.activeconnection = myConn
cioè, se ho ben capito, se scrivo...
rs.activeconnection = myConn
è come se avessi scritto...
rs.activeconnection = myConn.ConnectionString
...?
E questo succede se dimentico il Set? Mmhhhh, se è così ho capito tutto.
Infatti ora che ci penso hal parlava di assegnare con o senza Set. Io
utilizzo sempre il Set per cui non mi era mai capitato. OK, tutto chiaro.
Non ho capito però cosa significa il discorso del Let implicito.


 Non ho capito però cosa significa il discorso del Let implicito.
Neanche io. In che senso Let implicito?


 Neanche io. In che senso Let implicito?
Forse il poster pensava che esistesse una forma di polimorfismo anche 
in VB6 (come è invece comune in .Net o nei veri linguaggi OO), per cui 
viene invocata una proprietà od un altra a seconda di cosa venga 
passato: Usando il set viene invocata la Property Set, senza il set 
viene invocata la Property Let.
Non mi risulta.
Ciao


 Non mi risulta.
In effetti però è proprio quello che avviene con le property di tipo Variant, se
si definiscono entrambi gli accessori Let e Set.
Bye
Raf

 ....?
Spero di non dire una castroneria ma...
Usando il Set (come dice Sergio) faccio in modo che le due "variabili
oggetto" si riferiscano allo stesso oggetto in memoria :-) quindi
dovrebbe trattarsi di una semplice copia di un puntatore (un Long).
_NON_ usando il set si tratta di una copia di stringa, occore vedere se,
in questo caso, VB copia il puntatore alla BSTR oppure copia tutta la
stringa....
Se fosse cosě, sarebbe PIU' MEGLIO usare il Set, no?!
Tnx!
-- 
Free As In Freedom
www.fsf.org

 stringa....
No.
Senza Set VB tenta una conversione implicita usando la proprietà di default.
Ciao