Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eagleclaws

[Resolvido] gravação com stored procedure

Recommended Posts

Helllo people ...

 

Tenho um código em asp e estou tentando gravar num banco sql server ...

Mas ele sempre passa para a mensagem de erro do código ... acredito que seja algum problema na conexão com o banco, mas não consegui identificar ..... já testei variável por variável para ver se era algum nome errado, porém o problema está na execução da stored procedure do código ...

se alguém tiver alguma idéia do que possa estar acontecendo, agradeceria ..... é um código para controle de demanda ...

 

if ACAO = "INSERIR" then
		
set cmd = Server.CreateObject("ADODB.Command")
								cmd.ActiveConnection = bd
		cmd.CommandText = "P_DEMANDA_INSERT"
		cmd.CommandType = adCmdStoredProc
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_CD_DEMANDA"	  , adInteger	, adParamOutput	, 18									 )
		cmd.Parameters.Append cmd.CreateParameter( "@TIDE_CD_TIPO"		, adChar	, adParamInput	, 2		, TIDE_CD_TIPO					 )
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_TX_TITULO"	, adVarchar	, adParamInput	, 100	, DEMA_TX_TITULO				 )
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_TX_DETALHE"	, adVarchar	, adParamInput	, 100	, DEMA_TX_DETALHE				 )
		cmd.Parameters.Append cmd.CreateParameter( "@LOTA_CD_LOTACAO"	, adInteger	, adParamInput	, 18	, LOTA_CD_LOTACAO				 )
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_DT_CONCEPCAO"	, adDate, adParamInput, 8	, DEMA_DT_CONCEPCAO						 )
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_DT_GOVERNO"	, adDate, adParamInput	, 8	, DEMA_DT_GOVERNO						 )
		cmd.Parameters.Append cmd.CreateParameter( "@SITU_CD_SITUACAO"	, adInteger	, adParamInput	, 18	, SITU_CD_SITUACAO				 )
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_NR_PORC_ANDAMENTO", adInteger	, adParamInput	, 18	, DEMA_NR_PORC_ANDAMENTO	 )
		cmd.Parameters.Append cmd.CreateParameter( "@DEMA_TX_MOTIVOPENDENCIA", adVarchar, adParamInput, 100 , DEMA_TX_MOTIVOPENDENCIA 		)
		'cmd.Parameters.Append cmd.CreateParameter( "@USER_CD_USER"	, adVarchar	, adParamInput	, 100	, session("Nome_Usuario")	)
		
		on error resume next
		
		cmd.Execute()
		
		if Err then
		
							
				Response.write "-->" & DEMA_CD_DEMANDA & "<br>"
				Response.write "-->" & TIDE_CD_TIPO & "<br>"
				Response.write "-->" & DEMA_NR_PROTOCOLO & "<br>"
				Response.write "-->" & DEMA_TX_TITULO & "<br>"
				Response.write "-->" & DEMA_TX_DETALHE & "<br>"
				Response.write "-->" & LOTA_CD_LOTACAO & "<br>"
				Response.write "-->" & DEMA_DT_CONCEPCAO & "<br>"
				Response.write "-->" & DEMA_DT_GOVERNO & "<br>"
				Response.write "-->" & SITU_CD_SITUACAO & "<br>"
				Response.write "-->" & DEMA_NR_PORC_ANDAMENTO & "<br>"
				response.write "-->" & DEMA_TX_MOTIVOPENDENCIA & "<BR>"
				RESPONSE.WRITE "-->" & DEMA_DT_PREVISTA & "<BR>"
				Response.write "-->" & ACAO & "<br>"
				
				Response.write "<script>alert('Ocorreu erro ao tentar registrar a demanda !');history.back();</script>"
				
				RESPONSE.END 
			
		else
			Response.write "<script>alert('Demanda Registrada !');location.href = 'Demanda3.asp';</script>"
		end if
		
		on error goto 0
		
		set cmd = nothing
	
	end if

 

 

e no banco o código é :

 

CREATE PROCEDURE [dbo].[P_DEMANDA_INSERT] 
(
	@DEMA_CD_DEMANDA int OUTPUT ,
	@TIDE_CD_TIPO char(2) = '',
	--@DEMA_NR_PROTOCOLO int = NULL,
	@DEMA_TX_TITULO nvarchar(100) = null
	@DEMA_TX_DETALHE nvarchar(100) = NULL,
	@LOTA_CD_LOTACAO INT = NULL,
	@DEMA_DT_CONCEPCAO datetime = null,
	@DEMA_DT_GOVERNO datetime = null,
	@SITU_CD_SITUACAO INT = NULL,
	@DEMA_NR_PORC_ANDAMENTO INT = NULL,
	@DEMA_TX_MOTIVOPENDENCIA nvarchar(100) = null,
	@USER_CD_USER nVARCHAR (100)
	
)
AS

	SET NOCOUNT ON
		
		INSERT INTO [TB_DEMANDA]
		(
			[DEMA_CD_DEMANDA],
			[TIDE_CD_TIPO],
			[DEMA_NR_PROTOCOLO],
			[DEMA_TX_TITULO],
			[DEMA_TX_DETALHE],
			[LOTA_CD_LOTACAO],
			[DEMA_DT_CONCEPCAO],
			[DEMA_DT_GOVERNO],
			[SITU_CD_SITUACAO],
			[DEMA_NR_PORC_ANDAMENTO],
			[DEMA_TX_MOTIVOPENDENCIA]
			--[USER_CD_USER]
		)
		VALUES
		(
			@DEMA_CD_DEMANDA,
			@TIDE_CD_TIPO,
			@DEMA_NR_PROTOCOLO,
			@DEMA_TX_TITULO,
			@DEMA_TX_DETALHE,
			@LOTA_CD_LOTACAO,
			GETDATE(),
			@DEMA_DT_GOVERNO,
			@SITU_CD_SITUACAO,
			@DEMA_NR_PORC_ANDAMENTO,
			@DEMA_TX_MOTIVOPENDENCIA
			--@USER_CD_USER
			
		)

		SELECT @DEMA_CD_DEMANDA = SCOPE_IDENTITY()

	RETURN @@Error
GO

that's all ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

'Funcao
Public Function MyCmd(strSP,cmdType,blnRefreshParam)
	dim cmdAuX
   	Set CmdAux = server.CreateObject("ADODB.Command")
	With CmdAux
		.ActiveConnection = adoCn
		.CommandType = cmdType
		.CommandText = strSP
		If blnRefreshParam Then .Parameters.Refresh
	End With
	SET MyCmd=cmdAux
	SET cmdAux = NOTHING
End Function
'Uso
with MyCmd("sp", adCmdStoredProc, true)
		.parameters("@Action").value = ""
		.parameters("@..").value = 
		.execute
	end with
talvez nao seja isso mas nao custa ver

tens duas intruções. logo tens de por um begin e end no codigo

begin

o teu codigo sql

End

 

e em relação ao uso do teu cmd, verifica se corresponde

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ja agora , quando alterares a tua sp tira os [] e poe ALTER em vez de CREATE

 

Cumps

 

p.s : Depois diz se funcionou ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

'Funcao
Public Function MyCmd(strSP,cmdType,blnRefreshParam)
	dim cmdAuX
   	Set CmdAux = server.CreateObject("ADODB.Command")
	With CmdAux
		.ActiveConnection = adoCn
		.CommandType = cmdType
		.CommandText = strSP
		If blnRefreshParam Then .Parameters.Refresh
	End With
	SET MyCmd=cmdAux
	SET cmdAux = NOTHING
End Function
'Uso
with MyCmd("sp", adCmdStoredProc, true)
		.parameters("@Action").value = ""
		.parameters("@..").value = 
		.execute
	end with
talvez nao seja isso mas nao custa ver

tens duas intruções. logo tens de por um begin e end no codigo

begin

o teu codigo sql

