Ho questa situazione (semplificata)
Create Procedure "spFiltra"
As
DECLARE @Condizioni NVARCHAR(100)
IF EXISTS (SELECT 1 FROM sysobjects WHERE OBJECT_NAME(id) =
'##Tabella1')
DROP TABLE ##Tabella1
IF EXISTS (SELECT 1 FROM sysobjects WHERE OBJECT_NAME(id) =
'##Tabella2')
DROP TABLE ##Tabella2
SELECT * INTO ##Tabella1 FROM TabellaDB
SET @Condizioni = 'SELECT * INTO ##Tabella2 FROM ## Tabella1'
EXEC @Condizioni
SELECT * FROM ##Tabella2
Le cancellazioni iniziali mi servono poiche' la SP viene lanciata anche
piu' volte per la stessa connessione.
La prima select che porta l'elaborazione dei dati della tabellaDB in
##Tabella1 mi visualizza l'errore dicendomi che già "esiste una tabella
con il nome ##Tabella1"
Utilizzo L'EXEC poiche' le mie condizioni rappresentano un stringa che
conpongo a seconda dei parametri che mi passano e quindi eseguo l'exec su
una query costruita dinamicamente.
Cosa c'e' che non va?
--
Vincent
VB6+SP5 Windows 2000 SP3
MSDE 7
==========================
IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE OBJECT_NAME(id) =
'##Tabella1')
==========================
Ciao...
Luca Bianchi
"Vincenzo Morgante" <vmor...@NOSPAMhotmail.com> wrote in message
news:Xns933D92D639895vm...@207.46.248.16...
In query analyzer tutto ok mi ritorna le righe che mi interessano.
Richiamando la SP in VB:
... passaggio parametri etc....
set rsRicerca = cmd.execute
il recordset non risulta popolato e l'0associazione tra rsricerca e
mshflexgrid:
set griglia.datasource = rsricerca
mi genera:
Errore Runtime 30022
Il controllo Hierarchical FlexGrid non supporta il tipo di associazione di
dati necessario.
(questo e' un bug del controllo ma non capisco come mai mi viene fuori solo
quando la mia procedura prende i record facendo una select da una tabella
temporanea)
Ti ripeto l'esempio. la mia procedura (semplificata) fa questo
SELECT * INTO #Tabella1 FROM TabellaDB
DELETE FROM #Tabella1 WHERE Campo = 0
DELETE FROM #Tabella1 WHERE Campo1 = 0
SELECT * FROM #Tabella1
in QA tutto ok. Ritorna 5 righe.
Ho la mia routine in VB (griglia e' un controllo MSHflexgrd)
Public Function pippo() As ADODB.Recordset
Dim cmd As ADODB.Command
Dim rsRicerca As ADODB.Recordset
Dim Params As ADODB.Parameters
' SELEZIONA LA SP DA ESEGUIRE,CONNESSIONE ECC...
Set cmd = New ADODB.Command
With cmd
Set .ActiveConnection = cnn
.CommandText = "spprovatabellatemporanea"
.CommandType = adCmdStoredProc
End With
Set Griglia.datasource = cmd.Execute()
Set cmd = Nothing
End Function
Se eseguo questa
CREATE Procedure spProvaTabellaTemporanea
as
SELECT *
INTO #Tabella
FROM TabellaStatica
SELECT * FROM #Tabella
Return 0
mi genera errore il controllo (ed il recordset e' vuoto)
mentre se eseguo
CREATE Procedure spProvaTabellaTemporanea
as
SELECT *
FROM TabellaStatica
Return 0
allora funziona tutto a meraviglia.
E' unbug o le tabelle temporanee creano problemi richiamando le SP da VB?
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B189998
Hai fatto ciò che indica l'articolo nella sezione Resolution?
Inoltre perchè crei prima la tabella con l'istruzione SELECT...INTO e poi
elimini alcuni record? Ti servono in precedenza? Sai, sono un pignolo e non
posso vedere "istruzioni simili"... :-))))))))))))))
Ciao...
Luca Bianchi
"Vincenzo Morgante" <vmor...@NOSPAMhotmail.com> wrote in message
news:Xns933DA0EC3F8A0vm...@207.46.248.16...
> http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B189998
si si l'avevo trovato ma non mi risolve il problema. ho ripostato l'esempio
pulito.
Faccio la select di tutto poiche' mi trovo a concatenare ed elaborare
risultati di altri risultati di selezioni.... perdono ma e' l'unica strada
(tanto e' un gestionale ed i record non sono tantissimi) ;-)
Ciao Vincenzo,
> Ho trovato il problema. Vorrei la soluzione...
>
Credo che sia sufficiente aggiungere una SET NOCOUNT ON alla definizione
della Stored Procedure.
CREATE PROCEDURE spProvaTabellaTemporanea
AS
SET NOCOUNT ON
SELECT *
INTO #Tabella
FROM Northwind.dbo.Customers
SELECT * FROM #Tabella
RETURN 0
Private Sub Command1_Click()
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rsRicerca As ADODB.Recordset
Dim Params As ADODB.Parameters
Set cn = New ADODB.Connection
With cn
.Provider = "SQLOLEDB"
.ConnectionString = "Data Source=localhost;" & _
"Initial Catalog=tempdb;" & _
"Integrated Security=SSPI"
.Open
End With
Set cmd = New ADODB.Command
With cmd
Set .ActiveConnection = cn
.CommandText = "spprovatabellatemporanea"
.CommandType = adCmdStoredProc
End With
Set Griglia.DataSource = cmd.Execute()
Set cmd = Nothing
End Sub
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
UGIdotNET - http://www.ugidotnet.org
UGISS - http://www.ugiss.org
sei un mago... ma non mi spiego sta cosa....
Ciao Vincenzo,
> sei un mago... ma non mi spiego sta cosa....
>
Si, sono il mago Casanova :-))
Guarda, le mie sono solo supposizioni, ma credo che la Flex Grid "vada in
palla" quando riceve + messaggi indicanti il numero di righe restituire da
un result set.
La SELECT INTO *non* restituisce un result set ma restituisce anch'essa il
numero di righe (QA tab Messages)...
Quindi la stored procedure restituisce 1 result set (la SELECT su #Tabella)
con 2 counts (il primo della SELECT INTO ed il secondo della SELECT * FROM
#Tabella).
Le tabelle temporanee non c'entrano.
CREATE PROCEDURE spProvaTabellaTemporanea
AS
SELECT *
INTO Tabella
FROM Northwind.dbo.Customers
SELECT *
FROM Tabella
RETURN 0
Anche questa procedura genera l'errore:
"The Hierarchical FlexGrid does not support the requested type of data
binding."
Mettendo una NOCOUNT ritorna a funzionare.
Leggi attentamente il paragrafo "SET NOCOUNT"
URL:tsqlref.chm::/ts_set-set_3ed0.htm sui Books Online.
Ciao!
--
LETTO E RILETTO DOPO AVER CAPITO GRAZIE A TE LA SOLUZIONE.