Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Combobox candeadas com banco de dados

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
pedro_mexico
Consultor
Consultor
Mensagens: 285
Registrado em: Qua Dez 09, 2015 5:54 pm

Combobox candeadas com banco de dados

Mensagem por pedro_mexico »

Boa noite amigos,
Estou a tentar adaptar o meu formulario excel vba a um banco de dados access,
nele tinha combobox candeadas(julgo ser assim o nome que se dá), agora gostava de saber se é possivel fazer isso mas com banco de dados, isto é:

ao selecionar um valor da combobox1, ele vai carregar valores de relaçao a esse valor na combobox2, ao selecionar um valor da combobox 2 ia dar um valor na combobox3.

Exemplo
Coluna1 Coluna 2 Coluna3
Motor manutençao programada 1000
Motor manutençao prevista 1001

Chassi/interior acessorios marca 2000
chassi/Interior tablie 2001
chassi/interior fechadura condutor 2002
chassi/interior fechadura mala 2003

Pneus pneus continental 3000
pneus pneus Michelin 3001
pneus alinhamento direcção 3002


a ideia é:
coluna1 recebe os valores Chassi/Interio, Motor,Pneus

ao selecionar um valor da coluna1, ele vai buscar os valores correspondentes na coluna 2, que ao ser selecionada dá o codigo na textbox3/combobox3

ex
"Motor" da combobox1, recebe os valores "Manutençao programada" e "manutençao" prevista na combobox2


isto tudo indo buscar esses valores a uma tabela access.

obrigado


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
webmaster
Administrador
Mensagens: 3114
Registrado em: Sex Jul 24, 2009 2:44 pm
Contato:

Re: Combobox candeadas com banco de dados

Mensagem por webmaster »

pedro_mexico,

Uso o termo "encadear". É a melhor tradução de "chain" que é sob o qual o conceito se baseia.

Em que passo do processo está? Já tem parte do código/formulário feito?


pedro_mexico
Consultor
Consultor
Mensagens: 285
Registrado em: Qua Dez 09, 2015 5:54 pm

Re: Combobox candeadas com banco de dados

Mensagem por pedro_mexico »

Bom dia Webmaster,
ja consegui adaptar um codigo, mas ele nao esta a 100%.
Ja consegui preencher a combobox1, ja consegui que a combobox2 receba os dados relativos á selecao feita na combobox1 e ate preencha a textbox3, agora o problema que encontrei é
Se eu selecionar um valor na combobox1 e depois selecionar um valor na combobox2 , mas depois achar que nao é a melhor escolha e voltar a mudar a combobox1, ele dá erro,diz que nao pode ser feito por banco de dados estar aberto

os codigos que tenho são estes:
Carregar valores da combobox1

Código: Selecionar todos

Sub CarregaDados_Combobox1()
Dim sqlPedido As String

sqlPedido = "SELECT Grupo FROM Tabela1 GROUP BY Grupo"
sqlPedido = sqlPedido & " ORDER BY Grupo" 'Ordenar coluna
ConectDB

Rs.Open sqlPedido, Db, 3, 3 'Cx.Conn


Do While Not Rs.EOF
    UserForm_Menu.ComboBox1.AddItem Rs!Grupo
    
    Rs.MoveNext
Loop

   FechaDB

End Sub
para carregar combobox2 depois de dar valor na combobox1 este:

Código: Selecionar todos

Private Sub ComboBox1_Change()

Dim Sql As String
Sql = "SELECT * FROM Tabela"
ConectDB
On Error Resume Next
Rs.Open Sql, Db, 3, 3
Me.Combobox2.Clear
Do While Not Rs.EOF
If Me.ComboBox1.Value = Rs!Grupo Then
   Me.Combobox2.AddItem Rs!Descricao
 Rs.MoveNext
 End If
 Rs.MoveNext
 Loop
FechaDB

End Sub
e para preencher a textbox tenho este codigo dentro da combobox2

Código: Selecionar todos

Private Sub Combobox2_Change()
   
   Dim ComandoSQL As String

  ComandoSQL = "SELECT * FROM Tabela" & vbCrLf

ConectDB
  Rs.Open ComandoSQL, Db, adOpenForwardOnly, adLockReadOnly, adCmdText

On Error Resume Next
    Do While Not Rs.EOF
      If Me.Combobox2.Value = Rs!Descricao Then
           Me.TextBox1.Text = Rs!Codigo_ESPAP
           
            End If

        Rs.MoveNext
    Loop 'Wend

