Fórum Campo Lookup: Pesquisar com campo lookup #336339
17/01/2007
0
tm um campo lookup (qryNOMEMARCA) ... pq eu salvo no db somente o ID da marca....
entao no grid pra mostrar no nome da marca eu ligo o campo com a qryNOMEMARCA.....
agora ... c o usuario quiser procurar a marca : ID= 10 (SKOL) por exemplo ...
como eu montaria o sql pra pesquisar a marca SKOL ....??? visto q no db so ta salvo id = 10
Output
Curtir tópico
+ 0Posts
17/01/2007
Aroldo Zanela
Um alternativa é o uso de campos lookups que podem ser adicionados por meio do Fields Editor.
Gostei + 0
17/01/2007
Output
teria como dar uma detalhada pra mim???
tendo em vista q ja foi criado um campo lookup para mostrar o nomedamarca
o problema ta na consulta.....
aguardo retorno
Gostei + 0
17/01/2007
Ruyoutor
select ID from tabela dolookup where ID = ANY(select ID from tabela_q_tem_o_nome where nome = ´SKOl´)
cara tenta ai eu fiz com um banco que eu tenho aki e funcionou eu usei SQL Server, mas acredito que todos os bancos dão suporte a função ´ANY´
Se funcionar vc posta ai
vlw!
Gostei + 0
17/01/2007
Aroldo Zanela
teria como dar uma detalhada pra mim???
tendo em vista q ja foi criado um campo lookup para mostrar o nomedamarca
o problema ta na consulta.....
aguardo retorno[/quote:e63313e291]
Colega,
Agora caiu a ficha (acho). Você quer saber como relacionar as duas tabelas numa consulta? É isso? Ou ainda não entendi?
Gostei + 0
17/01/2007
Output
pq na tabela de produtos vai ta gravado somente o id da marca
e no grid de produtos ao inves de mostrar o id da marca ele mostra o nome da marca (q eh um lookup - pega o id da marca e exibe o nome da marca)
oke eu qria saber eh como eu faço ... digamo q o user digite num edit de pesquisa o nome da marca .... como vou pesquisar por nome da marca c no db esta gravado somente o id da marca??
entende?
fiko mto grato msm c puder me ajudar... tenha uma boa tarde. ..
Gostei + 0
17/01/2007
Ruyoutor
Esse caso vc vai usar uma subquery para consultar a tabela que tem a marca(SKOL) através do que o usuário digitar no edit, e retornar o codigo da marca para a consulta principal exibir os registros que tenham essa ID(10)
Gostei + 0
17/01/2007
Output
desculpa naum tinha visto seu post antes ... so agora fui ver ...
tentei da forma q vc flw ... fiz assim:
procedure TfrmProduto.txtConsultaChange(Sender: TObject); begin qry.Close; qry.SQL.Clear; qry.SQL.Add(´SELECT ID_MARCA FROM PRODUTOS´); qry.SQL.Add(´WHERE ID_MARCA = ANY(SELECT ID FROM MARCA WHERE MARCA = ´ + ´´´´ + txtConsulta.Text + ´´´´); qry.Open; end; end;
na execuca do projeto me retorna o seguint erro:
[b:428bc6400b]line 2: Incorrect syntax near ´SKOL´[/b:428bc6400b]
ps: uso o banco MS SQL SERVER 2000
Gostei + 0
17/01/2007
Ruyoutor
procedure TfrmProduto.txtConsultaChange(Sender: TObject); var Consulta: String; begin Consulta:= ´Select ID_Marca from Produtos´; Consulta:= Consulta + ´ where ID_MARCA = ANY´; Consulta:= Consulta + ´(Select ID from MARCA where MARCA = ´; Consulta:= Consulta + #39+txtConsulta.text+39; qry.Close; qry.SQL.Clear; qry.SQL.Add(Consulta) qry.Open; end; 39 vai colocar o valor do editi entre aspas na consulta preste muita atenção nos espaços, como é uma consulta muito grande vc pode se descuidar e ficar alguma coisa colada na outra. Outra coisa eu só criei a variável consulta pq ñ sei com qual query vc está trabalhando porque tem componetes query que da para inserir o codigo direto da linha desejada. Ex: query1.sql[1]:= ´codigo´; Isso é possível no ADOQuery que é o que eu estou usando no momento nesse que vc esta usando eu não sei. Acho q no seu ñ tava funcionando pq quando vc da um add ele limpa automaticamente o q está dentro da propriedade SQL não tenho certeza mais acho q sim e eu numca trabalhei com aspas igual vc colocou mas tenho certeza que com #39 vai funcionar. tentai ai qualquer coisa estamos ai vlw!
Gostei + 0
17/01/2007
Ruyoutor
Gostei + 0
17/01/2007
Output
da o msm erro de antes ....
to usando ADOQuery....
oke eu faço agora ....
Gostei + 0
17/01/2007
Output
soh q naum quer da certo aki kra .... sera q eu fiz coisa errada?
Gostei + 0
17/01/2007
Aroldo Zanela
Criei um banco hipotético aqui só para servir de base para o exemplo:
Banco de dados (SQL Server 2000):
/*==============================================================*/ /* Table: MARCAS */ /*==============================================================*/ create table MARCAS ( MARC_ID int not null, MARC_NOME varchar(30) not null, constraint PK_MARCAS primary key (MARC_ID) ) go /*==============================================================*/ /* Table: PRODUTOS */ /*==============================================================*/ create table PRODUTOS ( PROD_ID int not null, MARC_ID int null, PROD_DESCRICAO varchar(60) not null, constraint PK_PRODUTOS primary key (PROD_ID) ) go /*==============================================================*/ /* Index: RELATIONSHIP_1_FK */ /*==============================================================*/ create index RELATIONSHIP_1_FK on PRODUTOS ( MARC_ID ASC ) go alter table PRODUTOS add constraint FK_PRODUTOS_RELATIONS_MARCAS foreign key (MARC_ID) references MARCAS (MARC_ID) go
Criando um select com associação entre as tabelas que permita localizar os produtos pelo nome da marca:
select * from produtos inner join marcas on (produtos.marc_id = marcas.marc_id) where marcas.marc_nome =´MARCA´
Gostei + 0
17/01/2007
Ruyoutor
select * from produto where ID_MARCA = ANY(select ID from marca where marca = ´SKOL´)
esse codigo foi testado no sql server 2000
sendo q no lugar das aspas e de SKOL vc coloca #39+txtconsulta
esse código que eu estou te passando foi testado e funcionou
As tabelas que eu criei forma
Produto:
ID
ID_MARCA
NOME
Marca:
ID
MARCA
Gostei + 0
17/01/2007
Output
Obrigado Aroldo Zanela,
Obrigado ruyoutor .
Aroldo Zanela, da forma q vc me passo ou testei aki e funcionou direitinho do geito q eu qria ... vlw msm kra pela força ....
ruyoutor, da forma q vc me passou naum da certo kra .... sra q eh eu q to fazendo algo errado :
to fazendo assim:
qry.Close;
qry.SQL.Clear;
qry.SQL.Add(´select * from produtos´);
qry.SQL.Add(´where ID_MARCA = ANY(select ID from marca where marca = ´ + #39 + txtConsulta.Text + 39);
qry.Open;
end;
ele me da o msm erro
c eu tirar o 39 ele me da o erro:
Unclosed quotation mark before the character string
de qualquer forma vlw tb kra .... vlw pelas dicas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)