Ir para conteúdo

Arquivado

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

wren

Inserir dados de checkbox

Recommended Posts

Olá galera. Tem alguma forma de criar uma procedure que insira dados de uma checkbox, tipo, quando vários estão selecionados??

 

Já procurei aqui e não encontrei e eu não quero fazer no código ASP.

 

Caso alguém tenha essa ajuda, agradeço desde já.

 

SOLUCIONADO (temporariamente, pois vou ver se dá pra aprimorar)

 

 

 

CREATE PROCEDURE SP_INSERIR_CADASTRO_DESTINO@des_titulo VARCHAR(100),@reg_id INT,@est_id INT,@cid_id INT,@des_sobre NTEXT,@des_clima NTEXT,@des_como_chegar NTEXT,@des_hospedagem NTEXT,@des_dados_local NTEXT,@des_servicos NTEXT,@des_links NTEXT,@des_atracoes NTEXT,@usu_id INT,@can_id VARCHAR(50),@tiv_id VARCHAR(50)ASDECLARE @valor INTINSERT tab_destino(des_titulo, reg_id, est_id, cid_id, des_sobre, des_clima, des_como_chegar, des_hospedagem, des_dados_local, des_servicos, des_links, des_atracoes, usu_id)VALUES(@des_titulo, @reg_id, @est_id, @cid_id, @des_sobre, @des_clima, @des_como_chegar, @des_hospedagem, @des_dados_local, @des_servicos, @des_links, @des_atracoes, @usu_id)SET @valor = (SELECT SCOPE_IDENTITY() des_id)SET NOCOUNT ON 	  DECLARE @CheckID varchar(10), @Pos int 	  SET @can_id = LTRIM(RTRIM(@can_id))+ ','	  SET @Pos = CHARINDEX(',', @can_id, 1) 	  IF REPLACE(@can_id, ',', '') <> ''	  BEGIN			WHILE @Pos > 0			BEGIN				  SET @CheckID = LTRIM(RTRIM(LEFT(@can_id, @Pos - 1)))				  IF @CheckID <> ''				  BEGIN						INSERT INTO tab_destino_canal (des_id, can_id) VALUES (@valor, @CheckID)				  END				  SET @can_id = RIGHT(@can_id, LEN(@can_id) - @Pos)				  SET @Pos = CHARINDEX(',', @can_id, 1) 			END	  END   	 	  SET @tiv_id = LTRIM(RTRIM(@tiv_id))+ ','	  SET @Pos = CHARINDEX(',', @tiv_id, 1) 	  IF REPLACE(@tiv_id, ',', '') <> ''	  BEGIN			WHILE @Pos > 0			BEGIN				  SET @CheckID = LTRIM(RTRIM(LEFT(@tiv_id, @Pos - 1)))				  IF @CheckID <> ''				  BEGIN						INSERT INTO tab_destino_tipo_viagem (des_id, tiv_id) VALUES (@valor, @CheckID)				  END				  SET @tiv_id = RIGHT(@tiv_id, LEN(@tiv_id) - @Pos)				  SET @Pos = CHARINDEX(',', @tiv_id, 1) 			END	  END   RETURN @valor
Pois bem, eu tenho uma tabela principal que tem dois grupos de checkbox, que serão os dados de duas tabelas filhas, tipo, cada destino pode aparecer em vários canais, ou seja, eu teria que criar uma procedure que resgatasse os valores do formulário inteiro e na hora desses checkbox's, ela colocasse os dados deles nas tabelas filhas junto com os ID da tabela principal. O código está aí, caso alguém precise.

 

Segue tb o código de inserção da página asp:

 

Dim cmd, valor, a, b, canal, tipo, i, z		' pega os dados das checkbox, tira virgula e agrupa em uma string		a = split(request.form("can_id"),",")		b = split(request.form("tiv_id"),",")				for i=LBound(a) to UBound(a)		canal = canal & a(i)		Next				for z=LBound(b) to UBound(b)		tipo = tipo & a(z)		Next				set cmd = Server.CreateObject("ADODB.Command")				With Cmd 			.ActiveConnection = Conexao 			.CommandType = adCmdStoredProc 			.CommandText = "SP_INSERIR_CADASTRO_DESTINO"			.Parameters.Append .CreateParameter ( "RETURN_VALUE", adInteger, adParamReturnValue) 			.Parameters.Append .CreateParameter ( "@des_titulo", adVarChar, adParamInput, 100, request.form("des_titulo")) 			.Parameters.Append .CreateParameter ( "@reg_id", adInteger, adParamInput, 1, request.form("reg_id")) 			.Parameters.Append .CreateParameter ( "@est_id", adInteger, adParamInput, 2, request.form("est_id")) 			.Parameters.Append .CreateParameter ( "@cid_id", adInteger, adParamInput, 5, request.form("cid_id")) 			.Parameters.Append .CreateParameter ( "@des_sobre", adVarChar, adParamInput, 1000, request.form("des_sobre")) 			.Parameters.Append .CreateParameter ( "@des_clima", adVarChar, adParamInput, 1000, request.form("des_clima")) 			.Parameters.Append .CreateParameter ( "@des_como_chegar", adVarChar,adParamInput, 1000, request.form("des_como_chegar")) 			.Parameters.Append .CreateParameter ( "@des_hospedagem", adVarChar,adParamInput, 1000, request.form("des_hospedagem")) 			.Parameters.Append .CreateParameter ( "@des_dados_local", adVarChar, adParamInput, 1000, request.form("des_dados_local"))			.Parameters.Append .CreateParameter ( "@des_servicos", adVarChar, adParamInput, 1000, request.form("des_servicos")) 			.Parameters.Append .CreateParameter ( "@des_links", adVarChar, adParamInput, 500, request.form("des_links")) 			.Parameters.Append .CreateParameter ( "@des_atracoes", adVarChar, adParamInput, 1000, request.form("des_atracoes")) 			.Parameters.Append .CreateParameter ( "@usu_id", adInteger, adParamInput, , 1 ) 			.Parameters.Append .CreateParameter ( "@can_id", adVarChar, adParamInput, 50, replace(canal," ",","))			.Parameters.Append .CreateParameter ( "@tiv_id", adVarChar, adParamInput, 50, replace(tipo," ","")) 		End With		 Cmd.Execute , , adExecuteNoRecords 			IF CStr( Cmd.Parameters( "RETURN_VALUE" )) = 0 THEN 	   		 Response.Write "Success " 			ELSE 	   		 Response.redirect("desAltera.asp?id="& CStr( Cmd.Parameters( "RETURN_VALUE" ))) 			END IF
Ps. aquele tratamento que dou aos dados do checkbox antes deles irem pra procedure foi pq deu um erro que eu não sabia qual que era na hora de mandar os dados pra procedure, logo, eu dei um split nos valores da checkbox, reagrupei ela e substitui os espaços por virgula(não sei pq ficava esse espaço chato :( ) pois bem, acredito que com esse novo código da procedure não precisa disso.

 

Abraços a todos e espero que isso ajude alguém.

 

Fui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para contribuir mais com o assunto, tendo em vista que o problema já foi resolvido. No meu tópico eu tratei uma Store Procedure que recebe um atributo do tipo vetor de dados separados por vírgulas e ponto e vírgulas e ela é quem faz o loop destrinchando cada valor deste array e gravando na tabela.

 

Para ver o tópico clique aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites
Valeu. Eu tinha visto o teu código, mas num entendi ele. Daí como eu já estava com meio caminho andado no outro, fui fazendo o outro.hehehe

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.