Jump to content
Fórum Script Brasil
  • 0

Problema Com Banco De Dados


brunohjoia
 Share

Question

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 to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.8k
    • Total Posts
      648.5k
×
×
  • Create New...