Variabili table in sqlserver 2000

giovedì 11 maggio 2006 - 16.05

alekos66 Profilo | Newbie

salve ho creato una storeprocedure che carica una variabile tpo table
'CREATE PROCEDURE sptcondconsiglieri @immobile_id varchar(6)
as
DECLARE @tbl table(condomio_id Varchar(6),titlo varchar(5),nominativo varchar(256),stato int)
DECLARE @colA nvarchar(50)
DECLARE @MyCursor CURSOR
/*declare @mycursor1 cursor*/

SET @MyCursor = CURSOR FAST_FORWARD
FOR
Select nome_consigliere
From t_immoconsiglieri
where immobile_id=@immobile_id
order by posizione
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @ColA
WHILE @@FETCH_STATUS = 0
BEGIN



Insert @tbl
SELECT dbo.T_Condomini.Condomino_id,dbo.T_Condomini.titolo,dbo.T_Condomini.Nominativo,dbo.T_UniCond.StCon_id
FROM dbo.T_Condomini INNER JOIN
dbo.T_UniCond ON dbo.T_Condomini.Condomino_id = dbo.T_UniCond.Condomino_id INNER JOIN
dbo.T_Unita ON dbo.T_UniCond.Unita_id = dbo.T_Unita.Unita_id
WHERE (dbo.T_Condomini.Nominativo = @ColA) AND (dbo.T_UniCond.Dta_fine = '21001231') AND (dbo.T_Unita.Immobile_id =@immobile_id) and dbo.T_UniCond.StCon_id<>3
FETCH NEXT FROM @MyCursor
INTO @ColA
END

CLOSE @MyCursor
DEALLOCATE @MyCursor

select * from @tbl

/*SET QUOTED_IDENTIFIER OFF*/
GO
la richiamo da vb6 e e assegno il risulato ad un recordset
Dim rs As Variant
Set cmd = New ADODB.Command
Dim pm As New ADODB.Parameter
' conn.BeginTrans
Set cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
Set pm = cmd.CreateParameter("immobile_id", adVarChar, adParamInput, 6, immobile_id)
cmd.Parameters.Append pm
cmd.CommandText = "sptcondconsiglieri"
Set rs = cmd.Execute
quando vado a controllare se il recordset è vuoto
If Not rs.EOF Then
vb6 mi segnala di non poter lavorare su di uno oggetto chiuso.
C'è qualcuno che sa darmi una soluzione
Grazie

lbenaglia Profilo | Guru

>la richiamo da vb6 e e assegno il risulato ad un recordset
>Dim rs As Variant

Ciao alekos66,

Perché rs è definito come Variant e non come ADODB.Recordset?

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

alekos66 Profilo | Newbie

Ciao
Ho provato prima a definirlo come adodb.recordset ma mi dava lo stesso messaggio di errore.
Ho provato come variant ma non è cambiato nulla.
Grazie

lbenaglia Profilo | Guru

>Ho provato prima a definirlo come adodb.recordset ma mi dava
>lo stesso messaggio di errore.
>Ho provato come variant ma non è cambiato nulla.

Eh si, certo, ma evita di utilizzare Variant in futuro
Guarda, a occhio non riesco ad individuare il problema.
Confeziona un piccolo esempio che riproduca la situazione (tabelle, dati, stored procedure ed un esempietto in .vbs) in modo da darci un'occhiata.

>Grazie
Prego.

Ciao!

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

alekos66 Profilo | Newbie

Il problema sembra legato alla variabile table che viene distrutta dopo l'esecuzione della store,
sai mica se posso assegnare il risultato a qualche tipo di variabile output che accetti più righe tipo un array??

lbenaglia Profilo | Guru

>Il problema sembra legato alla variabile table che viene distrutta
>dopo l'esecuzione della store,
>sai mica se posso assegnare il risultato a qualche tipo di variabile
>output che accetti più righe tipo un array??

No, non puoi.
Prova a sostituire alla variabile @tbl una tabella temporanea.
Altrimenti posta i dati che ti ho chiesto e vedrò di smanettare un pochino

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

alekos66 Profilo | Newbie

Ho provato con una tabella vera
non va uguale.
Da ulteriori indagini, mediante Osql da dos ottengo questo
1> use condominio
2> exec sptcondconsiglieri
3> @immobile_id='c00001'
4> go
(modificata 1 riga)
(modificata 1 riga)
(modificate 0 righe)
(modificate 0 righe)
(modificate 0 righe)
Condomio_id titolo Nominativo stato
----------- ------ ---------------------------------------------------------------------------------------------------- -----------
I00001 Ing A******* A********** 1

(modificata 1 riga)

Il problema sembra legato al fatto che le rpime risposte non siano i dati della tabella ma le indicazioni sulla modifiche effettuate.
Infatti se divido la store in due con una prima che carica la tabella e una seconda che richiede il contenuto tutto funziona.
Non è che non posso mettere insieme in una stessa storeprocedure istruzioni che modificano i dati e altre che richiedono dati?
In poche parole non è che non posso mettere istruzioni update o insert con istruzioni select?

lbenaglia Profilo | Guru

>Da ulteriori indagini, mediante Osql da dos ottengo questo
>1> use condominio
>2> exec sptcondconsiglieri
>3> @immobile_id='c00001'
>4> go
>(modificata 1 riga)
>(modificata 1 riga)
>(modificate 0 righe)
>(modificate 0 righe)
>(modificate 0 righe)
>Condomio_id titolo Nominativo
>stato
>----------- ------ ----------------------------------------------------------------------------------------------------
>-----------
>I00001 Ing A******* A**********
>1
>
>(modificata 1 riga)
>
>Il problema sembra legato al fatto che le rpime risposte non
>siano i dati della tabella ma le indicazioni sulla modifiche
>effettuate.

OK, prova ad aggiungere una SET NOCOUNT ON come prima istruzione della stored procedure.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5