FAZER UM LOOP MUDAR O BACKCOLOR DOS COMMANDBUTTON

WEBIER 23/12/2009 23:50:50
#330416
tenho uma tabela chamada MESAS, nela possuo o seguintes campos
CODIGO = Intenger
MESA = text
STATUS = sim/não

tem um formulario com 5 commandbutton... no form quero chamar a tabela MESAS e as mesas que tiver com o campo STATUS = TRUE o commandbutton q representa ela vai ficar verde e se nao, vai ficar vemelho.

olha o codigo ai:
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT * FROM MESAS[Ô]
Set Rs = BD.OpenRecordset(SQL)

If Rs!MESA = [Ô]Mesa 01[Ô] And Rs!Status = True Then cmdMesa01.BackColor = &HC000& Else cmdMesa01.BackColor = &HC0&
If Rs!MESA = [Ô]Mesa 02[Ô] And Rs!Status = True Then cmdMesa02.BackColor = &HC000& Else cmdMesa02.BackColor = &HC0&
If Rs!MESA = [Ô]Mesa 03[Ô] And Rs!Status = True Then cmdMesa03.BackColor = &HC000& Else cmdMesa03.BackColor = &HC0&
If Rs!MESA = [Ô]Mesa 04[Ô] And Rs!Status = True Then cmdMesa04.BackColor = &HC000& Else cmdMesa04.BackColor = &HC0&
If Rs!MESA = [Ô]Mesa 05[Ô] And Rs!Status = True Then cmdMesa05.BackColor = &HC000& Else cmdMesa05.BackColor = &HC0&


as mesas se chamam [Ô]MESA 01[Ô], [Ô]MESA 02[Ô]... ETC

O que preciso fazer ai?

nesse exemplo ai de cima todos os commandbutton estao vermelho.
FGSANTOS 24/12/2009 00:02:48
#330417
Tá faltando o loop:

  
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT * FROM MESAS[Ô]
Set rs = BD.OpenRecordset(SQL)
[ô]para ser mais rápido deixa isto fora do loop
cmdMesa01.BackColor = &HC0&
cmdMesa02.BackColor = &HC0&
cmdMesa03.BackColor = &HC0&
cmdMesa04.BackColor = &HC0&
cmdMesa05.BackColor = &HC0&
Do While condition
If rs!MESA = [Ô]Mesa 01[Ô] And rs!Status = True Then cmdMesa01.BackColor = &HC000&
If rs!MESA = [Ô]Mesa 02[Ô] And rs!Status = True Then cmdMesa02.BackColor = &HC000&
If rs!MESA = [Ô]Mesa 03[Ô] And rs!Status = True Then cmdMesa03.BackColor = &HC000&
If rs!MESA = [Ô]Mesa 04[Ô] And rs!Status = True Then cmdMesa04.BackColor = &HC000&
If rs!MESA = [Ô]Mesa 05[Ô] And rs!Status = True Then cmdMesa05.BackColor = &HC000&
rs.movenext
Loop
FGSANTOS 24/12/2009 00:05:02
#330418
Cara, esqueci da condition do loop:

Do While not rs.eof
TECLA 24/12/2009 10:12:29
#330435
Resposta escolhida
Para você [Ô]economizar[Ô] nas linhas de código, sugiro que trabalhe com COMMANBUTTON como ARRAYS.
Do jeito que está fazendo, se o RESTAURANTE tiver com 90 mesas, por exemplo, quantas linhas de código você precisaria???
WEBIER 27/12/2009 16:58:08
#330536
fiz conforme disse:
Private Sub Form_Load()
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT * FROM MESAS[Ô]
Set Rs = BD.OpenRecordset(SQL)
[ô]para ser mais rápido deixa isto fora do loop
cmdMesa01.BackColor = vbGreen
cmdMesa02.BackColor = vbGreen
cmdMesa03.BackColor = vbGreen
cmdMesa04.BackColor = vbGreen
cmdMesa05.BackColor = vbGreen
Do While Not Rs.EOF
If Rs!MESA = [Ô]Mesa 01[Ô] And Rs!Status = True Then cmdMesa01.BackColor = vbRed
If Rs!MESA = [Ô]Mesa 02[Ô] And Rs!Status = True Then cmdMesa02.BackColor = vbRed
If Rs!MESA = [Ô]Mesa 03[Ô] And Rs!Status = True Then cmdMesa03.BackColor = vbRed
If Rs!MESA = [Ô]Mesa 04[Ô] And Rs!Status = True Then cmdMesa04.BackColor = vbRed
If Rs!MESA = [Ô]Mesa 05[Ô] And Rs!Status = True Then cmdMesa05.BackColor = vbRed
Rs.MoveNext
Loop
End Sub


e todos os command estao verde!

sendo que só a mesa 02 e 04 estão com STATUS=TRUE
TECLA 27/12/2009 19:55:44
#330539
Você deve está fazendo alguma coisa errada...

Veja o resultado que obtive com [Ô]praticamente[Ô] o mesmo código.


Segue o código fonte que utilizei
Private Sub Form_Load()
[txt-color=#007100][ô]Pintar as mesas de verde antes da execução da rotina[/txt-color]
Dim i As Byte
For i = 1 To 5
cmdMesa(i).BackColor = vbGreen
Next i

[txt-color=#007100][ô]Variáveis de acesso ao banco (ADO)[/txt-color]
Dim con As New ADODB.Connection, rs As New ADODB.Recordset

[ô]Estabelecer conexão com o BD
con.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0; [Ô] & _
[Ô]Data Source=[Ô] & App.Path & [Ô]\bd1.mdb[Ô]
rs.Open [Ô]SELECT * FROM mesas ORDER BY codigo[Ô], con

[txt-color=#007100][ô]Percorrer os registros da tabela Mesa[/txt-color]
Do While Not rs.EOF
If rs.Fields([Ô]status[Ô]) = True Then
cmdMesa(rs.Fields([Ô]codigo[Ô])).BackColor = vbRed
End If
rs.MoveNext
Loop

[txt-color=#007100][ô]Fechar conexão com o BD[/txt-color]
rs.Close
con.Close
End Sub


Se precisar do projeto-exemplo, posto aqui (creio que não precise).
WEBIER 28/12/2009 20:54:04
#330612
mudei assim e ficou show:

Private Sub Form_Load()
[ô]Pintar as mesas de verde antes da execução da rotina
Dim i As Byte
For i = 1 To 5
cmdMesa(i).BackColor = vbGreen
Next i

[ô]Estabelecer conexão com o BD
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT * FROM MESAS[Ô]
Set rs = BD.OpenRecordset(SQL)

[ô]Percorrer os registros da tabela Mesa
Do While Not rs.EOF
If rs.Fields([Ô]status[Ô]) = True Then
cmdMesa(rs.Fields([Ô]codigo[Ô])).BackColor = vbRed
End If
rs.MoveNext
Loop

[ô]Fechar conexão com o BD
rs.Close
BD.Close
End Sub
WEBIER 28/12/2009 20:57:28
#330613
só pra completar:

antes eu tinha em cada botao um codigo para abrir uma janela e mudar o label para um nome especifico:

Private Sub cmdMesa01_Click()
Mesas_Itens.lblMesa.Caption = [Ô]Mesa 01[Ô]
Mesas_Itens.Show 1
End Sub


ai no botão cmdMesa01 mudava o label para [Ô]Mesa 02[Ô].... e assim sucessivamente.

Agora usando ARRAYS como vou fazer isso?
TECLA 28/12/2009 21:15:43
#330614
Simples.

Private Sub cmdMesa_Click(Index As Integer)
Mesas_Itens.lblMesa.Caption = cmdMesa(Index).Caption
Mesas_Itens.Show 1
End Sub
WEBIER 28/12/2009 21:20:51
#330615
o TECLA eh foda!!!! sabe tudo!

Obrigado!
Tópico encerrado , respostas não são mais permitidas