SETAR VARIAVEL NO VB6

ROGERCSANTOS 16/12/2013 14:47:38
#432145
Bom dia Pessoal,

Estou com uma dúvida para passar o valor para uma variável. No meu caso eu fiz o seguinte:

- Declarei a variável, sendo: Dim resultant As Integer
- No código: resultant = ([Ô]SELECT MAX(CODIGO)FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text)

Observação: o campo txtcodigo.text está com o valor 184

Quando executo o sistema da a mensagem de Type mismatch e se eu colocar o mouse em cima da linha vejo que está retornando 0.

Coloquei o código SELECT MAX(CODIGO)FROM BANCO Where CODIGO < 184 no sql server e retornou 183, ou seja, direto pelo Sql deu certo,

Alguém poderia me ajudar?

Agradeço a todos

Roger



ROGERCSANTOS 16/12/2013 16:39:46
#432156
Estranho, o tópico deu status de atualizado porém não tinha mensagem nenhuma.
FILMAN 16/12/2013 23:42:57
#432169
Cara a maneira que esta fazendo não esta correta!

a instrução SQL deve ser passado por um recordset para recuperar os valores e outra não declare integer, pois futuramente terá problemas com o limite da variável.


Qualquer duvida poste ai
ROGERCSANTOS 17/12/2013 08:00:01
#432172
Bom dia Filman,

Tentei colocar em um Recordset e aparece a mesma mensagem Erro Type Mismatch.

O Código estou usando é o seguinte (Botão Anterior):

Case 2 [ô]Botão Anterior
Dim CN_Ant As New ADODB.Connection
Dim rsSelecaoBancoAnt As New ADODB.Recordset
Dim cnnComandoBanco_Ant As New ADODB.Command


CN_Ant.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN_Ant.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia BD
CN_Ant.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN_Ant.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN_Ant.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN_Ant.Open [ô] Abrindo a conexão

Set rsSelecaoBancoAnt = New ADODB.Recordset
Set rsSelecaoBancoAnt.ActiveConnection = CN_Ant

rsSelecaoBancoAnt.Open [Ô]SELECT CODIGO,CODIGOFEBRABAN,ABREVIATURA,NOME FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text And ([Ô]SELECT MAX(CODIGO)as CODIGO FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text), CN_Ant, adOpenStatic

If rsSelecaoBancoAnt.BOF Then
MsgBox [Ô]Não existem mais registros para visualização![Ô], vbInformation
Else
txtcodigo.Text = rsSelecaoBancoAnt!CODIGO
txtcodbanco.Text = rsSelecaoBancoAnt!CODIGOFEBRABAN
txtabrbanco.Text = rsSelecaoBancoAnt!ABREVIATURA
txtnomebanco.Text = rsSelecaoBancoAnt!Nome
End If

Observação:

O erro aparece na seguinte linha do código:
rsSelecaoBancoAnt.Open [Ô]SELECT CODIGO,CODIGOFEBRABAN,ABREVIATURA,NOME FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text And ([Ô]SELECT MAX(CODIGO)as CODIGO FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text), CN_Ant, adOpenStatic

O que pode ser o problema?
Se vc souber de outro jeito de fazer tbm, idéias são sempre bem vindas, rsrsr

Abraço

Roger

ROGERCSANTOS 17/12/2013 12:41:00
#432192
Se alguem mais tiver alguma sugestão, fique a vontade também

Agradeço a atenção de tdos

Roger
KERPLUNK 17/12/2013 14:37:58
#432195
Por favor, repassar conhecimentos básicos sobre concatenação. Tente assim:
rsSelecaoBancoAnt.Open [Ô]SELECT CODIGO,CODIGOFEBRABAN,ABREVIATURA,NOME FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text & [Ô] And (SELECT MAX(CODIGO)as CODIGO FROM BANCO Where CODIGO) < [Ô] & txtcodigo.Text, CN_Ant, adOpenStatic
FILMAN 17/12/2013 15:49:33
#432204
Tente assim

Mude essa linha
rsSelecaoBancoAnt.Open [Ô]SELECT CODIGO,CODIGOFEBRABAN,ABREVIATURA,NOME FROM BANCO Where CODIGO <  [Ô] & txtcodigo.Text And ([Ô]SELECT MAX(CODIGO)as CODIGO FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text), CN_Ant, adOpenStatic



Para essa
rsSelecaoBancoAnt.Open [Ô]SELECT MAX(CODIGO)as CODIGO FROM BANCO Where CODIGO < [Ô] & txtcodigo.Text, CN_Ant, adOpenStatic



Vê se consegue algo
ROGERCSANTOS 17/12/2013 22:56:49
#432229
Kerplunk,

Testei a linha que me passou e deu o seguinte erro:

Run-time error [ô]-2147217900 (80040e14)[ô]:
Uma expressão de tipo não booleano especificada em um contexto no qual se espera uma condição, próximo a [ô])[ô].


Filman,

Eu já havia testado o método que me indicou, porém da a seguinte mensagem:

Run-time error [ô]3265[ô]
O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado.

Quando clico no botão anterior, apenas o registro relativo ao campo código movimenta, porém, tenho que mover tambem os campos CODIGOFEBRABAN,ABREVIATURA e NOME. Por este motivo optei pela opção da outra select.

MARCELO.TREZE 18/12/2013 11:49:03
#432249
vou tentar também

tente

rsSelecaoBancoAnt.Open [Ô]SELECT CODIGO,CODIGOFEBRABAN,ABREVIATURA,NOME FROM BANCO Where (SELECT MAX(CODIGO) as CODIGO FROM BANCO Where CODIGO = [ô][Ô] & (CInt(txtcodigo.Text)  - 1) & [Ô][ô])[Ô], CN_Ant, adOpenStatic

ROGERCSANTOS 18/12/2013 13:39:02
#432252
Boa tarde Marcelo,

Deu a mesma mensagem

Run-time error [ô]-2147217900 (80040e14)[ô]:
Uma expressão de tipo não booleano especificada em um contexto no qual se espera uma condição, próximo a [ô])[ô].

Roger
FILMAN 18/12/2013 15:24:31
#432273
Tente assim

Dim LCodigo As Long

rsSelecaoBancoAnt.Open [Ô]SELECT MAX(CODIGO) as COD_MAX FROM BANCO, CN_Ant, adOpenKeyset, adLockReadOnly

If rsSelecaoBancoAnt.RecordCount = 0 Then
LCodigo = 1
Else
LCodigo = rsSelecaoBancoAnt([Ô]COD_MAX[Ô]) + 1
End If



Veja se ajuda
Página 1 de 2 [19 registro(s)]
Tópico encerrado , respostas não são mais permitidas