Ir para conteúdo

POWERED BY:

Arquivado

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

Fernanda!!!

[Resolvido] Combobox e Update

Recommended Posts

Olá pessoal!

 

Nossa, estou com uma dúvida muito primária. Procurei pelo fórum, mas não consegui encontrar nada a respeito.

 

Bem, eu tenho uma página que, de acordo com um parâmetro ela chama uma proc e a proc pode dar um insert ou um update na minha tabela. Eu criei um combobox nesta página que é populado com dados de outra tabela.

 

Ao efetuar o insert, tudo funciona perfeitamente, mas meu problema está no update. Eu não consegui que o combo fosse carregado com o valor gravado na tabela principal (código) e que continuasse a ser populado com os dados da outra tabela (codigo / descrição). Ou eu consigo uma coisa, ou outra, mas as duas nem com reza... :(

 

Alguém pode me ajudar com essa minha cruz??

 

 

Obrigada!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Fernanda, eu entendo que a combo vai ser carregada pelos dados de uma tabela. Como você quer carregar ela com os dados de uma tabela e popular essa combo com os dados de outra tabela ?

 

Não tem como... pelo que eu entendi, você pode colocar no value dessa combo o valor de uma tabela + um caracter + o valor da outra tabela, daí com split você separa os valores.

 

Não entendi muito bem sua dúvida, mas em todo caso la vai:

 

<option value='<%=rs("tab1")&":|:"&rs("tab2")%>'><%=rs("tab1")&"-"&rs("tab2")%></option>

Bem.. veja que ali no value tem o valor das duas tabelas separadas pelo :|: depois você da um split e separa pra usar conforme sua necessidade.

 

Não se se é exatamente isso que você quer ... mas espero te ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rhael!

 

Vou dar um exemplo para facilitar a comprensão do meu problema (nem eu, relendo meu post anterior, entendi muito bem :P):

 

Tenho um cadastro de usuários. No form há uma combobox para selecionar o Estado em que reside, e esta combo é populada por uma tabela de Estados, com um código e o nome do Estado em colunas diferentes. Esta mesma página, de acordo com um parâmetro que é passado a ela, chama uma proc que inclui ou altera os dados na tabela. O que é gravado na minha tabela de usuários é o código do Estado, que eu leio da combo.

 

O insert está sendo efetuado corretamente.

 

No update, eu preciso que a combo apresente selecionado o nome do Estado (uma inner entre a tabela de usuários e Estados me resolve isso), e que ela continue sendo populada pela tabela de Estados.

 

Uma coisa ou outra eu consegui fazer, mas juntar as duas está me esquentando a cabeça. Pensei em guardar o código do Estado da tabela de usuários em uma variável e pula-la ao popular a combo com os Estados... mas deu um rolo de recordsets que eu desisiti.

 

Enfim, continuo agradecendo a ajuda que puderem me dar!

 

 

Obrigada, Rhael!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

simples Fernanada faz assim:

 

deve ter uma coisa desse tipo ai

 

ASP
Set RS = Conn.Execute("Select * From Estados Order By Nome_Estado Asc")

 

While Not RS.EOF

   response.write("<option value="&RS("Codigo_Estado")&">"&RS("Nome_Estado")&"</option>")

Rs.MoveNext : Wend

 

ai você faz isso aqui!

 

ASP
Set RS = Conn.Execute("Select * From Estados Order By Nome_Estado Asc")

While Not RS.EOF

   Set RS2 = Conn.Execute("Select * From TabelaGeral Where Estado = '"&RS2("Codigo_Estado")&"'")

       If ""&RS2("Codigo_Estado")&"" = ""&RS("Codigo_Estado")&"" Then

           response.write("<option value="&RS("Codigo_Estado")&" selected>"&RS("Nome_Estado")&"</option>")

        Else

           response.write("<option value="&RS("Codigo_Estado")&">"&RS("Nome_Estado")&"</option>")

        End If

Rs.MoveNext : Wend

 

 

Veja se resolve!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Ted k!

 

Não... não funcionou. Deu o mesmo rolo de recordsets que eu tinha encontrado anteriormente. Já tinha tentado fazer algo assim, diferente da sua lógica, mas mesmo assim não funcionou.

 

Ele encontra problema no segundo rs que abre dentro do while. A princípio não dá nenhum erro dedutível, mas debugando passo a passo, ele reclamo de EOF ou BOF do segundo rs.

 

Pô, ou o negócio é muito complicado eu eu que tô comendo bola em algum lugar (é o mais provável...). :(

 

Pra melhorar, segue o código que está em constante mutação:

 

<%If grupo_cod = 0 then
	  Set RS1 = Amigo.Execute("Select * From tb_tipo_grupo")%>
	   <select name="grupo_tipo" ID="grupo_tipo2">
	  <%While Not RS1.EOF
	Response.Write "<option value='" & Rs1("tipo_grupo_cod") & "'>"
	Response.Write Rs1("tipo_grupo_descr") & "</option>"
	 Rs1.MoveNext : Wend%>
	</select>
<%Else
	Set RS1 = Amigo.Execute("Select * From tb_tipo_grupo")%>
	 <select name="grupo_tipo" ID="Select1">
	<%While Not RS1.EOF
	Set RS2 = Amigo.Execute("Select * From tb_grupo Where grupo_cod = " & grupo_cod & " and tipo_grupo_cod = " & RS1("tipo_grupo_cod") & "")
	If (RS2("tipo_grupo_cod")) = (RS1("tipo_grupo_cod")) Then
		   Response.Write "<option value='" & Rs1("tipo_grupo_cod") & "' selected>"
		   Response.Write Rs1("tipo_grupo_descr") & "</option>"
	else
			Response.Write "<option value='" & Rs1("tipo_grupo_cod") & "'>"
		   Response.Write Rs1("tipo_grupo_descr") & "</option>"
	end if
	Rs1.MoveNext : Wend%>
   </select>
<%End If%>

 

Obrigada!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o erro e exatamente onde está acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernanda

 

Tudo bem?

 

Pelo que entendi, ao montar a tela de alteração exibindo os dados atuais do usuário você recupera também o código do estado dele que está gravado no banco.

 

Depois é simples, na hora de montar o combo, dentro do while que monta todos os estados, você inclui uma comparação com o código do estado do cliente, o que vai fazer com que o combo seja montado com todos os estados, e o estado do cliente fique selecionado.

 

Vai ser algo do tipo:

 

'Recuperando os dados do usuário selecionado - um dos campos vai ser o estado
codEstado = Cint(rsUsuario("codEstado"))

Depois, na hora de montar o combo de estados, faz assim:

 

Set rsEstados = Conn.Execute("SELECT codEstado, estado FROM Estados ORDER BY estado")

While Not rsEstados.EOF
   response.write("<option value="<%=rsEstados("codEstado")%>" <%If codEstado = rsEstados("codEstado") Then Response.Write("selected=""selected""") End If%>><%=rsEstados("estado")%></option>")
rsEstados.MoveNext : Wend

Dessa forma tanto na inclusão quanto na alteração você vai conseguir obter o valor selecionado no combo de estados.

 

Espero que seja isso que você esteja querendo!

 

Abraços

Cassiano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá CassianoVix e Marioufpa!!

 

Tanto no seu exemplo, quanto no exemplo do Ted, eu tive problema com o

 

response.write("<option value="<%=rsEstados("codEstado")%>" <%If codEstado = rsEstados("codEstado")

pois ele ignora o '<%' antes do rsEstados e fecha meu código com o próximo '%>'.

 

Até aí eu consegui resolver, com uma maneira diferente de escrever (vide o meu código do post anterior), mas de um jeito ou de outro ele me dá erro de Invalid character (respondendo a pergunta do marioufpa), e sempre na linha do response.write.

 

Ah, eu não estou utilizando rsEstados, codEstado... estou adaptando corretamente ao meu código ;)

 

Enfim, tá complicado...:(

 

 

Obrigada novamente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernanda

 

Na verdade foi um vacilo meu... eu havia copiado e colado o código que estava no post anterior, e não reparei que já estava sendo utilizado o response.write pra montar os <option>

 

Faz assim:

 

<%While Not rsEstados.EOF%>
<option value="<%=rsEstados("codEstado")%>"<%If codEstado = rsEstados("codEstado") Then Response.Write("selected=""selected""") End If%>><%=rsEstados("estado")%></option>
<%
rsEstados.MoveNext
Wend
%>

Aconteceu o problema pois se você usar o response.write pra montar o option, as outras instruções ASP terão que ser concatenadas, e não poderão ser usados os delimitadores ASP <% e %>.

 

Então é melhor montar o HTML e colocar as instruções ASP apenas nos lugares que devem estar.

 

Abraço

Cassiano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ñ é assim que coloca dentro do response.write

 

response.write("<option value="<%=rsEstados("codEstado")%>"

 

é assim:

 

response.write("<option value="&rsEstados("codEstado")&"

Compartilhar este post


Link para o post
Compartilhar em outros sites

no IF que compara os códigos converta cada um para string usando a função cStr

exemplo

ASP
if cStr(idVariavel) = cStr(rs("campoId")) then

'ids iguais então option selected

else

'ids diferentes

end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora está resolvido! UFA!! :D

 

Era algo muito bobo, mas que me atulhou a cabeça por dois dias...

 

A condição que está dentro do preenchimento do combo, como o Cassiano e o Ted passaram e que eu já tinha feito parecido, deixou minha página maluca. Até o momento não entendo o porque... mas deixou. Então, efetuei algumas modificações que, finalmente, surtiram resultado.

 

Bom, como eu para explicar deixo a desejar, seguem os exemplos:

 

Alterei disso (que possui os exemplos de vocês)...:

Set rs1 = Amigo.Execute("Select * From tb_grupo Where grupo_cod = " & grupo_cod & "")
	codGrupo = rs1("tipo_grupo_cod")
	Set rs2 = Amigo.Execute("Select * from tb_tipo_grupo")%>
	 <select name="grupo_tipo" ID="Select1">
	<%While Not rs2.EOF
		Response.Write "<option value='" & rs2("tipo_grupo_cod") & "'" if Cstr(codGrupo) = Cstr(rs2("tipo_grupo_cod")) then Response.Write("selected = "selected"") end if">"
		Response.Write rs2("tipo_grupo_descr") & "</option>"
	rs2.MoveNext : Wend%>
	</select>

...para isso:

Set rs1 = Amigo.Execute("Select * From tb_grupo Where grupo_cod = " & grupo_cod & "")
	codGrupo = rs1("tipo_grupo_cod")
	Set rs2 = Amigo.Execute("Select * from tb_tipo_grupo")%>
	 <select name="grupo_tipo" ID="Select1">
	<%While Not rs2.EOF
		 cSelected = ""
		 If cStr(codGrupo) = cStr(rs2("tipo_grupo_cod")) Then
			 cSelected = "selected"
		 End If
		 Response.Write "<option " & cSelected & " value='" & rs2("tipo_grupo_cod") & "'>" & rs2("tipo_grupo_descr") & "</option>"
	rs2.MoveNext : Wend%>

Simples, porém "encardido"!

 

 

Galera, muito obrigada pela ajuda!!

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.