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

Preenchimento automático de um textbox


Guest --Marco Antonio --

Pergunta

Guest --Marco Antonio --

Boa tarde a todos!

Bom, estou em um projeto em VB 6 e estou usando ADO.

Tenho um Combobox e um Textbox.

O Combobox é preenchido com dados de uma tabela do Access.

O que acontece é o seguinte:

Eu tenho um outro formulário onde cadastro os dados que preencherão o combobox. Esses dados se referem a serviços diversos e possuem um valor unitário que eu também cadastro, ou seja, no momento do cadastro, eu registro o serviço no campo "servico" da tabela e seu respectivo valor unitário no campo "valor unitário" da mesma tabela.

Necessito que, ao escolher um item cadastrado na combobox, o seu respectivo valor unitário preencha automaticamente o Textbox para realizar o calculo do serviço.

alguém pode me informar o código?

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

Link para o comentário
Compartilhar em outros sites

18 respostass a esta questão

Posts Recomendados

  • 0
Guest --Marco Antonio --

Acho que não entendi cara...

Bom, as colunas são as seguintes:

unidade - serviço - valor unitário

01 AA 10,00

02 BB 20,00

03 CC 30,00

04 DD 40,00

Aí, eu cadastro a unidade, serviço e valor unitário refrente ao SERVICO.

Depois de cadastrar, abro outro formulário que contem uma combobox e um textbox

O que eu quero é que quando eu escolher por exemplo o item AA no conbobox, automaticamente seja preenchido o text box com o valor unitario 10,00, entende?

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0

Para isso faça o seguinte:

No evento do Combobox, você faz um select do preço onde o código é o que esta no combo, depois mostra no campo texto, mais ou menos assim:

Option Explicit

'Declara e instancia as variaveis
Dim oCnn As New ADODB.Connection
Dim oRs As New ADODB.Recordset

Private Sub ComboBox1_Click()

       'Abre a conexao com o banco de dados
       oCnn.Open "string de conexao com o banco"

       'Checa se o recordset esta aberto, se estiver, fecha
       If oRs.State = adStateOpen Then oRs.Close

       'Pega o preço do serviço selecionado
       oRs.Open "Select valor unitario From servicos Where servico = " & ComboBox1.Text, oCnn

       'Checa se retornou algo
       If Not oRs.EOF Then

              'Preenche o campo texto com o valor unitario
              TextBox1.Text = oRs.Fields.Item(0).Value

       End If

       If oRs.State = adStateOpen Then oRs.Close
       If oCnn.State = adStateOpen Then oCnn.Close

       Set oRs = Nothing
       Set oCnn = Nothing

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marco Antonio --

Bom dia! Tudo bem?

Então cara, a minha tabela tem o nome de servico e os campos em questão tem os nomes de servico b e valor unitario b. Eu usei o seu código apenas substituindo os nomes, mas deu o seguinte erro:

Run-time error '-2147217900 (80040e14)':

Erro de sintaxe (operador faltando) na expressão de consulta 'valor unitario b'.

Quando eu clico em debug é destacada a linha:

oRs.Open "SELECT valor unitario b FROM servico WHERE servico b = " & cboservico1.Text, oCnn

Eis o código abaixo. Outra coisa: A que se refere o Option Explicit? devo coloca-lo no "General Declarations?"

Option Explicit

'Declara e instancia as variaveis

Dim oCnn As New ADODB.Connection

Dim oRs As New ADODB.Recordset

Private Sub cboservico1_Click()

'Abre a conexao com o banco de dados

oCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Marco Antonio\Desktop\Projeto odonto\odonto.mdb;Persist Security Info=False"

'Checa se o recordset esta aberto, se estiver, fecha

If oRs.State = adStateOpen Then oRs.Close

'Pega o preço do serviço selecionado

oRs.Open "SELECT valor unitario b FROM servico WHERE servico b = " & cboservico1.Text, oCnn

'Checa se retornou algo

If Not oRs.EOF Then

'Preenche o campo texto com o valor unitario

txtval1.Text = oRs.Fields.Item(0).Value

End If

If oRs.State = adStateOpen Then oRs.Close

If oCnn.State = adStateOpen Then oCnn.Close

Set oRs = Nothing

Set oCnn = Nothing

End Sub

Option Explicit

'Declara e instancia as variaveis

Dim oCnn As New ADODB.Connection

Dim oRs As New ADODB.Recordset

Private Sub cboservico1_Click()

'Abre a conexao com o banco de dados

oCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Marco Antonio\Desktop\Projeto odonto\odonto.mdb;Persist Security Info=False"

'Checa se o recordset esta aberto, se estiver, fecha

If oRs.State = adStateOpen Then oRs.Close

'Pega o preço do serviço selecionado

oRs.Open "SELECT valor unitario b FROM servico WHERE servico b = " & cboservico1.Text, oCnn

'Checa se retornou algo

If Not oRs.EOF Then

'Preenche o campo texto com o valor unitario

txtval1.Text = oRs.Fields.Item(0).Value

End If

If oRs.State = adStateOpen Then oRs.Close

If oCnn.State = adStateOpen Then oCnn.Close

Set oRs = Nothing

Set oCnn = Nothing

End Sub

Option Explicit

'Declara e instancia as variaveis

Dim oCnn As New ADODB.Connection

Dim oRs As New ADODB.Recordset

Private Sub cboservico1_Click()

'Abre a conexao com o banco de dados

oCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Marco Antonio\Desktop\Projeto odonto\odonto.mdb;Persist Security Info=False"

'Checa se o recordset esta aberto, se estiver, fecha

If oRs.State = adStateOpen Then oRs.Close

'Pega o preço do serviço selecionado

oRs.Open "SELECT valor unitario b FROM servico WHERE servico b = " & cboservico1.Text, oCnn

'Checa se retornou algo

If Not oRs.EOF Then

'Preenche o campo texto com o valor unitario

txtval1.Text = oRs.Fields.Item(0).Value

End If

If oRs.State = adStateOpen Then oRs.Close

If oCnn.State = adStateOpen Then oCnn.Close

Set oRs = Nothing

Set oCnn = Nothing

End Sub

Valeu aí!

Link para o comentário
Compartilhar em outros sites

  • 0

Se o nome do seu campo for mesmo 'valor unitario b' e 'servico b', tente usando colchetes ([]):

Option Explicit

'Declara e instancia as variaveis
Dim oCnn As New ADODB.Connection
Dim oRs As New ADODB.Recordset

Private Sub cboservico1_Click()

       'Abre a conexao com o banco de dados
       oCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Marco Antonio\Desktop\Projeto odonto\odonto.mdb;Persist Security Info=False"

       'Checa se o recordset esta aberto, se estiver, fecha
       If oRs.State = adStateOpen Then oRs.Close

       'Pega o preço do serviço selecionado
       oRs.Open "SELECT [valor unitario b] FROM servico WHERE [servico b] = " & cboservico1.Text, oCnn

       'Checa se retornou algo
       If Not oRs.EOF Then

       'Preenche o campo texto com o valor unitario
       txtval1.Text = oRs.Fields.Item(0).Value

End If

If oRs.State = adStateOpen Then oRs.Close
If oCnn.State = adStateOpen Then oCnn.Close

Set oRs = Nothing
Set oCnn = Nothing

End Sub

Eis o código abaixo. Outra coisa: A que se refere o Option Explicit? devo coloca-lo no "General Declarations?"

Primeiro - o Option Explicit serve para forçar a declaração de variáveis, assim quando você executar o projeto (CTRL+F5) se tiver alguma variável não delarada, vai gerar um erro de compilação.

Segundo - Exatamente, o Option Explicit deve ser a primeira linha do código.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marco Antonio --

Não funcionou cara... Eu cadastrei um serviço chamado "Exame Clinico" para exemplo e cadastrei o preço tb. Aparece o seguinte erro:

Run-time error '-2147217900 (80040e14)':

Erro de sintaxe (operador faltando) na expressão de consulta '[servico b] = Exame Clínico'.

Vou continuar tentando aqui. Caso você consiga algo, responde aí por favor.

Muito obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Seguinte, para campos do tipo caracter, deve ser utilizado aspas simples (') antes e depois do valor, assim:

Option Explicit

'Declara e instancia as variaveis
Dim oCnn As New ADODB.Connection
Dim oRs As New ADODB.Recordset

Private Sub cboservico1_Click()

       'Abre a conexao com o banco de dados
       oCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Marco Antonio\Desktop\Projeto odonto\odonto.mdb;Persist Security Info=False"

       'Checa se o recordset esta aberto, se estiver, fecha
       If oRs.State = adStateOpen Then oRs.Close

       'Pega o preço do serviço selecionado
       oRs.Open "SELECT [valor unitario b] FROM servico WHERE [servico b] = '" & cboservico1.Text & "'", oCnn

       'Checa se retornou algo
       If Not oRs.EOF Then

       'Preenche o campo texto com o valor unitario
       txtval1.Text = oRs.Fields.Item(0).Value

End If

If oRs.State = adStateOpen Then oRs.Close
If oCnn.State = adStateOpen Then oCnn.Close

Set oRs = Nothing
Set oCnn = Nothing

End Sub

Testa aí.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marco Antonio --

Funciona que é uma beleza! Dá até gosto!

Cara, o meu muito obrigado! Tanto pela solução do caso, quanto pelas explicações embutidas. Isso é muito importante para iniciantes como eu, para que possamos entender o "porque" do código. Esse fórum é de responsa!

Valeu!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marco Antonio --

Olha eu aqui de novo enchendo o saco...

Cara, você me disse que o para carcter deve-se usar aspas simples como no exemplo que você forneceu:

oRs.Open "SELECT [valor unitario b] FROM servico WHERE [servico b] = '" & cboservico1.Text & "'", oCnn

Mas depois de programar isso e outras coisas, descobri que esses preços que são preenchidos devem ser números, porque depois de aparecer o valor dos preços, vai ter um label mostrando a soma deles!

Então como faço para que o programa entenda que os preços que aparecem preenchidos não são caracteres?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marco Antonio --

Tudo bem, Anderson?

tentei colocar essa formatação no txtval1_change, mas não funcionou.

Será que está considerando caracter devido ao código que você me passou pra preencher a text box?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Marco Antonio --

Opa, Anderson

Eu consegui resolver a questão. Adicionei o componente "Microsoft Mask Edit Control". Com ele eu só escolhi a unidade mnonetária nas propriedades e funcionou legal.

Agora a questão é que quando eu escolho o primeiro e segundo item do combo para aparecer o valor unitario no text, tudo certo. Quando eu vou escolher o terceiro combobox para aparecer o terceiro valor unitario aparecer o erro:

Run-time error '28':

Out od stack space

Não consigo identificar ao que se refere esse erro. O Visual Basic também não mostra onde está.

Valeu!

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...