Ir para conteúdo
Fórum Script Brasil
  • 0

MaterDetail em RunTime


claudyo

Pergunta

Bom dia a todos

é o seguinte, preciso fazer um masterdetail em runtime. Tenho a tabela telefones e a tabela cliente, e minha busca nessas tabelas seria tanto pelo nome do cliente qt pelo telefone, então to tentando setar o mastersource, masterfields e indexfieldname em runtime, mas não ta funcionando. A pergunta é: é possivel fazer isso e se possivel qual a maneira correta, porque já pesquisei e não achei nada q resolva meu problema.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

obrigado pela atençao Jhonas. Ainda não achei nehuma duvida parecida com a minha, e não sei se me expressei bem. montar relatorios (simples) eu sei, também consigo fazer um masterdetail só q faço isso configurando as propriedades MASTERSOURCE, MASTERFIELDS e INDEXFIELDNAME em tempo de projeto, eu quero saber se é possivel passar esses valores em tempo de execuçao

algo mais ou menos assim

if rbtTelefone.Checked=true then
begin
 cdscliente.Active:=false;
   cdsTel.Active:=false;
   cdsCliente.MasterSource:=dtsTel;
   cdsCliente.MasterFields:=cdsTel.fieldbyName('CLIENTE_ID_1').AsString;
   cdsCliente.IndexFieldNames:=cdsTel.fieldByname('CLIENTE_ID_1').AsString;
         with qryTel do
          begin
              Active:=false;
              Sql.Clear;
              Sql.Text:='SELECT CLIENTE.CLIENTE_ID, CLIENTE.NOME, CLIENTE.RG, CLIENTE.CPF, CLIENTE.LOGRADOURO, CLIENTE.NUMERO, CLIENTE.BAIRRO, CLIENTE.COMPLEMENTO, CLIENTE.OBSERVACAO,             TELEFONES.TEL_ID, TELEFONES.CLIENTE_ID, TELEFONES.NUMERO '+
                        'FROM (CLIENTE INNER JOIN TELEFONES ON CLIENTE.CLIENTE_ID = TELEFONES.CLIENTE_ID)'+
                         ' Where TELEFONES.NUMERO like :pTel';
             Params[0].Value:=EdtTelefone.Text;
             Active:=true;
        end;
    end;
    cdscliente.Active:=true;
    cdsTel.Active:=true;
end;

claro q isso não funcionou, eu keria saber se o que eu to tentando é possivel e como se faz

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
montar relatorios (simples) eu sei, também consigo fazer um masterdetail só q faço isso configurando as propriedades MASTERSOURCE, MASTERFIELDS e INDEXFIELDNAME em tempo de projeto, eu quero saber se é possivel passar esses valores em tempo de execuçao

É possivel sim ... voce tem duas maneiras de fazer isso:

antes do preview do report ou no evento BeforePrint do quick report

lembre-se que o masterdetail deve ter a tabela principal e para os demais registros linkados pelo Inner Join voce deve usar um QRChildBand1

para saber se a sua instrução select esta funcionando, use um dbgrid para mostrar os registros selecionados

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

uma coisa q eu não tinha dito antes, eu só preciso q esses dados sejam mostrados em duas grids não é necessario um report. Da forma q eu fiz ta retornando todos os dados da tabela detalhe, e qd eu configuro em tempo de projeto ai sim funciona certo. O q ta errado no codigo q te mostrei???

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

ok claudyo, acho que o que voce esta querendo fazer, pode ser feito de maneira mais simples

veja o help

MasterSource property (TCustomClientDataSet)

Specifies a data source component for the master dataset when establishing a detail-master relationship between this dataset and another one.

Delphi syntax:

property MasterSource: TDataSource;

C++ syntax:

__property Db::TDataSource* MasterSource = {read=GetDataSource, write=SetDataSource};

Description

Use MasterSource to specify the name of the data source component whose DataSet property identifies a dataset to use as a master table in establishing a detail-master relationship between this dataset and another one.

At design time choose an available data source from the MasterSource property’s drop-down list in the Object Inspector.

After setting the MasterSource property, specify which fields to use in the master table by setting the MasterFields property. At runtime each time the current record in the master table changes, the new values in those fields are used to select corresponding records in this dataset for display.

Note: At design time, use the Field Link designer to establish the master-detail relationship between two datasets.

Tip: MasterSource establishes a master/detail relationship using the traditional linked cursor approach. Alternately, client datasets can participate in master/detail relationships using nested datasets, where the detail dataset is stored with the master table’s data. To assign a client dataset’s data as the value of a nested detail, use the DataSetField property.

voce usa a propriedade MasterSource para em tempo de projeto, usar um Campo de Ligação para estabelecer a relação de mestre-detalhe entre dois datasets.

em termos praticos seria o mesmo que:

exemplo:

SELECT Clientes.COD, Clientes.NOME, Veiculos.MARCA, Veiculos.MODELO, Veiculos.ANO, Veiculos.PLACAS
FROM Clientes
   INNER JOIN Veiculos
   ON  (Clientes.COD = Veiculos.COD_CLIENTE)
e no seu caso poderia ser usado apenas assim:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if rbtTelefone.Checked=true then
   begin
      with qryTel do
         begin
           Active:=false;
           Sql.Clear;
           Sql.Text:='SELECT CLIENTE.CLIENTE_ID, CLIENTE.NOME, CLIENTE.RG, CLIENTE.CPF, CLIENTE.LOGRADOURO, CLIENTE.NUMERO, CLIENTE.BAIRRO, CLIENTE.COMPLEMENTO, CLIENTE.OBSERVACAO, TELEFONES.TEL_ID, TELEFONES.CLIENTE_ID, TELEFONES.NUMERO '+
                     'FROM CLIENTE INNER JOIN TELEFONES ON (CLIENTE.CLIENTE_ID = TELEFONES.CLIENTE_ID)'+
                     ' Where TELEFONES.NUMERO like :pTel';
           Params[0].Value:=EdtTelefone.Text;
           Active:=true;
         end;
      end;
   end;

end;

abraço

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...