marlonCampos Postado Novembro 28, 2008 Denunciar Share Postado Novembro 28, 2008 (editado) Estou tentando fazer uma consulta em duas tabelas: pecas e fornecedor.Na tabela fornecedor tenho o campo cod_fornecedor como chave primária.Na tabela pecas tenho o campo cod_fornecedor que é chave estrangeira.Quando eu cadastro uma peça preciso fazer uma validação para saber se realmente aquele fornecedor existe.Já tentei váriar o código, porém sem sucesso.Aqui vai um exemplo do que tentei fazer:ADOQuery1.SQL.Text := 'Select fornecedor.cod_fornecedor, pecas.cod_fornecedor From fornecedor, pecas Where fornecedor.cod_fornecedor = pecas.cod_fornecedor'; ADOQuery1.Close; ADOQuery1.Open; if ADOQuery1.IsEmpty then begin Application.MessageBox('Fornecedor não encontrado!', PChar(Application.Title), MB_MB_ICONQUESTION + MB_OK); abort; end;Agradeço pela ajuda. Editado Novembro 28, 2008 por marlonCampos Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frega Postado Novembro 28, 2008 Denunciar Share Postado Novembro 28, 2008 não entendi sua pergunta perfeitamente, esse comando é para rodar quando tiver cadastrando a peça? para ver se o fornecedor digitado existe?e esse comando ai, roda em qual evento?se é o que eu entendi, pode tentar com INNER JOIN, Right Join, Left Join Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marlonCampos Postado Novembro 28, 2008 Autor Denunciar Share Postado Novembro 28, 2008 (editado) não entendi sua pergunta perfeitamente, esse comando é para rodar quando tiver cadastrando a peça? para ver se o fornecedor digitado existe?e esse comando ai, roda em qual evento?se é o que eu entendi, pode tentar com INNER JOIN, Right Join, Left Join(Como eu não fui muito claro resolvi fazer algumas modificações no primeiro post.)Esse evento roda no click de um botão ao lado do edit dbedit_cod_fornecedor que é informado pelo usuário antes de mandar gravar o registro.Eu sei que quando o usuário for salvar o registro e o fornecedor não existir o prórpio banco acusa. Só que eu queria que o usuário verificasse, antes de salvar, se o fornecedor existe para que apareça uma janela informando os dados do fornecedor.procedure Tfrm_peca.Button1Click(Sender: TObject);begin inherited;ADOQuery1.SQL.Text := 'Select fornecedor.cod_fornecedor, pecas.cod_fornecedor From fornecedor, pecas Where fornecedor.cod_fornecedor = pecas.cod_fornecedor'; ADOQuery1.Close; ADOQuery1.Open;if ADOQuery1.IsEmpty thenbeginApplication.MessageBox('Fornecedor não encontrado!', PChar(Application.Title), MB_MB_ICONQUESTION + MB_OK);abort;end; Editado Novembro 28, 2008 por marlonCampos Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frega Postado Novembro 29, 2008 Denunciar Share Postado Novembro 29, 2008 no OnExit do DBEdit onde o usuario digita o fornecedor você pode botar:Select cod_fornecedor from fornecedor where cod_fornecedor = '+QuotedStr(DBEditCOD_fornecedor.text)o resto é igual, caso não ache o fornecedor digitado ele vai dar a mensagem... não entendi porque você deu um select das duas tabelas , não há porque disso, Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marlonCampos Postado Novembro 29, 2008 Autor Denunciar Share Postado Novembro 29, 2008 (editado) Olha só Frega,A primeira coisa que eu pensei foi isso que você disse.Só que quando eu faço assim o adoquery1.isempty sempre retorna true. Quando na verdade existe o fornecedor.Depois resolvi colocar esse código só que nas linhas abaixo eu coloquei um adoquery1.close e adoquery1.open o que acabava zerando todos os outros campos e como havia sido modificada a string de conexão não era mais permitido salvar algum registro.Aí o que eu tentei fazer foi o seguinte: acessar as tabelas pecas e fornecedor e comparar o valor do campo cod_fornecedor da tabela pecas com algum valor do campo cod_fornecedor da tabela fornecedor, caso o que o usuário digitasse já fosse atribuído ao campo cod_pecas da tabela pecas.Só que também não deu certo. Editado Novembro 29, 2008 por marlonCampos Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 marlonCampos Postado Novembro 29, 2008 Autor Denunciar Share Postado Novembro 29, 2008 Ok pessoal!Consegui resolver!Adicionei um adoconnection2 e tudo deu certo. Não sei ainda se essa é a melhor solução.A string ficou como eu pesei na primeira vez e como frega sugeriu.Valeu pela ajuda. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Frega Postado Novembro 29, 2008 Denunciar Share Postado Novembro 29, 2008 ahh você estava fazendo tudo numa query só??para isso tem que usar 2 query, 1 query que vai fazer a consulta dos fornecedores e outra query que seria a do cadastro da peça...abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
marlonCampos
Estou tentando fazer uma consulta em duas tabelas: pecas e fornecedor.
Na tabela fornecedor tenho o campo cod_fornecedor como chave primária.
Na tabela pecas tenho o campo cod_fornecedor que é chave estrangeira.
Quando eu cadastro uma peça preciso fazer uma validação para saber se realmente aquele fornecedor existe.
Já tentei váriar o código, porém sem sucesso.
Aqui vai um exemplo do que tentei fazer:
ADOQuery1.SQL.Text := 'Select fornecedor.cod_fornecedor, pecas.cod_fornecedor From fornecedor, pecas Where fornecedor.cod_fornecedor = pecas.cod_fornecedor';
ADOQuery1.Close;
ADOQuery1.Open;
if ADOQuery1.IsEmpty then
begin
Application.MessageBox('Fornecedor não encontrado!', PChar(Application.Title), MB_MB_ICONQUESTION + MB_OK);
abort;
end;
Agradeço pela ajuda.
Editado por marlonCamposLink para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.