Query SQL funciona direto no Banco mas no SQL não!
15/02/2021
0
Olá!
Tenho tentado realizar um inner join no DBGRID. Contextualizando: Tenho uma tabela cadastro títulos e outra tabela devedores. Como PK tenho os campos cod_dev e cod_tit. Como FK tenho um campo "ref" setado na tabela títulos para o campo cod_dev, conforme se mostra no código da criação abaixo:
Estou tentando fazer com que o campo correspondente ao CPF mostre o nome referente a busca da pessoa. Assim, minha string de pesquisa no SQL seria:
O que funciona muito bem dentro de um cliente SQL normal (como o HeidiSQL). Porém, quando tento inserir os mesmos comandos no Delphi, utilizando o código:
Me retorna o erro: Object [cod_tit] is not found.
Alguma idéia?
P.S.: Não sei o porquê de a codificação do site duplicar o símbolo de ' '. Mas em todos tem um só!
Tenho tentado realizar um inner join no DBGRID. Contextualizando: Tenho uma tabela cadastro títulos e outra tabela devedores. Como PK tenho os campos cod_dev e cod_tit. Como FK tenho um campo "ref" setado na tabela títulos para o campo cod_dev, conforme se mostra no código da criação abaixo:
CREATE TABLE `devedores` ( `cod_dev` INT(11) NOT NULL AUTO_INCREMENT, `nome` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `cpf` CHAR(20) NOT NULL DEFAULT '0' COLLATE 'utf8_general_ci', `endereco` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `responsavel` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `cidade` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `bairro` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `cep` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `telefone` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `email` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_general_ci', `ck_empresa` BIT(1) NULL DEFAULT NULL, PRIMARY KEY (`cod_dev`) USING BTREE, INDEX `cpf` (`cpf`) USING BTREE ) COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=11 ;
CREATE TABLE `titulos` ( `cod_tit` INT(11) NOT NULL AUTO_INCREMENT, `tipo` INT(11) NOT NULL, `emissao` DATE NULL DEFAULT NULL, `vencimento` DATE NULL DEFAULT NULL, `credor` CHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci', `devedor` CHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8_general_ci', `valor_ori` FLOAT NOT NULL DEFAULT '0', `valor_corr` FLOAT NOT NULL DEFAULT '0', `ref` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`cod_tit`) USING BTREE, INDEX `FK_titulos_devedores` (`ref`) USING BTREE, CONSTRAINT `FK_titulos_devedores` FOREIGN KEY (`ref`) REFERENCES `finajud`.`devedores` (`cod_dev`) ON UPDATE RESTRICT ON DELETE RESTRICT ) COLLATE='latin1_swedish_ci' ENGINE=InnoDB AUTO_INCREMENT=5 ;
Estou tentando fazer com que o campo correspondente ao CPF mostre o nome referente a busca da pessoa. Assim, minha string de pesquisa no SQL seria:
SELECT nome FROM devedores INNER JOIN titulos ON titulos.cod_tit = devedores.cod_dev where devedor LIKE 'algum valor'
O que funciona muito bem dentro de um cliente SQL normal (como o HeidiSQL). Porém, quando tento inserir os mesmos comandos no Delphi, utilizando o código:
with DM_Finajud.tb_titulos do begin close; SQL.Clear; SQL.Add('SELECT nome FROM devedores inner JOIN titulos'); SQL.Add('ON titulos.cod_tit = devedores.cod_dev'); SQL.Add('where devedor like :pesquisa'); ParamByName('pesquisa').AsString:= Edit1.Text; open; end;
Me retorna o erro: Object [cod_tit] is not found.
Alguma idéia?
P.S.: Não sei o porquê de a codificação do site duplicar o símbolo de ' '. Mas em todos tem um só!
Matheus
Curtir tópico
+ 0
Responder
Posts
15/02/2021
Emerson Nascimento
Você usa o dataset DM_Finajud.tb_titulos para alguma outra finalidade? Há campos persistidos nesse dataset? Se há campos persistidos e na tua instrução você traz apenas o campo 'nome' o sistema vai apresentar um erro, pois espera os demais campos persistidos.
Responder
16/02/2021
Matheus
Você usa o dataset DM_Finajud.tb_titulos para alguma outra finalidade? Há campos persistidos nesse dataset? Se há campos persistidos e na tua instrução você traz apenas o campo 'nome' o sistema vai apresentar um erro, pois espera os demais campos persistidos.
Obrigado pela resposta! Na dúvida, inseri um novo componente TQuery para testar e me dei conta do erro. O que aconteceu foi que para exibir a coluna no DBGrid de forma adequada ao usuário, acabei mudando o nome dos fields na Query. Resolvido!
Responder
Clique aqui para fazer login e interagir na Comunidade :)