Ir para conteúdo

POWERED BY:

Arquivado

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

Eduardo Fonseca

[Resolvido] Split ASP

Recommended Posts

Boa tarde Galera,

 

Tenho um pequeno e grande problema, que certamente está ligado com minha nada pequena ignorância em ASP:

 

Tenho duas tabelas no meu DB:

 

tbCores [id,cor]

tbProdutos [id,nome,cores]

 

*No campo cor da tabela tbProdutos as string está assim: 1,3,7,5,9 (Esses números representam os ids da tabela tbCores)

 

No entanto, o que eu tentei fazer foi aplicar um split na variável que recebe o valor 1,3,7,5,9 de determinado item da tabelma tbProdutos.

 

Ele até faz o split e retorna 1 3 7 5 9 corretamente, o problema é que eu gostaria de resgatar o nome da cor que está na tabela tbCores, o campo cor. E dessa forma eu poderia sincronizar: Exemplo: O produto Carro tem três cores disponíveis, sendo elas: azul, preto e vermelho. Lembrando que as cores estão separadas por vírgulas no campo cores da tabela tbProdutos.

 

O usuário clica no item e na hora de exibir os detalhes ele também deverá ver as cores disponíveis.

 

Segue o código que tentei montar:

 

<%
'FUNCTION Lista_cores
' - Lista as cores disponiveis para cada produto
' - Função chamada na página de descrição do produto - produtos_descricao.asp
'################################################# #######################################


'Cria objeto de consulta a tabela de cores
Set vProdutos = Server.CreateObject("ADODB.Recordset")
vProdutos.CursorLocation = 3
vProdutos.CursorType = 0
vProdutos.LockType = 3
strSQL = "SELECT TOP 1 * FROM tbProdutos ORDER BY id DESC"
vProdutos.Open strSQL, db
Dim MeuString, MeuArray, Msg
Response.write MeuString
If Not vProdutos.Eof Then
While Not vProdutos.EOF
MeuString = vProdutos("cores")
%>

<%
MeuArray = Split(MeuString, ",", -1, 1)
' MeuArray(0) tem "VBScript".
' MeuArray(1) tem "é".
' MeuArray(2) tem "giro!".
'Msg = MeuArray(0) & " " & MeuArray(1)
'Msg = Msg & " " & MeuArray(2)
'Response.write Msg 

'For I = 0 To Ubound(MeuArray) 
'Response.write Msg 
'Next

For Each numero In MeuArray
  Response.Write "<img src='images/cores/"& numero &".gif' width='18' height='18'><br>"
Next

vProdutos.MoveNext
Wend
End If

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a variavel numero é pra ser o id da cor(mesmo nome da imagem) então seria assim

For i = 0 In ubound(MeuArray)

Response.Write "<img src='images/cores/"& MeuArray(i) &".gif' width='18' height='18'><br>"

Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro do WHILE faça uma consulta para recuperar o nome das cores, ex.:

SELECT nmcor FROM tbCores WHERE cdcor IN (" & MeuString & ")

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro do WHILE faça uma consulta para recuperar o nome das cores, ex.:

SELECT nmcor FROM tbCores WHERE cdcor IN (" & MeuString & ")

Amigo, se eu fizer isso ele não mata os valores do "MeuString" ? Pois a priori o "MeuString" é o valor do campo "cor" da tabela tbProdutos.

 

Não tá rolando... continua sem êxito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta gerando algum erro ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual o valor de MeuString ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dentro do WHILE faça uma consulta para recuperar o nome das cores, ex.:

SELECT nmcor FROM tbCores WHERE cdcor IN (" & MeuString & ")

Amigo, se eu fizer isso ele não mata os valores do "MeuString" ? Pois a priori o "MeuString" é o valor do campo "cor" da tabela tbProdutos.

 

Não tá rolando... continua sem êxito!

 

 

Entendi que preciso logar no WHILE pra ele meio que "cruzar" os dados... mas como eu resgato isso? Ele faz o select.... mas teoricamente preciso jogar ele numa variável e fazer algo assim:

 

lá na variavel "nome_da_cor":

 

For Each numero In MeuArray
  Response.Write "<img src='images/cores/"& numero &".gif' width='18' height='18'> - & nome_da_cor & <br>"
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

recupera ele no recordset...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei dentro do WHILE mas ele retorna o mesmo valor pra todos os registros dos produtos:

 

 

