Variabile oggetto o variabile del blocco with non impostata in access ...

domenica 09 maggio 2010 - 05.47

Eracle Profilo | Newbie

Salve,
ho letto un 3d dove si parlava dello stesso problema , ma purtroppo non ho risolto...

Richiamo una SP parametrica e poi voglio che il risultato(di una select) sia associata alla sottomaschera indicata.

Purtroppo su questa riga : Form_form1.Sottomaschera1.Form.Recordset = rst
mi da l'errore indicato nel titolo del post.
Spero in un aiuto risolutivo. Grazie


<code>ConnectionString = Application.CurrentProject.BaseConnectionString
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.ConnectionString = ConnectionString

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim prm As ADODB.Parameter
Set prm = New ADODB.Parameter
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset

cmd.ActiveConnection = ConnectionString
cmd.CommandText = "Prova"
cmd.CommandType = adCmdStoredProc


If Not IsNull(xTesto) Then
If xTipo = 3 Then
Set prm = cmd.CreateParameter("@UO", adVarWChar, adParamInput, 50, xTesto)
cmd.Parameters.Append prm
End If
End If
'

Set rst = cmd.Execute

Form_form1.Sottomaschera1.Form.Recordset = rst

Set rst = Nothing
Set cnn = Nothing

End Sub </code>

lbenaglia Profilo | Guru

>Richiamo una SP parametrica e poi voglio che il risultato(di
>una select) sia associata alla sottomaschera indicata.
>
>Purtroppo su questa riga : Form_form1.Sottomaschera1.Form.Recordset
>= rst
>mi da l'errore indicato nel titolo del post.
>Spero in un aiuto risolutivo. Grazie

Ciao Ferdinando,

Nel codice che hai postato il recordset restituito dal metodo Execute dell'oggetto ADODB.Command è un firehose, ovvero read-only, forward-only, e lato server.
Questo significa che viene restituito un record alla volta ad ogni "fetch" del cursore, quindi sia l'oggetto recordset che connection devono rimanere "in vita" per poter recuperare i dati (mentre tu imposti entrambi a Nothing).
Un modo per aggirare il problema consiste nel definire un cursore lato client in modo che il recorset memorizzi sul client i records restituiti dalla stored procedure.
In questi post illustro due tecniche per ottenere cursori lato client:
http://groups.google.it/group/microsoft.public.it.sql/msg/e9031d9a4d5dcc1c
http://groups.google.it/group/microsoft.public.it.sql/msg/bb1354815ae510f1

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Eracle Profilo | Newbie

Ciao Lorenzo ti ringrazio per la celerità nel rispondere,

Ho modificatol il codice nel modo seguente, in base al primo link che mi hai indicato ma ottengo lo stesso errore.
In debug ottengo lo stesso errore(del titolo del post) su quetsa riga
Form_Form1.SubFormForm1.Recordset = rs


Il mio scopo è quello di popolare la sottomaschera con il risultato della SP ossia avere una "gridview" :

<code>Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
cnn.ConnectionString = ConnectionString

Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim prm As ADODB.Parameter
Set prm = New ADODB.Parameter
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset

cmd.ActiveConnection = ConnectionString
cmd.CommandText = "Prova"
cmd.CommandType = adCmdStoredProc


If Not IsNull(xTesto) Then
If xTipo = 3 Then
Set prm = cmd.CreateParameter("@UO", adVarWChar, adParamInput, 50, xTesto)
cmd.Parameters.Append prm
End If
End If



Set rs = CreateObject("ADODB.Recordset")
With rs
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly


' Apro il recordset utilizzando come sorgente il Command
.Open cmd
End With




Form_Form1.SubFormForm1.Recordset = rs

Set rs = Nothing
Set cnn = Nothing

End Sub </code>

lbenaglia Profilo | Guru

>Ho modificatol il codice nel modo seguente, in base al primo
>link che mi hai indicato ma ottengo lo stesso errore.
Occhio che istanzi la classe Recordset 2 volte:
Set rst = New ADODB.Recordset e Set rs = CreateObject("ADODB.Recordset") sono equivalenti.

>In debug ottengo lo stesso errore(del titolo del post) su quetsa
>riga
>Form_Form1.SubFormForm1.Recordset = rs

Hai provato a mettere un Set?
Set Form_Form1.SubFormForm1.Recordset = rs

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Eracle Profilo | Newbie

>>Ho modificatol il codice nel modo seguente, in base al primo
>>link che mi hai indicato ma ottengo lo stesso errore.
>Occhio che istanzi la classe Recordset 2 volte:
>Set rst = New ADODB.Recordset e Set rs = CreateObject("ADODB.Recordset")
>sono equivalenti.
>
Se noti sono due oggetti diversi 'rs' e 'rst'
>>In debug ottengo lo stesso errore(del titolo del post) su quetsa
>>riga
>>Form_Form1.SubFormForm1.Recordset = rs
>
>Hai provato a mettere un Set?
>Set Form_Form1.SubFormForm1.Recordset = rs
>
>Ciao!
>--

Mancava proprio il set. Grazie mille sei stato risolutivo :)
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org

Inoltre nella soluzione sopra esposta tramite @@rowcount e l'oggetto cmd.Parameters(..).value ottengo il numero di righe.

Ora vorre i ottenere lo stesso risultato usando l'oggetto recordsource.
Per quanto riguarda la VISUALIZZAZIONE del risultato della stored procedure nella sottomaschera non ho problemi:

<code>
Private Sub Form_Load()
ConnectionString = Application.CurrentProject.BaseConnectionString
SQL_Form = ""
strStep = ""

xTipo = mgPeek("Tmp", 7, "Scelta2")



SQL_Form = "Exec [dbo].[Get_Records_For_TestOreLavorate_Form] "
strStep = ""


If xTipo = 3 Then
SQL_Form = SQL_Form & strStep & " @UO = " & "'" & xTesto & "'"
strStep = ","

End If


Form_Form1.SubForm.Form.RecordSource = SQL_Form
Form_Form1.Etichetta98.Caption = ????
End Sub
</code>

Nella soluzione precedente ottenevo il numero di record con :Form_Form1.Etichetta98.Caption =cmd.Parameters("@numRighe").Value
(ovviamente dichiarando nella SP un parametro di outut e aggiungendo nell'oggetto parameter)

utilizzando quets'altra soluzione come posso ottenere il numero di righe???


Grazie

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5