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

Problema Com Banco De Dados


brunohjoia

Pergunta

Olá Pessoal

Estou montando um form que mostra o conteudo de uma base de dados em access 2000 (Uso o service Pack 6). Como a base de dados é muito grande, estou tentando montar um botão com uma rotina que pesquise o conteudo de um campo de codigo de um banco de dados e mostre o registro correspondente ao codigo nesse mesmo form. Estou usando o seguinte código:

Private Sub cmdProcCod_Click()
aux = InputBox("Digite abaixo o código do produto desejado:")
 If Val(aux) = Empty Then
  Exit Sub
 End If
 Data1.Recordset.FindFirst ("codigoproduto=" & aux)
 If Val(txtCodigo.Text) <> Val(aux) Then
  MsgBox "Codigo não cadastrado."
 End If
End Sub

Acontece que quando executo o botão, e digito na inputbox o numero do codigo q quero, aparece uma mensagem de erro escrita assim:

Run-time Error '3464':

tipo de dados imcompatível na expressão de critério

Alguém pode me ajudar a acabar com esse erro? Se alguém quiser mais algumas especificações sobre como estou tentando montar a rotina, para poder me ajudar, estarei aqui para falar!!!

Obrigado!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Era texto... mudei para numérico e deu certo!!! mas tem um problema... Agora pretendo fazer a mesma coisa para procurar o conteudo de um campo que seja texto (NomeProduto) e não numero... Aí eu já tentei, mas quando eu testo e coloco um nome no inputbox, ele dá erro pois pensa que aquilo q coloquei é o nome de um campo, e não o conteudo dele... Já quando coloco um numero, ele executa normalmente, mas como não tem nenhum nome que seja somente numero, aparece a msgbox (nome não cadastrado).

Além disso, eu queria que quando eu digitasse na inputbox uma parte do nome do produto, ele encontrasse todos os registros que coincidissem com aquilo que foi digitado, mesmo que o nome não seja exatamente aquele... Existe alguma outra função que faça isso sem ser o FindFirst? Por favor, me mandem um exemplo prático!!!!!!!

Obrigado!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Era texto... mudei para numérico e deu certo!!! mas tem um problema... Agora pretendo fazer a mesma coisa para procurar o conteudo de um campo que seja texto (NomeProduto) e não numero... Aí eu já tentei, mas quando eu testo e coloco um nome no inputbox, ele dá erro pois pensa que aquilo q coloquei é o nome de um campo, e não o conteudo dele... Já quando coloco um numero, ele executa normalmente, mas como não tem nenhum nome que seja somente numero, aparece a msgbox (nome não cadastrado).

No VB quando queremos que um texto seja literal, usamos " (aspas duplas) para delimitá-lo. Pois bem, em SQL também, no entanto temos a opção de usar a ' (aspa simples) para delimitar os textos (a fim de não ter problemas com a delimitação do VB). Exemplo:

aux = InputBox("Digite abaixo o começo do nome do produto desejado:")
If aux<>"" Then
  Data1.Recordset.FindFirst "nomeproduto>='" & aux & "'")
endif
Além disso, eu queria que quando eu digitasse na inputbox uma parte do nome do produto, ele encontrasse todos os registros que coincidissem com aquilo que foi digitado, mesmo que o nome não seja exatamente aquele... Existe alguma outra função que faça isso sem ser o FindFirst? Por favor, me mandem um exemplo prático!!!!!!! Obrigado!!!
Se for o caso de coincidir com o início do nome do produto, o exemplo acima servirá. Note que usei o operador >= ao invés de somente =. Outra opção é usar o operador LIKE que aceita caracteres coringas nos textos a serem procurados. Exemplo:
aux = InputBox("Digite uma parte qualquer do nome do produto desejado:")
If aux<>"" Then
  Data1.Recordset.FindFirst "nomeproduto LIKE '%" & aux & "%'")
endif

Se você não sabe, % significa qualquer texto de qualquer comprimento (inclusive vazio). É o mesmo que * (aliás, se o primeiro não funcionar, tente este; de uma versão para outra isso mudou [de * para %]).

E em relação a uma outra opção além do FindFirst, existe o Seek que procura através de índices (todavia, a utilização é da mesma maneira e você ainda tem de fazer alguns ajustes na abertura da tabela). Porém, nunca precisei realmente usá-lo (o Seek), já que o FindFirst (e suas variantes FindLast, FindNext e FindPrevious) além de instruções SQL sempre me serviram bem (e ainda servem, porém com ADO).

Abraços,

Graymalkin

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,2k
    • Posts
      652k
×
×
  • Criar Novo...