While Not vProdutos.EOF

MeuString = vProdutos("cores")

Set vCores = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT cor FROM tbCores WHERE id IN (" & MeuString & ")"
vCores.Open strSQL, db

While Not vCores.EOF
nome_da_cor = vCores("cor")
vCores.MoveNext
Wend

Esse é o resultado:

Imagem Postada

 

For Each numero In MeuArray
  Response.Write "<img src='images/cores/"& numero &".gif' width='18' height='18'> - "& nome_da_cor &"<br>"
Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste o codigo completo..

e dá um response.write da SQL para vermos o valor e MeuString

Compartilhar este post


Link para o post
Compartilhar em outros sites

'Cria objeto de consulta a tabela de cores

Set vProdutos = Server.CreateObject("ADODB.Recordset")

vProdutos.CursorLocation = 3

vProdutos.CursorType = 0

vProdutos.LockType = 3

 

strSQL = "SELECT TOP 1 * FROM tbProdutos ORDER BY id DESC"

vProdutos.Open strSQL, db

Dim MeuString, MeuArray, Msg

Response.write MeuString

If Not vProdutos.Eof Then

While Not vProdutos.EOF

 

MeuString = vProdutos("cores")

 

Set vCores = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT cor FROM tbCores WHERE id IN (" & MeuString & ")"

vCores.Open strSQL, db

 

While Not vCores.EOF

nome_da_cor = vCores("cor")

vCores.MoveNext

Wend

 

%>

 

<%

MeuArray = Split(MeuString, ",", -1, 1)

' MeuArray(0) tem "VBScript".

' MeuArray(1) tem "é".

' MeuArray(2) tem "giro!".

'Msg = MeuArray(0) & " " & MeuArray(1)

'Msg = Msg & " " & MeuArray(2)

'Response.write Msg

 

'For I = 0 To Ubound(MeuArray)

'Response.write Msg

'Next

 

For Each numero In MeuArray

Response.Write "<img src='images/cores/"& numero &".gif' width='18' height='18'> - "& nome_da_cor &"<br>"

Next

 

vProdutos.MoveNext

Wend

End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

o k é passado na "SELECT cor FROM tbCores WHERE id IN (" & MeuString & ")"

Compartilhar este post


Link para o post
Compartilhar em outros sites

o k é passado na "SELECT cor FROM tbCores WHERE id IN (" & MeuString & ")"

 

Ele retorna:

 

Valor do MeuString = 2,3,5,8,9,10,11

 

Sendo que ele só pega o último valor que é 11.

 

E a cor da tbCores de id=11 é Amarelo. Justamente o que ele retorna:

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

é pq você atribui o MeuString = vProdutos("cores"), sendo o resultado de

 

SELECT TOP 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

é pq você atribui o MeuString = vProdutos("cores"), sendo o resultado de

 

SELECT TOP 1

tá... mas existe um outro select que busca na tbCores... esse SELECT aí será modificado para select where id=x

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa história do SELECT TOP não influencia em nada pois eh um outro SELECT... até mudei para "SELECT * FROM tbProdutos WHERE id=1 ORDER BY id DESC" pra desencargo de consciência mas o resultado foi o mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia ter dentro da tabela produtos, ondete´ra o campo cores, que recebe 1,2,3...,etc

você poderia alterar e colocar campos extras, como cor1,cor2, cor3..., ficaria mais facil,

como você recupera o Valor do MeuString = 2,3,5,8,9,10,11

jogue em um array e compare as cores, pois ele esta recebendo apenas o ultimo

 

Campos inteiros suportam o operador IN.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia ter dentro da tabela produtos, ondete´ra o campo cores, que recebe 1,2,3...,etc

você poderia alterar e colocar campos extras, como cor1,cor2, cor3..., ficaria mais facil,

como você recupera o Valor do MeuString = 2,3,5,8,9,10,11

jogue em um array e compare as cores, pois ele esta recebendo apenas o ultimo

 

Campos inteiros suportam o operador IN.

 

Eu não posso fazer isso pois o cliente pode adicionar uma nova cor no DB a qualquer momento e isso tornaria extenso de mais a tabela... e outra... vou usar essa mesma solução para produtos relacionados de um produto... onde cada código de um produto será inserido como relacionado em um campo "relacionados" de cada produto...

 

de qq forma agradeço XANBURZUM....

 

no aguardo de soluções!

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.