Query SQL funciona direto no Banco mas no SQL não!

15/02/2021

7

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:
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ó!
Responder

Posts

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar