[resolvido] ADODB

Moderador: Avelino Sampaio

jbcotrim
Mensagens: 17
Registrado em: 08 Jun 2015, 13:13

[resolvido] ADODB

Mensagempor jbcotrim » 06 Mar 2017, 22:22

Olá amigos!

Como relatei no Post "Recuperando dados numa COMBOBOX com ADO", estou migrando o Back-End da minha aplicação para o MySQL. Então, testando uma dica do nosso amigo Jefferson Braz, postada aqui no site Usando Access, consegui fazer a conexão e recuperar dados. Entretanto, no exemplo dado, só consigo ler os dados em campo texto. Em combobox, não.
Preciso aprender sobre ADODB e estou procurando apostilas ou qualquer material sobre o assunto. Por incrível que pareça, já fui a duas livrarias, a Saraiva é uma delas e, não achei livros sobre ADODB. Alguém pode me ajudar me indicando alguma coisa?
Desde já agradeço!
Um forte abraço a todos!
Jeser

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Damasceno Jr.
Mensagens: 440
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: ADODB

Mensagempor Damasceno Jr. » 07 Mar 2017, 02:17

Para combobox ou listbox tem o exemplo no segundo artigo do Jefferson Braz. Observe como trabalha a função "Lista_Load". Bons estudos.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

Avatar do usuário
Damasceno Jr.
Mensagens: 440
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: ADODB

Mensagempor Damasceno Jr. » 07 Mar 2017, 03:17

Humm... vi também que comentou o artigo do site relatando um problema.

O exemplo disponibilizado é simples e genial. Mas ao adaptar ao seu projeto esteja atento!

Certifique-se de estar passando para a função "Lista_Load" parâmetros válidos. (parâmetros aceitos: csql e ForMy)

csql: uma instrução SQL válida para sua base de dados.

exemplo: "select campo1, campo2, ..., campoN from SuaTabela order by CampoAOrdernar"

exemplo de chamada contido no artigo: Call Lista_Load("select * from tblContatos order by nome_contato", Me.Form.Name)
obs.: o "*" significa todos os campos da tabela.

ForMy: nome de um formulário do seu front-end que esteja aberto e onde você deseja recuperar os dados.