FechaDB
End Sub
mas se eu selecionar um valor na combobox1, um valor na combobox2, a textbox1 recebe bem os valores, mas se eu quiser mudar o valor da combobox1 , para ele voltar a dar valores em combobox2 ele dá erro.

Obrigado pela ajuda


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Combobox candeadas com banco de dados

Mensagem por Reinaldo »

Se postar um modelo; reduzido porem que represente a estrutura do banco e do front-end, deverá obter resposta/proposta/auxilio mais eficaz


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


pedro_mexico
Consultor
Consultor
Mensagens: 285
Registrado em: Qua Dez 09, 2015 5:54 pm

Re: Combobox candeadas com banco de dados

Mensagem por pedro_mexico »

Boa tarde Reinaldo
segue modelo do ficheiro com o erro.
As comboboxs e textbox1 estai a funcionar correcto, isto é, se eu seleccionar um valor na combobox1 ele carrega a combobox2 com os dados correctos,
ao seleccionar valor na combobox2 ele preenche bem os valores na textbox1,
o erro é se eu por acaso quiser mudar o valor da combobox1 para carregar outro valor ai ele dá erro.

Reinaldo, acha que tb consegue ajudar com numeração automática mas com a formatação (YYYY/1) tabela 1 tem uma coluna da numeração.

Obrigado
Anexos
Base_Dados.rar
(41.38 KiB) Baixado 149 vezes


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Combobox candeadas com banco de dados

Mensagem por Reinaldo »

Uma possibilidade
Livro1.zip
(25.75 KiB) Baixado 153 vezes


pedro_mexico
Consultor
Consultor
Mensagens: 285
Registrado em: Qua Dez 09, 2015 5:54 pm

Re: Combobox candeadas com banco de dados

Mensagem por pedro_mexico »

Reinaldo,

Muito obrigado por a ajuda.
podia so ajudar a perceber esta parte do codigo

Código: Selecionar todos

SqlNseq = "SELECT Max((Mid([Numero],6,4)*1)) AS nSeq FROM Tabela1;"
a parte dos numeros a seguir ao [Numero]?

e já agora, adaptei o codigo ao meu formulario, mas no banco de dados Access, o meu ultimo registo é 2021/17, mas com a adaptação do codigo, ele carrega a textbox com o numero 2021/112.
que poderá estar a correr mal?

mais uma vez muito obrigado pela grande ajuda, vai ajudar bastante a dar mais um passso em frente na adaptacao do formulario.


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Combobox candeadas com banco de dados

Mensagem por Reinaldo »

A função Mid tem por finalidade obter os "caracteres" constantes no campo Numero após a barra (aaaa/...)
ou seja 4 caracteres para ano e um para a barra("/"), assim deve retornar os valores à partir do sexto caractere.
"...que poderá estar a correr mal?..."
No modelo que enviou aparentemente tudo normal, e a numeração evoluiu normalmente como esperado;
sem ver sua tabela/estrutura de registros não tenho ideia do que está a acontecer


pedro_mexico
Consultor
Consultor
Mensagens: 285
Registrado em: Qua Dez 09, 2015 5:54 pm

Re: Combobox candeadas com banco de dados

Mensagem por pedro_mexico »

Boa tarde Reinaldo,
Antes de mais, obrigado mais uma vez por a ajuda e a explicação dos códigos.
Já percebi o que está a acontecer, a razão é que não.
A minha tabela tem uma coluna onde tenho os registos seguidos com a formatação ano/n°, e ele referente a 2020 o ultimo registo é 111(2020/111),mas logo a seguir começa os registos de 2021(2021/1) e já vai 2021/17.
Nao percebo é a razão de ele ir buscar o último valor de 2020 e não o valor da última linha da coluna e somar +1
Editado pela última vez por pedro_mexico em Qua Abr 14, 2021 8:35 pm, em um total de 1 vez.


pedro_mexico
Consultor
Consultor
Mensagens: 285
Registrado em: Qua Dez 09, 2015 5:54 pm

Re: Combobox candeadas com banco de dados

Mensagem por pedro_mexico »

Boa tarde Reinaldo,
Antes de mais, obrigado mais uma vez por a ajuda e a explicação dos códigos.
Já percebi o que está a acontecer, a razão é que não.
A minha tabela tem uma coluna onde tenho os registos seguidos com a formatação ano/n°, e ele referente a 2020 o ultimo registo é 111(2020/111),mas logo a seguir começa os registos de 2021(2021/1) e já vai 2021/17.
Nao percebo é a razão de ele ir buscar o último valor de 2020 e não o valor da última linha da coluna e somar +1


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder