Erro de Conversão String

Delphi

08/07/2015

Estou tentando filtrar a Cidade pelo Estado em dois DBLookupcombobox

com esse comando no Onexit do estado

QCidade.Close;
QCidade.Active := False;
QCidade.SQL.Clear;
QCidade.SQL.Add('select * from "cidade" where "cidade"."cod_estado" = :estado');
QCidade.Params.ParamByName('estado').Value := DBLEstado.KeyField;
QCidade.Active := True;
QCidade.Open;

só que ao clicar na cidade mostra esse erro

conversion error from string "cod_estado"

alguém me ajuda?
Igor Castro

Igor Castro

Curtidas 0

Melhor post

Igor Castro

Igor Castro

15/07/2015

Deu certoo, muito obrigadoo *.*'

era só isso mesmo @Dorivan Sousa
GOSTEI 1

Mais Respostas

Gabriel Baltazar

Gabriel Baltazar

08/07/2015

Por que esse cidade e codestado estão entre plique duplo?
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

eu peguei esse banco da internet de cidades e estado e ele veio com essas aspas no nome

select * from "cidade"

se eu tirar não funciona =/.


eu mudei o comando para

QCidade.Close;
QCidade.Active := False;
QCidade.SQL.Clear;
QCidade.SQL.Add('select * from "cidade" where "cidade"."cod_estado" = :estado');
QCidade.Params.ParamByName('estado').Value := DBLEstado.KeyValue;
QCidade.Active := True;
QCidade.Open;

aparentemente deu certo só não está filtrando eu conecto a Query no Lookupcombobox

e aparece stackoverflow
GOSTEI 0
Ariel Morgan

Ariel Morgan

08/07/2015

Ainda está difícil de entender o que está fazendo...
Mas vamos lá, qualquer coisa retorna:
QCidade.Close;
QCidade.Active := False;
QCidade.SQL.Clear;
QCidade.SQL.Add('select * from CIDADE where COD_ESTADO = :estado');
QCidade.Params.ParamByName('estado').Value := DBLEstado.KeyField;
QCidade.Active := True;
QCidade.Open;
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

Opa Ariel estou tentando fazer com que ao selecionar no meu DBLookupcombobox o estado ele filtre e me mostre só as cidades pertencentes aquele estado

pela chave estrangeira cod_estado isso tudo através de uma Query
GOSTEI 0
Ariel Morgan

Ariel Morgan

08/07/2015

Opa Ariel estou tentando fazer com que ao selecionar no meu DBLookupcombobox o estado ele filtre e me mostre só as cidades pertencentes aquele estado

pela chave estrangeira cod_estado isso tudo através de uma Query


Você quer selecionar a CIDADE pelo CÓDIGO do ESTADO selecionado no DBLookupComboBox, tudo bem...
QCidade.Close;
QCidade.Active := False;
QCidade.SQL.Clear;
QCidade.SQL.Add('select * from CIDADE where COD_ESTADO =' + DBLEstado.KeyField); 
QCidade.Active := True;
QCidade.Open;


tenta isso qualquer coisa faz primeiro o parâmetro receber o valor e depois ir pro SQL
GOSTEI 0
Gabriel Baltazar

Gabriel Baltazar

08/07/2015

Amigo tenta isso aqui só pra teste, pode ser que o erro esteja no lookup.

QCidade.SQL.Add('select * from "cidade" where "cidade"."cod_estado" = :estado');
QCidade.Params.ParamByName('estado').AsString := 'RJ';
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

Tentei de tudo infelizmente não consegui =/

Quando vocês vão fazer uma tela de cadastro de cliente por exemplo e querem que ao selecionar o estado no DBLookupcombobox ele filtre as cidades

como vocês fazem?
GOSTEI 0
Gabriel Baltazar

Gabriel Baltazar

08/07/2015

Amigo, você tentou desse jeito que falei aí em cima, setando o parâmetro na mão?
Pois se mesmo assim ainda está dando erro, o problema não está no lookup.
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

08/07/2015

-
qual o tipo do cod_estado? integer ou varchar?
qual o banco de dados?

-
as aspas nos nomes do campos (pelo menos no firebird q eu uso) é pra diferenciar maisculas e minusculas, colocar espaço no nome dos campos, usar palavras reservadas nos nomes das tabelas, campos e etc....

-
QCidade.Active := True;
QCidade.Open; 

ai usa um ou outro pq se vc olhar o codigo do open nada mais é que active:=true;
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

O tipo do cod_estado Smallint
Banco de dados Firebird
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

@Ariel ao tentar esse exemplo

QCidade.Close;
QCidade.Active := False;
QCidade.SQL.Clear;
QCidade.SQL.Add('select * from CIDADE where COD_ESTADO =' + DBLEstado.KeyField);
QCidade.Active := True;


deu column unknown COD_ESTADO

é algo pra relacionar nos componentes não é?
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

QCidade.SQL.Add('select * from "cidade" where "cidade"."cod_estado" = :estado');
QCidade.Params.ParamByName('estado').Value := '6';

Tentei esse e ele mostrou só as cidades do estado 6 claro =)
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

Alguém ajuda =(?
GOSTEI 0
Dorivan Sousa

Dorivan Sousa

08/07/2015

voce criou essas tabelas com aspas nos nomes dos campos, sugiro que vc nao utilize assim a menos que vc realmente queria usar o nomes minusculos nas tabelas e campos...

se o projeto nao ta em producao (ou seja nao esta´em algum cliente) remova as tabelas e crie novamente mas nao crie assim:

create tabela "cidades" (
"cod_cidade" integer,
"nom_cidade" varchar(40)
)

faça sem as aspas

create tabela cidades (
cod_cidade integer,
nom_cidade varchar(40)
)


e do jeito que vc fez pegando o keyfield nao tem como funcionar pq o keyfield é o nome do campo e nao o valor dele...

use o KeyValue
assim:
QCidade.SQL.Add('select * from "cidade" where "cidade"."cod_estado" = :estado');
QCidade.Params.ParamByName('estado').Value := DBLEstado.KeyValue;

ou

QCidade.SQL.Add('select * from CIDADE where COD_ESTADO =' + DBLEstado.KeyValue);
GOSTEI 0
Igor Castro

Igor Castro

08/07/2015

Muito obrigado pela resposta Dorivan eu vou testar aqui se der certo eu aviso

eu peguei esse banco de cidades e estados da internet e importei pro meu e veio com o nome das tabelas assim

mais vou refazer pra tirar essas aspas
GOSTEI 0
POSTAR