exemplo de chamada contido no artigo: Call Lista_Load("select * from tblContatos order by nome_contato, Me.Form.Name)

Veja também se o nome do seu controle combobox está corretamente nomeado, pois a função irá trabalhar no controle do formulário que tenha o nome "Lista". Veja essa indicação no código da função:

Código:
Public Sub Lista_Load(csql, ForMy)

Call Conexao_Open(csql)

Dim FormAberto As Form 'Recebe o nome do formulário atual
Set FormAberto = Forms(ForMy)

FormAberto.Lista = Null 'Limpa seleção do registro
FormAberto.Lista.RowSource = "" 'Limpa os dados da caixa de listagem
FormAberto.Lista.Requery 'atualiza dados da caixa de listagem

While (Not rs.EOF)

FormAberto.Lista.AddItem rs.Fields(0).Value & ";" & rs.Fields(1).Value
rs.MoveNext 'vai para o proximo registro

Wend

rs.Close 'fecha o recorset
cn.Close 'fecha o banco de dados

End Sub


Você disse ao comentar o artigo que:
"Acontece que as únicas alterações que fiz foi na tabela __Parametros, onde alterei o Servidor para "localhost" e o nome do banco de dados."

Então certamente não deve ter adaptado a instrução SQL para que seja válida para o seu banco de dados. Ainda está usando a mesma do exemplo.

Para aprender mais sobre MySQL e como montar SQL's eu indico esse canal do youtube. Me ajudou muuuuuiiiito quando também migrei minha base de dados para MySQL. Vale a pena conferir.

Bons estudos.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

jbcotrim
Mensagens: 17
Registrado em: 08 Jun 2015, 13:13

Re: ADODB

Mensagempor jbcotrim » 07 Mar 2017, 05:06

Olá Damasceno Jr.

Obrigado por sua atenção.
Todos os esses detalhes que você relatou foram atentados. Talvez eu é que não expliquei o problema adequadamente.
É o seguinte. Quando abro a "ComboBox", ela está trazendo os dados corretos. Mas, o que está acontecendo é o seguinte.

No formulário tenho uma ComboBox que traz os dados da unidade (apto). No mesmo formulário tenho uma "ListBox" que, ao chamar uma unidade na ComboBox, o sistema mostra na ListBox todas as parcelas em aberto desta unidade ok? Cliclando numa das parcelas mostradas na ListBox, também no mesmo formulário, me mostra todos os dados dessa parcela, tais como, nº da parcela, data de vencimento, valor, multa, juros, correção monetária, e, se tiver taxa extra, o tipo da taxa extra, a conta onde está sendo contabilizada, o histórico do lançamento e o valor da taxa extra. Aí é que está o problema. Esses campos são ComboBox, com exceção do Valor da Taxa Extra que é campo texto. Esse está vindo normal.

Veja o anexo por favor.
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Damasceno Jr.
Mensagens: 440
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: ADODB

Mensagempor Damasceno Jr. » 07 Mar 2017, 11:55

Segue anexo um exemplo de como recuperar dados para uma combobox ou listbox.

Lembre-se: o exemplo do artigo tem o código aberto, ou seja, você pode alterá-lo para fazer o que quiser e como quiser para atender sua necessidade.
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

jbcotrim
Mensagens: 17
Registrado em: 08 Jun 2015, 13:13

Re: ADODB

Mensagempor jbcotrim » 08 Mar 2017, 02:57

Caro amigo Damasceno!

Obrigado mais uma vez por sua atenção.
Eu li as suas alterações nos códigos do exemplo anexado, mas como eu disse anteriormente, o problema não é popular a ComboBox e sim, trazer da tabela "tblmensalidades", o valor que corresponde ao campo dessas "ComboBoxes". Ou seja, na tabela "tblmensalidades" eu tenho os campos:

"TxExtra1" => Recebe o código do tipo de "Taxa de Extra" que vem da tabela "tblTipoTaxa"; Ex: Cod: 376 = Fundo de Reserva;
"ContaExt1" => Recebe o código da conta contábil correspondente a Fundo de Reserva que vem da tabela "tblPlanoDeContas"; Ex: Cod 195 = Conta Fundo de Reserva;
"CodHistExt1" => Recebe o código do Histórico de lançamento contábil que vem da tabela "tblHistoricos"; Ex: Cod 376 = Rec de Fundo de Reserva da Unidade "tal"
"VlrTxExtra1" => Recebe o Valor da Taxa Extra, neste exemplo, o valor do Fundo de Reserva.

Nota: Inicialmente, estes campos são alimentados no momento da geração das Cotas Condominiais, mensalmente.

No formulário, como pode ver no anexo do Post anterior, os campos "TxExtra1", "ContaExt1" e "CodHistExt1", são ComboBox, para o caso da necessidade de alteração desses dados, buscá-los das referidas tabelas. Porém, quando clicar na "Parcela" na ListBox, o formulário tem que trazer os dados dessa parcela que estão na tabela "tblmensalidades".

Acontece que ao clicar na parcela, os valores desses campos não estão vindo para o formulário.
Este é o problema, ok?
Se puer me ajudar eu desde já agradeço imensamente.
Um forte abraço!
Jeser

Avatar do usuário
Damasceno Jr.
Mensagens: 440
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: ADODB

Mensagempor Damasceno Jr. » 08 Mar 2017, 11:40

Acho que devo estar fazendo confusão mesmo. rsrs. Vamos ver se entendi agora.

Repare a parte em vermelho do código da função "Lista_Select":

Código:
...

For Each Controle In FormAberto

'se o tipo de controle for caixa de texto então
If Controle.ControlType = acTextBox Then

FormAberto.Controls(Controle.Name) = rs(Controle.Name).Value

End If

Next

...

A estrutura condicional só permite que controle do tipo caixa de texto recebam valores. Para que combobox também passem a receber valores então altere esse trecho do código para:
Código:
...

For Each Controle In FormAberto

'se o tipo de controle for caixa de texto ou se o tipo de controle for combobox então
If Controle.ControlType = acTextBox Or Controle.ControlType = acComboBox Then

FormAberto.Controls(Controle.Name) = rs(Controle.Name).Value

End If

Next

...


Aguardo resposta.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

jbcotrim
Mensagens: 17
Registrado em: 08 Jun 2015, 13:13

Re: ADODB

Mensagempor jbcotrim » 09 Mar 2017, 02:26

É meu amigo Damasceno.

Eu já havia feito dessa forma. Nada acontece mesmo assim. O Form só traz os valores para campo tipo texto. O valor da Taxa Extra por exemplo.
Se eu colocar no lugar da combobox uma campo texto, o forma me mostra o dado. Acontece que o que está na "tblmensalidades" no campo "txExtra1" é o código da Taxa Extra que vem da tabela "tblTipoTaxa". Esse valor mostrado no Form num campo tipo texto, não significará nada para quem vê. Por isso o uso da ComboBox que vai mostrar a "Descrição da Taxa Extra", como por exemplo = "Fundo de Reserva".
Estou pesquisando mas não acho nenhum exemplo de um forma que faça essa função. VocÇe já fez algum teste com essa função? Deu certo?
Vamos continuar tentando a solução.
Obrigado mais uma vez!
Um forte abraço!
Jeser

Avatar do usuário
Damasceno Jr.
Mensagens: 440
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: ADODB

Mensagempor Damasceno Jr. » 09 Mar 2017, 03:53

Jeser, atualmente tenho um aplicativo na secretaria de saúde em que trabalho feito todo em cima desse exemplo dado no artigo do Jefferson e do formulário desvinculado que tem no aplicativo Maestro do site UsandoAccess.com.br.

Tive que fazer algumas modificações, mas no final deu tudo certo e me sinto orgulhoso de ter aproximadamente 20 usuários utilizando ao mesmo tempo o sistema de qualquer local que tenha conexão com internet e com um ótimo desempenho. Tenho muito a agradecer ao mestre Avelino pelo aprendizado e ao Jefferson por ajudar a expandir meus horizontes.

Tive alguns problemas também com as comboboxes mas consegui contornar todos. Por isso estou tentando muito ajudá-lo pois entendo o que deve estar passando.

O que complica um pouco é quando a combobox possui mais de uma coluna (acho que é o seu caso: uma oculta pro código e outra pra exibir a descrição da taxa extra).

Como você está fazendo: primeiro atribuindo valor a combobox e depois carregando a lista dela? Ou primeiro carregando a lista e depois atribuindo valor a combo (ordem correta)?
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

Avatar do usuário
Damasceno Jr.
Mensagens: 440
Registrado em: 08 Jun 2015, 01:30
Localização: Medicilândia-Pará

Re: ADODB

Mensagempor Damasceno Jr. » 09 Mar 2017, 12:03

Segue um exemplo.
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.
Quanto mais o tempo passa, mais descubro e mais me apaixono por MS Access.

jbcotrim
Mensagens: 17
Registrado em: 08 Jun 2015, 13:13

Re: ADODB

Mensagempor jbcotrim » 18 Mar 2017, 02:43

Olá amigo Damasceno.
Obrigado mais uma vez pela ajuda.
Me perdoe pela demora no feedback mas é que estive bem atarefado e sem tempo para testar o seu exemplo.
Realmente eu estava fazendo a ordem errada. Eu estava primeiro atribuindo valor a combobox e depois carregando a lista dela. Agora está trazendo direitinho os valores da tabela. Porém, surgiu um problema. Como você pode observar no anexo que postei, são quatro "ComboBox" que podem receber os valores da tabela, pois, à "Cota Condominial" pode-se adicionar até 4 tipos de "Taxas Extras" diferentes (acontece). E esse fato está deixando o carregamento dessas "ComboBoxes" muito lento. Está levando mais de 4 segundos para carregar o registro. Há alguma outra forma para que o carregamento não fique tão lento?

Um forte abraço!
Jeser

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Access x MySql”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 1 visitante