Página 1 de 1

Data Type

Enviado: 21 Set 2005 15:28
por alemao
Amigos,

Eu sei que o fórum é apenas sobre Clipper (no qual também sou fã) mas estou enfrentando um problema com Visual Basic e se alguém puder ajudar ficarei muito grato.

No VB6 quando faço uma pesquisa em banco de dados... Problema de tipo de dado (data type)

a linha de código é esta:

TB.Open "Select * FROM Locais WHERE cod_loc='& Val(cod_reg.Text) &'", "PROVIDER=Microsoft.Jet.oledb.3.51; PERSIST Security Info=False;USER ID=;Data Source=C:\arquivos de programas\contrans\banco.mdb", adOpenStatic, adLockOptimistic

Onde
- COD_LOC é o campo da tabela (Numérico)
- COD_REG é o textbox onde o usuário informa o código desejado.
- Val(cod_reg.Text) é o valor do textbox ´cod_reg´ convertido em numérico.

Mesmo usando a função Val() para converter o campo text ele retorna este erro de tipo de dado:

"Data type Mismatch in criteria expression"

Ele tenta fazer a busca de um dado tipo texto no banco onde o campo é tipo número e dá erro. Seria coerente se o textbox não estivesse sendo convertido para numérico com a função Val(). Mas já fiz testes com Val() e sem Val() e o resultado é o mesmo.

Enviado: 21 Set 2005 18:02
por Everton
Seguinte Alemao:

O problema ta nas aspas vc colocou assim a expressao:

cod_loc='& Val(cod_reg.Text) &'"

a expressao correta é esta:

cod_loc=" & cod_reg.Text & "

Aqui vai a consulta corrigida:

TB.Open "Select * FROM Locais WHERE cod_loc=" & cod_reg.Text & ", "PROVIDER=Microsoft.Jet.oledb.3.51; PERSIST Security Info=False;USER ID=;Data Source=C:\arquivos de programas\contrans\banco.mdb", adOpenStatic, adLockOptimistic

Qualquer coisa estou as ordens.

[]s

Enviado: 21 Set 2005 18:07
por Visitante
Erro seu colega...
tenta assim...

TB.Open "Select * FROM Locais WHERE cod_loc=" & cod_reg.Text &", "PROVIDER=Microsoft.Jet.oledb.3.51; PERSIST Security Info=False;USER ID=;Data Source=C:\arquivos de programas\contrans\banco.mdb", adOpenStatic, adLockOptimistic

Uso também o vb, embora esteja ainda iniciando nele.
Não testei a rotina, mas o erro grave ao meu ver é:
1 - vc está concatenando uma string (a string do select) com um valor numérico [val(cod_reg.text)] e, para complicar mais ainda, vc inicia a sequencia como caractere ao colocar cod_loc = ' "& val(cod_reg.text) & "'"
Somente deve ser iniciados com ' após o sinal de = os valores textuais

Por exemplo seu eu quisesse fazer somente cod_loc = 2, eu faria:

TB.Open "Select * FROM Locais WHERE cod_loc= 2, "PROVIDER=Microsoft.Jet.oledb.3.51; PERSIST Security Info=False;USER ID=;Data Source=C:\arquivos de programas\contrans\banco.mdb", adOpenStatic, adLockOptimistic

Repare que eu não usei '2', pois é um valor numérico.

Tenta isso e depois me diga em particular marcus@lizander.net

Um Clip (e VB) Abraço!

Enviado: 22 Set 2005 10:52
por alemao
Amigos,


Era problema nas aspas mesmo. Vejam a diferença e podem fazer o teste que funciona tranquilo.


Para facilitar a vida de quem está iniciando no VB (desculpem mais uma vez abordar VB aqui no fórum, mas é de utilidade para todos), você pode dividir as consultas assim:

Campo tipo TEXTO:
Set TB = New ADODB.Recordset
TB.Open "Select * FROM Veiculos WHERE nome_vei='" & UCase(Pesquisa) & "'", "PROVIDER=Microsoft.Jet.oledb.3.51; PERSIST Security Info=False;USER ID=;Data Source=C:\arquivos de programas\contrans\banco.mdb", adOpenStatic, adLockOptimistic

Onde:
nome_vei -> campo tipo texto
pesquisa -> variável para consulta do veículo

Campo tipo NÚMERO:
Set TB = New ADODB.Recordset
TB.Open "Select * FROM Locais WHERE cod_loc=" & cod_reg.Text, "PROVIDER=Microsoft.Jet.oledb.3.51; PERSIST Security Info=False;USER ID=;Data Source=C:\arquivos de programas\contrans\banco.mdb", adOpenStatic, adLockOptimistic


A linha acima resolveu o problema.


Não esqueça de declarar a variável TB (ou qq nome q quiser) no início do código do formulário, assim:
Dim WithEvents TB As ADODB.Recordset

Não esqueça também de inserir no seu projeto, o componente "DataEnvironment" para que a conexão com o banco seja feito com sucesso. Para inserir escolha "Project" depois "Add DataEnvironment"


Obrigado e um Clip-VB abraço! :xau