Vou vê se consigo ajudar e se entendi realmente o que você quer fazer ok? Tbl_carro: codigo_carro nome cor placa tbl_peca: codigo_peca modelo referencia preço tbl_carro_peca codigo_carro_peca (sequencial) codigo_peca FK codigo_carro FK Tbl_Compra Codigo_Compra Cliente Codigo_Peca Codigo_Carro você pode fazer uma query assim: // Com essa Query você consegue buscar o que tem correspond. nas três tabelas. // O resultado dessa query pode ser mais de uma peça e você deverá mostrar em um DbGrid e selecionar a peça correspondente ao que o cliente quer. Caso você precise fazer uma consulta mais aprofundada pela aproximação do nome da peça você me fala, primeiro vê se isso te atende ok? With Query1 do begin close; SQL.Clear; SQL.Text := 'select * from tbl_carro a, tbl_peca b, tbl_carro_peca c '+ 'where a.codigo_carro = c.codigo_carro and '+ ' b.codigo_peca = c.codigo_peca and '+ ' a.codigo_carro = :parametro '; ParamByName('parametro').asInteger := strtoint(trim(codigo_carro.text)); Open; end; //Carrega os dados na tela aqui, essa forma pode ser aplicada no On Click de um botão ou no On key down do DbGrid ok? On Click if not isempty then begin formEDITS.Edit_Carro_Codigo.text := FieldByName('codigo_carro').asString; formEDITS.Edit_Peca_Codigo.text := FieldByName('peca_codigo').asString; Etc... FORMDBGRID.close; end else begin ShowMessage('Informe a peça a ser selecionada'); dbgrid.setfocus; exit; end; // On Key Down do DBGrid: if key = vk_return then // esse vk_return é para o enter begin if not isempty then begin formEDITS.Edit_Carro_Codigo.text := FieldByName('codigo_carro').asString; formEDITS.Edit_Peca_Codigo.text := FieldByName('peca_codigo').asString; Etc... FORMDBGRID.close; end else begin ShowMessage('Informe a peça a ser selecionada'); dbgrid.setfocus; exit; end; end; // Caso você queira usar outra tecla pra selecionar os capos e jogar nos edits ultilize o nome da tecla depois do vk_ ok? algumas você tem q fazer de outra forma... // Depois de selecionado os campos para os edits é só colocar o código para cadastrar numa tabela de compras EX: With Query_Inclusao do begin Close; SQL.Clear; SQL.Text := 'Insert into tbl_compras '+ '(compra_codigo, carro_codigo, cliente, peca_codigo) '+ 'Values '+ '(:compra_codigo, :carro_codigo, :cliente, :peca_codigo) '; // Colocar Parametros OBS: Caso o seu código de compra seja auto incremento você não deve coloca-lo no código acima e nem abaixo ok? ParamByName('Compra_Codigo').asInteger := StrToInt(Trim(Edit_Codigo_Compra.Text)); ParamByName('carro_codigo').asInteger := StrToInt(trim(Edit_Carro_Codigo.text)); Etc... ExecSQL; end; OBS: Toda vez que você quiser fazer uma consulta de compra você pode fazer uma query como na primeira fazendo referência a outras tabelas ok? Um abraço, Espero ter ajudado... , Qualquer coisa pergunte!!! Anderson Gonçalves - anderson_sys@yahoo.com.br