End

 

e em relação ao uso do teu cmd, verifica se corresponde

 

 

Olá Christophe.... fiz o seguinte com o exemplo de código que você me mandou .....

 

<% 
	DEMA_CD_DEMANDA = replace(ucase(request.Form("DEMA_CD_DEMANDA")), "'", "''")
	TIDE_CD_TIPO = replace(ucase(request.Form("rdoTipo")), "'", "''")
	'DEMA_NR_PROTOCOLO = replace(ucase(request.Form("txtProtocolo")), "'", "''")
	DEMA_TX_TITULO = replace(ucase(request.Form("txtTituloDemanda")), "'", "''")
	DEMA_TX_DETALHE = replace(ucase(request.Form("txtDetalheDemanda")), "'", "''")
	LOTA_CD_LOTACAO = replace(ucase(request.Form("cboLotacao")), "'", "''")
	DEMA_DT_CONCEPCAO = replace(ucase(request.Form("DEMA_DT_CONCEPCAO")), "'", "''")
	DEMA_DT_GOVERNO = replace(ucase(request.Form("DEMA_DT_GOVERNO")), "'", "''")
	SITU_CD_SITUACAO = replace(ucase(request.Form("SITU_CD_SITUACAO")), "'", "''")
	DEMA_NR_PORC_ANDAMENTO = replace(ucase(request.Form("txtPorcentagem")), "'", "''")
	DEMA_TX_MOTIVOPENDENCIA = replace(ucase(request.Form("DEMA_TX_MOTIVOPENDENCIA")), "'", "''")
	
	ACAO =  replace(ucase(request.Form("acao")), "'", "''")
	
	if ACAO = "INSERIR" then

		Function MyCmd(strSP,cmdType,blnRefreshParam)
		dim cmdAuX
			Set CmdAux = server.CreateObject("ADODB.Command")
			With CmdAux
				.ActiveConnection = bd
				.CommandType = cmdType
				.CommandText = P_DEMANDA_INSERT
				If blnRefreshParam Then .Parameters.Refresh
			End With
			SET MyCmd=cmdAux
			SET cmdAux = NOTHING
		End Function


'Uso
		with MyCmd("sp", adCmdStoredProc, true)
			'.parameters("@Action").value = ""
			.Parameters.Append .CreateParameter("@DEMA_CD_DEMANDA", adInteger, adParamInput, 18)
			.Parameters.Append .CreateParameter("@TIDE_CD_TIPO", adChar, adParamInput, 2, TIDE_CD_TIPO)
			.Parameters.Append .CreateParameter("@DEMA_TX_TITULO", adVarchar	, adParamInput	, 100	, DEMA_TX_TITULO)
			.Parameters.Append .CreateParameter("@DEMA_TX_DETALHE", adVarchar	, adParamInput	, 100	, DEMA_TX_DETALHE)
			.Parameters.Append .CreateParameter("@LOTA_CD_LOTACAO", adInteger	, adParamInput	, 18	, LOTA_CD_LOTACAO)
			.Parameters.Append .CreateParameter("@DEMA_DT_CONCEPCAO", adDate, adParamInput, 8	, DEMA_DT_CONCEPCA)
			.Parameters.Append .CreateParameter("@DEMA_DT_GOVERNO", adDate, adParamInput	, 8	, DEMA_DT_GOVERNO)
			.Parameters.Append .CreateParameter("@SITU_CD_SITUACAO", adInteger	, adParamInput	, 18	, SITU_CD_SITUACAO)
			.Parameters.Append .CreateParameter("@DEMA_NR_PORC_ANDAMENTO", adInteger	, adParamInput	, 18	, DEMA_NR_PORC_ANDAMENTO)
			.Parameters.Append .CreateParameter("@DEMA_TX_MOTIVOPENDENCIA", adVarchar, adParamInput, 100 , DEMA_TX_MOTIVOPENDENCIA)
		
			.execute
		end with
		
		if Err then
		
				'Response.write "<script>alert('Ocorreu erro ao tentar registrar a demanda !');history.back();</script>"
				
				Response.write "-->" & DEMA_CD_DEMANDA & "<br>"
				Response.write "-->" & TIDE_CD_TIPO & "<br>"
				Response.write "-->" & DEMA_NR_PROTOCOLO & "<br>"
				Response.write "-->" & DEMA_TX_TITULO & "<br>"
				Response.write "-->" & DEMA_TX_DETALHE & "<br>"
				Response.write "-->" & LOTA_CD_LOTACAO & "<br>"
				Response.write "-->" & DEMA_DT_CONCEPCAO & "<br>"
				Response.write "-->" & DEMA_DT_GOVERNO & "<br>"
				Response.write "-->" & SITU_CD_SITUACAO & "<br>"
				Response.write "-->" & DEMA_NR_PORC_ANDAMENTO & "<br>"
				response.write "-->" & DEMA_TX_MOTIVOPENDENCIA & "<BR>"
				'RESPONSE.WRITE "-->" & DEMA_DT_PREVISTA & "<BR>"
				Response.write "-->" & ACAO & "<br>"
				
				Response.write "<script>alert('Ocorreu erro ao tentar registrar a demanda !');history.back();</script>"
				
				RESPONSE.END 
			
		else
			Response.write "<script>alert('Demanda Registrada !');location.href = 'Demanda3.asp';</script>"
		end if	
	end if
