FAZER UM LOOP MUDAR O BACKCOLOR DOS COMMANDBUTTON
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.
as mesas se chamam [Ô]MESA 01[Ô], [Ô]MESA 02[Ô]... ETC
O que preciso fazer ai?
nesse exemplo ai de cima todos os commandbutton estao vermelho.
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.
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
Cara, esqueci da condition do loop:
Do While not rs.eof
Do While not rs.eof
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???
Do jeito que está fazendo, se o RESTAURANTE tiver com 90 mesas, por exemplo, quantas linhas de código você precisaria???
fiz conforme disse:
e todos os command estao verde!
sendo que só a mesa 02 e 04 estão com STATUS=TRUE
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
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
Se precisar do projeto-exemplo, posto aqui (creio que não precise).
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).
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
só pra completar:
antes eu tinha em cada botao um codigo para abrir uma janela e mudar o label para um nome especifico:
ai no botão cmdMesa01 mudava o label para [Ô]Mesa 02[Ô].... e assim sucessivamente.
Agora usando ARRAYS como vou fazer isso?
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?
Simples.
Private Sub cmdMesa_Click(Index As Integer)
Mesas_Itens.lblMesa.Caption = cmdMesa(Index).Caption
Mesas_Itens.Show 1
End Sub
o TECLA eh foda!!!! sabe tudo!
Obrigado!
Obrigado!
Tópico encerrado , respostas não são mais permitidas