Newsgroup: it.comp.lang.visual-basic
Titolo: Store Procedure

Eseguando il seguente codice, alla fine il recorset mi restituisce sempre
.RecordCount = -1, perchč?
Premetto: il campo PIva esiste, SQLServer č attivo e non da nessune errore
in compilazione.
    cmd.CommandText = "CheckCliente"
    cmd.CommandType = adCmdStoredProc
    cmd.Parameters.Append cmd.CreateParameter("PIva", adVarChar,
adParamInput, 11)
    cmd("PIva") = "99999999999"
    Set rstCliente = cmd.Execute


mah... sinceramente non ho mai scritto codice del genere, cmq col buon
vecchio DAO il problema si risolveva facendo:
    If Not (rstCliente.EOF And rstCliente.BOF) Then _
        rstCliente.MoveLast
Ciao
Faber


E col buon vecchio DAO come si fa ad eseguire StoredProcedure ?
::::---)))
Comunque ...
credo che l'errore stia nel fatto che accodi il parametro senza il valore
"9999999999".
Dopo l'istruzione cmd("PIVA") = "9999999999" usa il metodo
Cmd.parameter.refresh
Spero funzioni !
Ciao       e fammi sapere
Davide


Prova a seguire questo esempio, estratto da MSDN...
Public Sub AppendX()
   Dim cnn1 As ADODB.Connection
   Dim cmdByRoyalty As ADODB.Command
   Dim prmByRoyalty As ADODB.Parameter
   Dim rstByRoyalty As New ADODB.Recordset
   Dim rstAuthors As New ADODB.Recordset
   Dim intRoyalty As Integer
   Dim strAuthorID As String
   Dim strCnn As String
   ' Open connection.
   Set cnn1 = New ADODB.Connection
   strCnn = "Provider=sqloledb;" & _
      "Data Source=srv;Initial Catalog=Pubs;User Id=sa;Password=; "
   cnn1.Open strCnn
   cnn1.CursorLocation = adUseClient
   ' Open command object with one parameter.
   Set cmdByRoyalty = New ADODB.Command
   cmdByRoyalty.CommandText = "byroyalty"
   cmdByRoyalty.CommandType = adCmdStoredProc
   ' Get parameter value and append parameter.
   intRoyalty = Trim(InputBox("Enter royalty:"))
   Set prmByRoyalty = cmdByRoyalty.CreateParameter("percentage", _
      adInteger, adParamInput)
   cmdByRoyalty.Parameters.Append prmByRoyalty
   prmByRoyalty.Value = intRoyalty
   ' Create recordset by executing the command.
   Set cmdByRoyalty.ActiveConnection = cnn1
   Set rstByRoyalty = cmdByRoyalty.Execute
   ' Open the Authors table to get author names for display.
   Set rstAuthors = New ADODB.Recordset
   rstAuthors.Open "Authors", cnn1, , , adCmdTable
   ' Print current data in the recordset, adding
   ' author names from Authors table.
   Debug.Print "Authors with " & intRoyalty & " percent royalty"
   Do While Not rstByRoyalty.EOF
      strAuthorID = rstByRoyalty!au_id
      Debug.Print "   " & rstByRoyalty!au_id & ", ";
      rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
      Debug.Print rstAuthors!au_fname & " " & rstAuthors!au_lname
      rstByRoyalty.MoveNext
   Loop
   rstByRoyalty.Close
   rstAuthors.Close
   cnn1.Close
End Sub
Ciao
Lorenzo




Ho provato ad eseguire il tuo codice ed in effetti non funzione .. nemmeno
come ti avevo suggerito prima puň funzionare .
Il fatto č che viene creato (e aggiunto) un parametro senza valore; quindi
l'oggetto command trasferisce alla SP un valore (probabilmente Null) non
compatibile col parametro della SP stessa.
Ti consiglio quindi i seguenti modi :
1) fai come nell'esempio dell'MSDN : crei un oggetto Parameter, lo definisci
(Name, Size,Direction,Value  ..) e lo aggiungi alla collection Parameters
del tuo oggetto command.
2) fai tutto con un'unica istruzione :
cmd.Parameters.Append cmd.CreateParameter("PIva", adVarChar,adParamInput,
11,"99999999999")
quindi esegui il metodo cmd.Execute
Prova un po' e fammi sapere ...
Ciao