%>

 

Mas agora tah dando o seguinte erro:

Microsoft OLE DB Provider for SQL Server (0x80040E14)

Syntax error or access violation

line 51

 

linha 51 é o .execute .....

 

pensei que fosse o P_DEMANDA_INSERT sem as aspas ... mas quando coloco as aspas da a seguinte mensagem ....

Microsoft OLE DB Provider for SQL Server (0x80040E14)

Procedure or function P_DEMANDA_INSERT has too many arguments specified.

line 51

 

 

Mas acho que estamos caminhando .....

vcs conseguem identificar esse problema ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

a tua sp chama-se mesmo "sp" ? onde tens "with MyCmd("sp", adCmdStoredProc, true)" onde diz sp é o nome que lhe atribuiste neste caso penso que seria "P_DEMANDA_INSERT"

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu uso as minhas sp's assim

set ANSI_NULLS OFF
set QUOTED_IDENTIFIER ON
GO
-- Stored Procedure

ALTER PROCEDURE [dbo].[spMatPrimasUndAlternativas]
	@Action CHAR(1),
	@idUnidade INT = 0,
	@taxaConversao REAL = 0,
	@idUnidadeAlternativa INT = 0,
	@idMatPrima INT = 0,
	@idTipoOperacao INT = 0
AS
IF @Action = 'D' --Inactivar unidade alternativa
	Update TblUnidadesAlternativas SET Activo = 0 WHERE (idUnidadeAlternativa = @idUnidadeAlternativa)

IF @Action = 'I' --Inserir unidade alternativa
	INSERT INTO TblUnidadesAlternativas
		(idUnidade
		,TaxaConversao
		,idProduto
		,idTipoOperacao)
	 VALUES
		(@idUnidade
		,@taxaConversao
		,@idMatPrima
		,@idTipoOperacao)

if @Action = 'L' --Listagem das Unidades Alternativas
		SELECT	 
			TblUnidadesAlternativas.idUnidadeAlternativa, 
			TblUnidadesAlternativas.TaxaConversao, 
			TblUnidades.codUnidade, 
			TblUnidades.descUnidade, 
			TblTipoOperacao.descTipoOperacao,
			TblTipoOperacao.idTipoOperacao
		FROM		 
			TblUnidadesAlternativas INNER JOIN
			TblUnidades ON TblUnidadesAlternativas.idUnidade = TblUnidades.idUnidade INNER JOIN
			TblTipoOperacao ON TblUnidadesAlternativas.idTipoOperacao = TblTipoOperacao.idTipoOperacao
		WHERE	 
			(TblUnidadesAlternativas.idProduto = @idMatPrima) AND
			(TblUnidadesAlternativas.Activo = 1)

