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.
Data Type
Moderador: Moderadores
-
Everton
- Usuário Nível 3

- Mensagens: 143
- Registrado em: 07 Jul 2004 08:53
- Localização: Campo Grande - MS
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
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
Everton Luiz Penteado
Clipper 5.2b - Blink 7.0
Clipper 5.2b - Blink 7.0
-
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!
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!
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
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
