|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
newrogerio Experiente
Registrado: Quarta-Feira, 6 de Setembro de 2006 Mensagens: 422
|
Enviada: Sáb Dez 16, 2006 12:22 pm Assunto: Consulta SQL |
|
|
bom ,,,é o seguinte estou com um problema em uma consulta..
tenhu uma tabela CLIENTE(cod_cli,nome_cli,endereco_cli).....e outra Tabea SERVIÇO(cod_servico,cod_cli,data_servico)....como vcs estaum, vendo....na tabela servico uso uma foreign key(cod_cliente)
bom a consulta e a seguinte.......numa edit eu escrevo o nome do cliente..
e no dbgrid.....aparece todos os servicos do cliente...ordenado por data...
só ke como na tabela servico , naum tem o campo nome do cliente e sim o codigo do cliente..............então eu tenhu ki digitar o codigo do cliente para aparecer os dados do servico...
como ki eu faço pra resolver isso,.....pois keru digitar o nome e naum o codigo...
banco feito em interbase |
|
Voltar ao Topo |
|
|
Maick Aprendiz
Registrado: Terça-Feira, 10 de Agosto de 2004 Mensagens: 183 Localização: Interior SP
|
Enviada: Dom Dez 17, 2006 7:22 pm Assunto: |
|
|
Bom dia Rogerio.
O que vc procura é simples, ñ sei qual componente de acesso vc está utilizando, mas como os componentes de acesso para o delphi segue um padrão, vai ser facil pra vc entender. ( eu uso ZEOS e MySQL )
No componente TABLE existem propriedades chamadas MasterSource, MasterFields e IndexFieldName, que são responsaveis pelo relacionamento mestre/detalhe entre as tabelas.
Pela sua descrição de banco, a tabela CLIENTE é a tabela mestre e a de SERVIÇO é a detalhe.
Faça o seguinte:
Selecione o componente TABLE que carrega a tabela SERVIÇO
Na propriedade MasterSource vc seleciona o DataSource setado para interagir com a tabela cliente.
Na propriedade MasterFields vc seleciona ou digita o campo chave da tabela cliente "cod_cli"
Na propriedade IndexField vc seleciona ou digita a chave estrangeira da tabela SERVIÇO "cod_cli"
Fazendo isto as tabelas estarão interligadas, podera visualizar facilmente esse relacionamento jogando 2 grids ( 1 para cada tabela ) e navegando pelo registros da tabela mestre ( CLIENTES ).
Agora quanto a parte do usuario entrar com o nome do cliente ao invez do codigo, vc pode fazer utilizando a função locate ou atraves de filtros.
Eu pessoalmente prefiro filtros, mas cabe a vc avaliar qual a melhor solução para seu formulario.
Da uma pesquisada nas duas soluções e qualquer duvida posta aki dnovo
[]s |
|
Voltar ao Topo |
|
|
newrogerio Experiente
Registrado: Quarta-Feira, 6 de Setembro de 2006 Mensagens: 422
|
Enviada: Dom Dez 17, 2006 9:51 pm Assunto: |
|
|
e ai Maik beleza...valeu por tentar me ajudar....mas eu naum entendi muito bem.....
eu to usando um ''IBQUERY'' um ''IBUPDATESQL'' e um ''DATASOURCE''
procedure TFHistoricoCliente.edtLocalizarClienteChange(Sender: TObject);
begin
if edtLocalizarCliente.Text <> '' then
begin
ibqryHistoricoCliente.Close; // esse aqui eu usei só pra fazer a consulta
// no datamodule tem o ibqryCliente esse
// uso para gravação
ibqryHistoricoCliente.SQL.Clear;
ibqryHistoricoCliente.SQL.Add('select * from TB_SERVICO where COD_CLI like ' + #39 + edtLocalizarCliente.text + #39);
ibqryHistoricoCliente.SQL.Add('Order by DATA_SERVICO');
ibqryHistoricoCliente.Open;
end;
end;
ta ai +- pra vc ve como eu fiz.........nessa consulta só fucniona se eu digitar o codigo do cliente como eu ja havia explicado............mas tem ki ser o nome.............
me da uma luz....pq até o fim do mes esse sisteminha tem ki ta pronto
TB_CLIENTE
cod_cli
nome_cli
endereco_cli
telefone_cli
TB_SERVICO
cod_servico
cod_cli
data_servico
horario_servico
descricao_servico
sem querer abusar.......mas se vc souber alguma coisa sobre estoque,,,,,,me da umas dica tbm..................eu só keru dar entrada e saida no estoque..........
[/img] |
|
Voltar ao Topo |
|
|
beto1002005 Aprendiz
Registrado: Segunda-Feira, 23 de Mai de 2005 Mensagens: 110
|
Enviada: Seg Dez 18, 2006 7:07 am Assunto: |
|
|
Ola Rogério!
Usa um IbDataSet. No OnChance do edit que voce usara para à pesquisa
põe este codigo
Código: |
WITH ibDataSet1 DO
BEGIN
CLOSE;
SelectSQL.Clear;
SelectSQL.ADD('SELECT C.*, S.* FROM TB_CLIENTE C, TB_SERVICO S');
SelectSQL.ADD('WHERE S.COD_CLI = C.COD_CLI AND upper(C.NOME_CLI) LIKE upper(:pNOME)');
SelectSQL.ADD('ORDER BY S.DATA_SERVICO');
ParamByName('pNOME').VALUE := '%'+edtNome.Text+'%';
OPEN;
END;
|
Tenta ai, ve se resolve seu problema.
Espero ter ajudado. T+ |
|
Voltar ao Topo |
|
|
newrogerio Experiente
Registrado: Quarta-Feira, 6 de Setembro de 2006 Mensagens: 422
|
Enviada: Seg Dez 18, 2006 10:06 am Assunto: |
|
|
e ai beto100 beleza.........essa funciono......valeu |
|
Voltar ao Topo |
|
|
newrogerio Experiente
Registrado: Quarta-Feira, 6 de Setembro de 2006 Mensagens: 422
|
Enviada: Seg Dez 18, 2006 7:58 pm Assunto: |
|
|
to com mais um problema numa consulta.............tenhu uma maskedit......e nela digito uma data......e no dbgrid tem ki aparecer todas as datas ki forem iguais a da maskedit..................só ki naum to sabendo fazer alguma conversão ou algo do tipo,,,,,,,,,,,,,,,,,,naum da erro ,....mas tbm naum aparece nada.....o codigo ki tou usando e este
no evento OnChange
if mskdtLocalizarServico.Text <> '' then
begin
ibqryLocalizarServico.Close;
ibqryLocalizarServico.SQL.Clear;
ibqryLocalizarServico.SQL.Add('select * from TB_SERVICO where DATA_SERVICO like' + #39 + mskdtLocalizarServico.text + #39);
ibqryLocalizarServico.Open;
end; |
|
Voltar ao Topo |
|
|
newrogerio Experiente
Registrado: Quarta-Feira, 6 de Setembro de 2006 Mensagens: 422
|
Enviada: Ter Dez 19, 2006 10:05 am Assunto: |
|
|
ai gente já consegui resolver a quetão da data...........utilizei um MonthCalendar......e deu certinho...
agora só falta a parte do estoque que é só dar entrda e saida..............se alguem souber de um sisteminha exemplo ou algum codigo ..me de uma mão ai.......................mas tem ki ser pro interbase |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|