e quando as quero executar sem que elas me devolvam um valor executo assim para as que nao devolvem recordset

 

Set CN=Server.CreateObject("ADODB.CONNECTION")
	CN.Open Application("CN")
	
	'####### Eliminar Valor ################
		if request.form("txtaccao") = "D" then
			CN.execute "spMatPrimasUndAlternativas @Action = 'D', @idUnidadeAlternativa = " & request.form("txtIdEliminar")
		end if
	'####### Fim do eliminar valor #########
	
	'######## Inserir Valor #########
		if request.form("txtAccao") = "I" then
			intIdUnidade = request.form("cboUnidades")
			dblConversao  = replace(request.form("txtConversao"), ",", ".")
			intIdOperacao = request.form("cboOperacoes")
			CN.execute "spMatPrimasUndAlternativas @Action = 'I', @idUnidade = " & intIdUnidade & ", @TaxaConversao = " & dblConversao & ", @idMatPrima= " & intIdMatPrima & ", @idTipoOperacao = " & intIdOperacao
		end if
	'######## Fim do inserir ########
	cn.close
	set cn = nothing

 

e assim para as que devolvem

Set CN=Server.CreateObject("ADODB.CONNECTION")
	CN.Open Application("CN")
	Set rstAux=Server.CreateObject("ADODB.RECORDSET")
	With rstAux
		.CursorLocation=3	
		.Open "spMatPrimasUndAlternativas @Action = 'L', @idMatPrima=" & intIdMatPrima, CN

espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe responder agora .. tive alguns eventos inesperados ....

Bom ....

Ainda estou com problema soh que agora modificou um pouco ....

Consigo me conectar com o banco, mas na hora de inserir volta a mensagem de que o campo DEMA_CD_Demanda, que é primary key, não pode ser nulo ...

sendo que a declarei como smallint no sqlserver para auto incremento .....

Não sei se devo fazer uma função de autoincremento no código ou se tenho que fazer alguma coisa no banco para quando conectar já incrementar, sendo que essa foi a idéia inicial tentada ....

Coloquei o ANSI_NULLS OFF na stored procedure,.... mas nada ainda .... mas está mais claro para mim agora que meu problema está no banco ..... pelo menos é o que parece ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

é simples, no sql tens uma propriedade para gerar isso automaticamente

 

seleciona o campo e ve nas propriedades uma que diz "identity specification" ai carregas no mais e la tem uma opção que esta como nao. "(is identy)" selecionas o sim . por defeito acrecenta sempre mais um mas se quiseres alteras e poes como quiseres

 

Depois diz algo ;)

 

Cumps

 

Christophe

Compartilhar este post


Link para o post
Compartilhar em outros sites

é simples, no sql tens uma propriedade para gerar isso automaticamente

 

seleciona o campo e ve nas propriedades uma que diz "identity specification" ai carregas no mais e la tem uma opção que esta como nao. "(is identy)" selecionas o sim . por defeito acrecenta sempre mais um mas se quiseres alteras e poes como quiseres

 

Depois diz algo ;)

 

Cumps

 

Christophe

 

Eu havia feito isso mesmo antes .... mas ainda continua o erro ....

Mas não tem problema ... vou tentar dar um jeito mais tarde ... talvez se eu refizer a tabela .. consiga algum progresso .. pois deve ser alguma coisa simples que não estou visualizando agora ...

Vlw pela atenção ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido ......

 

O problema estava na inserção do código da demanda ......

como eu estava colocando ele como auto-incremento, eu não devia inserir valor na stored procedure .... apenas declará-la como output nada mais .... e eu estava tentando inserir valor que nem existia na SP e nem percebi .... hj com a cabeça mais fresca consegui ver isso .....

Obrigado aew ao Christophe pela ajuda ..... aprendi algumas coisas a mais com você .....

 

vlwww .....

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.