Ir para conteúdo
Fórum Script Brasil
  • 0

Como reutilizar registros de uma consulta ASP


Helinho

Pergunta

Olá!

1º) Eu tenho uma tabela, apenas uma tabela, chamada "transporte"

2º) Dentro dessa tabela eu tenho as colunas: id, nome, onibus, poltrona

3º) Tenho uma página em ASP chamada "onibus.asp" que é aberta recebendo uma String anterior, no caso "ONIBUS 01"

4º) Na página "onibus.asp" eu tenho o desenho de um onibus com 46 gifs (das poltronas) numeradas mas não em ordem crescente e sim na ordem real que há em um onibus de verdade.

5º) Abaixo do desenho do onibus eu tenho uma Lista de Passageiros mostrando a "poltrona" e o "nome" em ordem crescente (de cima para baixo).

Sendo assim, se não existirem reservas no ônibus não haverá registro algum na tabela "transporte". Por isso vamos partir do pressuposto que existam 3 reservas feitas (três registros dentro da tabela) para as poltronas "01", "02" e "05" ocupando respectivamente os registros 1, 2 e 3 da tabela "transporte".

Vale ressaltar que a Lista de Passageiros (abaixo do desenho do onibus) tá Ok, ou seja, eu já consigo listar através do "RSlista" todos os passageiros em ordem crescente de "poltrona" que contém o texto "ONIBUS 01" na coluna "onibus" da tabela "transporte".

O que eu quero fazer é que a GIF da poltrona 01 (do desenho) apareça como uma poltrona XX (vermelha) quando a coluna "poltrona" da tabela "transporte" estiver com o valor "01" caso contrário mantenha a GIF da poltrona 01.

Não posso e não quero usar o loop porque a sequência das poltronas é totalmente desordenada e não obedece o critério de crescente e ascendente. Então para finalizar a minha explicação eu pensei em fazer trabalhar com um IF em cada espaço da poltrona.

Onde o "RSonibus" está com o seguinte select: "SELECT * FROM transporte WHERE onibus = ONIBUS 01"

<% If Not RSonibus.EOF Then %>
<% ElseIf RSonibus("poltrona") = "01" Then %>
<img src="img/poltrXX.gif"/>
<% Else %>
<img src="img/poltr01.gif"/>
<% End If %>

Veja bem, se o RSonibus com o select acima descrito me retorna os registros das poltronas 01,02 e 05 então eu só preciso saber como fazer para chamar especificamente um registro desse RSonibus sem usar loop. Na verdade eu só não sei fazer isso: se o RSonibus me retorna os valores 01,02 e 05 eu gostaria de saber como ficaria o código para chamar o "05" por exemplo, entendeu?

Está ficando assim:

01.gif

Mas eu quero que fique assim:

02.gif

Desde já agradeço a atenção!

Helinho

Editado por Helinho
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

não seria mais facil se você adicionasse uma coluna a mais na tabela, chamada "ordem", por exemplo??

ai você preenche com a ordem crescente de acordo com a disposicao no onibus.

exemplo, se na hora de escrever as img na pagina, você comeca pela poltrona 45, no campo ordem, grave 1 pra 45, 2 pra 41, 3 pra 37 e assim por diante.

ai na hora de fazer o select, você ordena pela ordem e vai dando um MoveNext() a cada numero q for escrever e checa se esta reservado.

ou você pode criar o campo ordem numa tabela separada e fazer um join na hora do select, caso seja sempre a mesma ordem pra todos os onibus, assim não precisa ficar repetindo a cada novo onibus.

agora, pra encontrar um registro especifico, acho q você pode usar o metodo Find().

nunca usei ele em Asp (so em vb6), mas deve funcionar, se antes de abrir a conexao, você setar o cursor no cliente:

conn = Server.CreateObject("ADODB.Connection")

conn.ConnectionString = "sua_conexao"
conn.CursorLocation = 3
conn.Open[/code] a sintaxe do Find() deve ser essa:
[code]RSonibus.MoveFirst
RSonibus.Find "poltrona = '05'", 0, 1

na esquece de chama o MoveFirst() antes.

na pior das hipoteses, você faz um loop q vai checando cada uma das poltronas com um if ate encontrar a q você quer. não deve ficar muito mais pesada q o Find(). mas a ideia mais agil seria a do campo pra ordem mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu consegui um código que funcionasse através da seguinte sintaxe:

<% For x = 1 to 46
        If Not RSonibus.EOF Then
                If RSonibus("poltrona") = Right("0"& x,2) Then
                Imagem = "xx"
                RSonibus.MoveNext
                Else
                Imagem = Right("0"& x,2)
                End If
        Else
        Imagem = Right("0"& x,2)
        End If %>
        <img src="img/poltr<%=Imagem%>.gif" width="31" height="28"/>
<% Next %>

O problema é que as 46 poltronas aparecessem em uma coluna com 46 linhas quando na verdade eu preciso que o "FOR""NEXT" crie uma tabela com 12 colunas e 5 linhas (60 quadrantes). Eu já criei também a coluna "ordem" como você sugeriu. O que preciso agora é conseguir gerar a tabela de acordo com a imagem abaixo:

03.gif

Editado por Helinho
Link para o comentário
Compartilhar em outros sites

  • 0

o onibus é uma imagem de fundo certo?? então você não vai precisar desenhar o banheiro nem a privada nem nd, certo?? então, se entendi direito, o seu codigo deve ser mais ou menos esse aqui:

<table>
<% Dim i
i = 1
For x = 1 to 60
        If (i - 1) Mod 12 = 0 Then
            Response.Write("<tr>")
        End If
        If i \ 12 <> 2 And i <> 36 And i <> 48 Then
            If Not RSonibus.EOF Then
                    If RSonibus("poltrona") = Right("0"& i, 2) Then
                    Imagem = "xx"
                    RSonibus.MoveNext
                    Else
                    Imagem = Right("0"& i, 2)
                    End If
            Else
                Imagem = Right("0"& i, 2)
            End If
            i = i + 1 %>
            <td><img src="img/poltr<%=Imagem%>.gif" width="31" height="28"/></td>
        <% Else
            %><td></td><%
        End if

        If i Mod 12 = 0 Then
            Response.Write("</tr>")
        End If
Next %>
</table>[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

helinho, só você seu post hj... se você ainda não tiver resolvido, de uma olhada, dei uma mexida no codigo...

a verdade é q eu tinha me confundido com a minha propria dica num post mais acima...

e só agora acho q entendi direito como ta funcionando o seu site... você não tem nenhuma tabela no banco de dados onde estejam gravadas todos os assentos, certo??

me fala como você sabe a ordem dos assentos q tem q escrever?? como você sabe q comeca no 45??

se você não tem isso definido em nenhum lugar, acho q a aquela ideia do campo ordem de q falei teria q estar numa tabela separada.

exemplo, crie uma tabela chamada "ordem" com os campos "poltrona" e "ordem". e então faca, dentro dessa tabela, aquele esquema de q comentei:

no campo ordem, grave 1 pra 45, 2 pra 41, 3 pra 37 e assim por diante.

depois disso, na hora de fazer o select, faca assim:

SELECT ordem.poltrona As n_poltrona, transporte.poltrona As reservado FROM ordem LEFT JOIN transporte ON ordem.poltrona = transporte.poltrona WHERE transporte.onibus = 'ONIBUS 01' ORDER BY ordem.ordem
depois disso, fica bem mais facil de montar a tabela, porque já estara vinculado ao recordset se esta reservada ou não.
<table>
<% For x = 1 to 60
    If (x - 1) Mod 12 = 0 Then
        Response.Write("<tr>")
    End If

    If x \ 12 <> 2 And x <> 36 And x <> 48 Then
        If Not RSonibus.EOF Then
            If Not IsNull(RSonibus("reservado")) Then
                Imagem = "xx"
            Else
                Imagem = Right("0" & RSonibus("n_poltrona"), 2)
            End If
            RSonibus.MoveNext
        End If %>
        <td><img src="img/poltr<% = Imagem %>.gif" width="31" height="28"/></td>
    <% Else
        %><td></td><%
    End if

    If x Mod 12 = 0 Then
        Response.Write("</tr>")
    End If
Next %>
</table>[/code]

deve ser mais ou menos isso, ve se eu acertei nas quebras de linha.

se você quiser q tenha borda, ponha border="1" na tabela.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Olá Kuroi,

Fiz tudo de acordo com a sua orientação. Criei a nova tabela "ordem" e mudei o SELECT de acordo com sua sugestão. O resultado ficou tudo com poltrona XX como segue abaixo na imagem:

05.gif

Meu SELECT:

"SELECT ordem.poltrona As n_poltrona, transporte.poltrona As reservado FROM ordem LEFT JOIN transporte ON ordem.poltrona = transporte.poltrona WHERE transporte.onibus = 'ONIBUS 01' ORDER BY ordem.ordem"
Meu ASP:
<table>
<% For x = 1 to 60
    If (x - 1) Mod 12 = 0 Then
        Response.Write("<tr>")
    End If

    If x \ 12 <> 2 And x <> 36 And x <> 48 Then
        If Not RSonibus.EOF Then
            If Not IsNull(RSonibus("reservado")) Then
                Imagem = "xx"
            Else
                Imagem = Right("0" & RSonibus("n_poltrona"), 2)
            End If
            RSonibus.MoveNext
        End If %>
        <td><img src="img/poltr<% = Imagem %>.gif" width="31" height="28"/></td>
    <% Else
        %><td></td><%
    End if

    If x Mod 12 = 0 Then
        Response.Write("</tr>")
    End If
Next %>
                  </table>

Obs: eu criei duas colunas na tabela "ordem" (poltrona e ordem). Eu inseri 60 registros na tabela "ordem" e correspondi as respectivas poltronas com as posições dos quadrantes da tabela de 60 quadros.

06.gif

Link para o comentário
Compartilhar em outros sites

  • 0

realmente, acho q tem erro no select. ele deve ta dando EOF logo no comeco e por isso, depois acaba repetindo as imagens. tente usar o select assim:

"SELECT ordem.poltrona As n_poltrona, x.poltrona As reservado FROM ordem LEFT JOIN (Select * From transporte WHERE onibus = 'ONIBUS 01') as x ON ordem.poltrona = x.poltrona ORDER BY ordem.ordem"
se essa não der certo, tente assim tb:
"SELECT ordem.poltrona As n_poltrona, transporte.poltrona As reservado FROM ordem LEFT JOIN transporte ON ordem.poltrona = transporte.poltrona WHERE IsNull(transporte.onibus) Or transporte.onibus = 'ONIBUS 01' ORDER BY ordem.ordem"
agora, acho q você preencheu a tabela com os 60 registros pra cada celula da tabela, certo?? mas a minha ideia inicial era q você pusesse somente as poltronas, os espacos em branco não precisaria. o q você preencheu no campo "poltrona" quando for um espaco em branco?? olha, se você apagar os espacos em branco da tabela, o codigo deve ser mais ou menos assim:
<table>
<% For x = 1 to 60
    If (x - 1) Mod 12 = 0 Then
        Response.Write("<tr>")
    End If

    If (x - 1) \ 12 <> 2 And x <> 37 And x <> 49 Then
        If Not RSonibus.EOF Then
            If Not IsNull(RSonibus("reservado")) Then
                Imagem = "xx"
            Else
                Imagem = Right("0" & RSonibus("n_poltrona"), 2)
            End If
            RSonibus.MoveNext
        End If %>
        <td><img src="img/poltr<% = Imagem %>.gif" width="31" height="28"/></td>
    <% Else
        %><td> </td><%
    End if

    If x Mod 12 = 0 Then
        Response.Write("</tr>")
    End If
Next %>
</table>[/code] agora, se você quiser deixa-los, não tenho certeza de como você preencheu na tabela, mas acho q o codigo seria esse:
[code]<table>
<% For x = 1 to 60
    If (x - 1) Mod 12 = 0 Then
        Response.Write("<tr>")
    End If

    If Not RSonibus.EOF Then
        If RSonibus("n_poltrona") = "" Then
            %><td> </td><%
        Else
            If Not IsNull(RSonibus("reservado")) Then
                Imagem = "xx"
            Else
                Imagem = Right("0" & RSonibus("n_poltrona"), 2)
            End If %>
            <td><img src="img/poltr<% = Imagem %>.gif" width="31" height="28"/></td>
        <% End If
        RSonibus.MoveNext
    End If

    If x Mod 12 = 0 Then
        Response.Write("</tr>")
    End If
Next %>
</table>

naquela linha If RSonibus("n_poltrona") = "" Then, dentro das aspas você tem q colocar o texto q colocou no campo "poltrona" quando forem as colunas em branco (pra funcionar tem q ser o mesmo texto em todas). se você tiver deixado em branco, deixe o codigo como está, ou se na funcionar, tente assim If IsNull (RSonibus("n_poltrona")) Then

veja se funciona agora.

Link para o comentário
Compartilhar em outros sites

  • 0

YES, YES, YES!!!!! Uhuuuuuuuuul... agora deu certo Kuroi. Você é o CARA mesmo!!!

Funcionou perfeitamente... nem estou acreditando. Tem 5 semanas que estou batalhando nessa solução. Agora vou aproveitar e estudar bem o seu código e toda sua lógica na programação. Valeu mesmo!

Bom, eu peguei a 1ª sugestão de SELECT:

"SELECT ordem.poltrona As n_poltrona, x.poltrona As reservado FROM ordem LEFT JOIN (Select * From transporte WHERE onibus = 'ONIBUS 01') as x ON ordem.poltrona = x.poltrona ORDER BY ordem.ordem"
Depois eu mantive os 60 registros da tabela "ordem" por causa do corredor central do desenho do ônibus, entende? Então em peguei a sua 2ª sugestão do ASP:
<table>
<% For x = 1 to 60
    If (x - 1) Mod 12 = 0 Then
        Response.Write("<tr>")
    End If

    If Not RSonibus.EOF Then
        If RSonibus("n_poltrona") = "" Then
            %><td> </td><%
        Else
            If Not IsNull(RSonibus("reservado")) Then
                Imagem = "xx"
            Else
                Imagem = Right("0" & RSonibus("n_poltrona"), 2)
            End If %>
            <td><img src="img/poltr<% = Imagem %>.gif" width="31" height="28"/></td>
        <% End If
        RSonibus.MoveNext
    End If

    If x Mod 12 = 0 Then
        Response.Write("</tr>")
    End If
Next %>
</table>

Com isso o meu ônibus ficou assim:

07.gif

Obs: agora eu vou criar 14 GIFs transparentes (47.gif até 60.gif) e colocar os números dos quadrantes que não terão poltrona para ser o corredor do ônibus!

Show de bola Kuroi e muitíssimo obrigado pela sua paciência, atenção e didática que foi perfeita!

Forte abraço,

Helinho (Beagá)

Editado por Helinho
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...