Jump to content

Delphi 11 - Listar na DBGrid dados do meu ClientDataSet onde o codigo é igual a X


Murilo Piazza

Postagens Recomendadas

Boa noite

Vou explicar meu cenário

Tenho uma query trazendo todos os dados da minha tabela tenho um datasetprovider ligado no meu clientdataset e um datasource ligado na minha query e a grid esta ligada ao meu DataSource 

Preciso listar na minha grid ''defeitos'' que estao na tabela OFIordDF   (Minha query traz todos os dados dessa tabela)

Porem quero fazer um filtro nessa amostra de dados, preciso trazer todos os defeitos onde o numero da minha ordem de serviço é X

Explicando mais um pouco tenho a tabela OFIord onde insiro a minha ordem de servico e a OFIordDF onde insiro os defeitos da ordem de serviço inseridos na tabela anterior.

Select usado na Query SELECT b.CdEmpresa, b.CdOrdemServico, b.CdDefeito, b.DtInclusao, b.DsUsuInclusao, b.DsDefeito FROM OFIOrdDf b inner join OFIOrd a on a.CdOrdemServico = b.CdOrdemServico

PRECISO DE UM AUXILIO TAMBEM NA PARTE DE INSERIR OS DEFEITOS NA TABELA

Pois preciso inserir os defeitos no clientdataset (Onde estarão listados na grid) e depois inserir o que esta na grid no banco

image.png

Qualquer duvida ou questionamento é bem vindo

Link to comment
Compartilhe em outros sites

Como insiro os outros dados na OFIord

Ao clicar no botao chamo a função transação

procedure TfrmCadOS.btnInsAltClick(Sender: TObject);
begin
  transacao('CadOS','confirma',cdsCadOS);
  if btnInsAlt.Caption = 'Inserir' then
  Messagedlg('Ordem de serviço gerada com sucesso!', mtInformation, [mbOk], 0);
  btnCan.Enabled := true;
  edtCod.SetFocus;
end;

procedure Transacao(Tellog, acao: string; ds: TClientDataSet);
var
  ID : integer;
  trans : TTransactionDesc;
begin
  try
    log(Tellog, acao, ds);
    if acao = 'confirma' then
    begin
      camposrequeridos(ds);
      ds.Post;
    end;
    if acao = 'Excluir' then
    begin
      ds.Delete;
    end;
    dm.Conexao.CloseDataSets;
    //qr.SQLConnection := dm.Conexao2;
    ds.ApplyUpdates(-1);
    //qr.SQLConnection := dm.Conexao;
    ds.Open;
  except
    ds.Cancel;
    MessageDlg('Não foi possivel executar a operação!', mtError, [mbOk], 0);
    Abort;
  end;
end;

 

Nela contem a procedure camposrequiridos

procedure camposrequeridos(ds: TClientDataSet);
var
  i, cont: Integer;
  msg: string;
begin
  cont := 0;
  msg := 'Os campos abaixo não foram informados:' + #13;
  for i := 0 to ds.Fields.Count - 1 do
  begin
    if (ds.Fields[i].Required) and (ds.Fields[i].IsNull) then
    begin
      msg := msg + 'Campo: ' + ds.Fields[i].DisplayLabel + #13;
      cont := cont + 1;
    end;
  end;
  if cont > 0 then
  begin
    MessageDlg(msg, mtWarning, [mbOk], 0);
    abort;
  end;
end;

 

 

 

 

Link to comment
Compartilhe em outros sites

  • 2 weeks later...

Não sei se entendi o que pretende fazer mas no proprio fdq vc pode colocar o parametro fica mais ou menos assim 

 Query - >  SELECT b.CdEmpresa, b.CdOrdemServico, b.CdDefeito, b.DtInclusao, b.DsUsuInclusao, b.DsDefeito FROM OFIOrdDf b inner join OFIOrd a on a.CdOrdemServico = b.CdOrdemServico WHERE b.CdOrdemServico = :IdOrdemservico

depois de colocar esse script 

vá em params na propriedade (F11) do fdq e coloque no DataType o tipo que será o parametro.

 

na hora de abrir o fdq ou query voce faz:

SeuComponenteQuery.Params.ParamByName('IdOrdemservico').AsLargeInt := ID da ordem de servico;

SeuComponenteQuery.Open;

 

ao fazer isso só irá aparecer os que forem da ordem de serviço informada.

 

Acho que foi isso que gostaria de fazer.

 

 

 

 

 

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...