Ir para conteúdo

Arquivado

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

tuhajo

Problemas na função Split

Recommended Posts

Tenho o seguinte código criado dinamicamente, ou seja, ele pode vir várias linhas:

<tr>
<td><input name="chk_servico" tabindex="18" type="checkbox" value="45">SERVIÇO 1</td>
<td><input name="txtObsTipoServico" type="text" size="60"></td>
</tr>
Eu preciso pegar o resultado do checkbox e do campo texto e inserir na tabela.

Estou fazendo com Split mas dá erro: Subscript out of range: 'x'.

 

Estou fazendo o seguinte:

chk_tipo_servico = split(request.Form("chk_tipo_servico"),",")

txtObsTipoServico = split(request.Form("txtObsTipoServico"),",")

 

e depois:

 

For x=0 to UBound(chk_tipo_servico)

servico= "INSERT INTO TABELA(COD_SERVICO, DSC_OBS_SERVICO) VALUES ('"&chk_tipo_servico(x)&"','"&txtObsTipoServico(x)&"')"
Set RsServico = ConBanco.execute(servico)
       
next

Onde está o erro? Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize dessa forma:

For x=1 To Request.Form("chk_tipo_servico").Count
	ConBanco.execute("INSERT INTO TABELA(COD_SERVICO, DSC_OBS_SERVICO) "&_
						"VALUES ('" & Request.Form("chk_tipo_servico")(x) & "', '" & Request.Form("txtObsTipoServico")(x) & "')"
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

está vindo alguma coisa?

 

use INSTR para verificar a existencia da virgula antes de usar SPLIT

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize dessa forma:

For x=1 To Request.Form("chk_tipo_servico").Count
	ConBanco.execute("INSERT INTO TABELA(COD_SERVICO, DSC_OBS_SERVICO) "&_
						"VALUES ('" & Request.Form("chk_tipo_servico")(x) & "', '" & Request.Form("txtObsTipoServico")(x) & "')"
Next

 

Continua dando erro: Index out of range

O campo DSC_OBS_SERVICO não é obrigatório, então ele pode marcar o serviço na check mas não ter observação para ele. Será que é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo DSC_OBS_SERVICO não é obrigatório, então ele pode marcar o serviço na check mas não ter observação para ele. Será que é isso?

É isso. E outro detalhe é que ele não pode possuir vírgula.

 

Cria um Javascript que preenche o campo com um espaço mesmo estando vazio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O campo DSC_OBS_SERVICO não é obrigatório, então ele pode marcar o serviço na check mas não ter observação para ele. Será que é isso?

É isso. E outro detalhe é que ele não pode possuir vírgula.

 

Cria um Javascript que preenche o campo com um espaço mesmo estando vazio.

 

 

O problema não é o valor vazio pois coloquei valor em todos ele e continuou o erro.

 

O problema é:

Eu preciso pegar o resultado do checkbox e do campo texto e inserir na tabela.

 

Estou fazendo o seguinte:

chk_tipo_servico = split(request.Form("chk_tipo_servico"),",")
txtObsTipoServico = split(request.Form("txtObsTipoServico"),",")

e depois faço:

 

For x=0 to UBound(chk_tipo_servico)	

servico= "INSERT INTO TABELA(COD_SERVICO, DSC_OBS_SERVICO) VALUES ('"&chk_tipo_servico(x)&"','"&txtObsTipoServico(x)&"')"
Set RsServico = ConBanco.execute(servico)

next

Pra todo check existe um campo texto, só que o campo texto nem sempre precisa ser preechido qdo eu seleciono um item, ou seja, eu posso checar um item mas não colocar observação pra ele no campo texto.

 

Eu selecionei 3 itens de um total de 24 e dei um response.write, ele me retornou isso:

chk: 2,4,9

text: ,aaaaaa,,bbbbb,,,,,ccccccc,,,,,,,,,,,,,,,

 

Sendo que o valor aaaaaa, é do check 2... o valor bbbbb, é do check 4 e o valor ccccccc é do check 9.

 

Os checks, ele tá trazendo certo mas o text não.

 

O que pode ser???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte, realmente o erro não é por causa do campo vazio, mas porque tem mais txt do que chk.

 

Veja:

For x=0 to UBound(chk_tipo_servico)

Response.Write chk_tipo_servico(x) & "<br />"
Response.Write txtObsTipoServico(x)  & "<br /><br />"
    
Next
Poste onde dará o erro. Se eu estiver certo, o erro vai acontecer na linha chk_tipo_servico(x)

 

Pra finalizar, posta o resultado de :

Response.Write uBound(chk_tipo_servico)
Response.Write uBound(txtObsTipoServico)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele não acusa erro, só não traz certo.

Resposta do post:

ubound(chk) = 2

ubound(txt) = 23

 

chk= 2

txt=

 

chk= 4

txt= aaa

 

chk= 10

txt=

 

Na verdade não tem mais txt do que chk. Tem a mesma quantitade. Existem 24 chks para 24 txts. Só que o chk, ele traz certo pois só selecionei 3 chks... o campo text é que tá vindo todos. Ele teria que vir só os 3 preenchidos de cada chk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas as chk que são enviadas, são somente as que estão marcadas, por isso aparece mais txt, porque independente de preenchida ou não, ela será enviada (desconsidere o post #5).

 

ubound(chk) = 2

ubound(txt) = 23

 

Isso está certo? No caso deveria ser 23 e 23, já que é a mesma quantidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas as chk que são enviadas, são somente as que estão marcadas, por isso aparece mais txt, porque independente de preenchida ou não, ela será enviada (desconsidere o post #5).

 

ubound(chk) = 2

ubound(txt) = 23

 

Isso está certo? No caso deveria ser 23 e 23, já que é a mesma quantidade.

 

Não está certo... era pra vir 2 tanto no chk qto no txt pois eu marquei 3 itens.

Não tem como fazer com que só venha os txts dos chk selecionados???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho como testar agora, mas teste aí. Coloque disabled="disabled" em algumas TEXT e veja se vai enviar as que estão com essa propriedade.

 

Se não enviar, poderia ser criado uma função em Javascript para habilitar a TEXT somente quando o CHECKBOX for marcado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não funcionou... deu esse erro:

 

ubound_chk: 4

ubound_txt: -1

 

chk: 2

 

Microsoft VBScript runtime error '800a0009'

 

Subscript out of range: '0'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que funcionou sim. O objetivo era justamente não enviar as TEXT com a propriedade disabled. Pelo visto você colocou em todas e marcou 4 checkbox, correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que funcionou sim. O objetivo era justamente não enviar as TEXT com a propriedade disabled. Pelo visto você colocou em todas e marcou 4 checkbox, correto?

 

 

Não funcionou não... deu o erro novamente e no ubound do text trouxe -1... era pra trazer 4 tbm.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual é exatamente a linha do erro atual?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Mário...

 

Não está acusando erro nenhum agora, o problema é que ele não está fazendo os pares direito.

 

Olha os responses que fiz:

 

'Valores do request (está trazendo certo)

check: 2, 4, 15

text: ,obs1,,obs2,,,,,,,,,,,obs3,,,,,,,,,

 

'Valor do ubound (está trazendo certo, estou selecionando 3 checks e escrevendo nas texts que selecionei.)

ubound_chk: 2

ubound_txt: 23

 

'Aqui é que está errado... os pares não estão certos. Como mostra acima no request, era pra trazer a obs1 na chk 2, obs2 na chk 4 e obs3 na chk 15.

 

chk: 2

txt:

 

chk: 4

txt: obs1

 

chk: 15

txt:

 

Como posso fazer para que os pares venham certos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema no caso são as virgulas que ao fazer o split cria um índice para cada divisão

 

pelo que vejo está fazendo exatamente o que está mandando fazer mas caso sua logica está errada

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode colocá-los num loop for,

tipo essa lógica

 

qtd_produtos = split(Request.Form("qtd_produtos"),",")
if qtd_produtos = ""
produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema não é o loop é que as duas sequencias tem números diferentes de virgulas que geram números diferentes de índices

 

isso que precisa ser tratado

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode colocá-los num loop for,

tipo essa lógica

 

qtd_produtos = split(Request.Form("qtd_produtos"),",")
if qtd_produtos = ""
produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

 

Eu já faço esse for... eu acho que o sistema não tá entendendo a caixa de texto no split. Já tentei fazer de várias formas, não sei mais como fazer.

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.