GARANTIR DESCONTO

Fórum Problemas com Insert usando FireDAC #505673

29/12/2014

0

Olá galera antes de mais nada desejo a todos um 2015 repleto de felicidades.

Estou com a seguinte situação aqui, clico para abrir o formulário de clientes por exemplo. A tabela sempre vem fechada por padrão, se o cliente precisar consultar algo ele utiliza os campos de pesquisa para filtrar somente aqui que ele necessita.
Ao clicar no botão incluir, abro a tabela e dou o Insert, só que ao salvar a operação me retorna todos os registros que tem na tabela. E desta forma fica inviável, pois se avenho com ela fechada eu queria que ai incluir ela se mantivesse fechada e só me mostrasse o item que acabei de incluir ou itens que incluí vários na sequencia.
Não estou conseguindo fazer este processo, se alguém puder ajudar agradeço. Segue comando usados no botão incluir e salvar.

// Botão incluir
procedure TFrmCadModelo.ActIncluirExecute(Sender: TObject);
begin
  inherited;
  try
    PgcDados.ActivePage:= TabCadastro;
    FDQuery.Close;
    if not FDQuery.Active then
    begin
      { Controlando os campos }
      pnlFiltros.Enabled   := False;
      PnlCadastro.Enabled  := True;

      FDQuery.Open;
      FDQuery.Insert;
      FDQuery.FieldByName(PrefixoTabela + 'ATIVO').AsString          := 'S';
      FDQuery.FieldByName(PrefixoTabela + 'MARCA').AsString          := 'N';
      FDQuery.FieldByName(PrefixoTabela + 'INCLUIDOEM').AsDateTime   := Now;
      FDQuery.FieldByName(PrefixoTabela + 'RESPONSAVELINC').AsString := 'INCLUIDO';
      FDQuery.FieldByName(PrefixoTabela + 'ALTERADOEM').AsDateTime   := Now;
      FDQuery.FieldByName(PrefixoTabela + 'RESPONSAVELALT').AsString := 'INCLUIDO';
    end;
  except on E : Exception do
      raise Exception.Create('Erro ao Incluir o Registro: ' + E.Message);
  end;
end;


// Botão Salvar
procedure TFrmCadModelo.ActSalvarExecute(Sender: TObject);
begin
  inherited;
  if ConsisteCampos then
  begin
    try
      FDQuery.Post;
      FDQuery.ApplyUpdates(0);
      pgcDados.ActivePage := TabConsulta;

      { Controlando os campos }
      pnlFiltros.Enabled   := True;
      PnlCadastro.Enabled  := False;

      mensagem := 'O Registro foi Incluído ou ALterado com Sucesso!';
      Application.MessageBox(PChar(mensagem),'Informação', MB_OK + MB_ICONINFORMATION);
    except on E : Exception do
      raise Exception.Create('Erro ao Salvar o Registro: ' + E.Message);
    end;
  end;
end;
Jiraya San

Jiraya San

Responder

Posts

29/12/2014

Renato Rubinho

Buenas,

Coloca um filtro na query trazendo apenas registros que te interessem.

Ex:
PrefixoTabela + 'INCLUIDOEM' >= :W_INCLUIDOEM

onde: :W_INCLUIDOEM = '29/12/2014'

Abraççç,
rrubinho
Responder

Gostei + 0

29/12/2014

Jiraya San

Boa tarde rrubinho valeu pela dica, em um Sistema que utilizamos na empresa onde trabalho ao ir incluindo algo nas tabelas ele vai retornando os registro que acabaram de ser inclusos. Não consegui fazer desta forma, mas do jeito que você orientou está sempre me trazendo o último registro que foi incluído, pelo menos não está vindo com todos os registros da tabela. Coloquei este código no FDQuery do meu formulário de cadastro:
SELECT * FROM CLIENTES WHERE CLI_CODIGO = :ID


Aproveitando você saberia me dizer como resolver outra questão: Ao incluir algum registro, por padrão eu deixo o campo ativo = S e marca = N. Até aí tudo bem grava no banco corretamente, mas quando realizo uma consulta me é mostrado como na imagem abaixo:

[img]http://arquivo.devmedia.com.br/forum/imagem/390998-20141229-154120.jpg[/img]

Na tela de edição, ele vem com o CheckBox sempre desta forma e não como está no DBGrid mostrando se está ou não Checado. E se você perceber no DBGrid ele fica com um S ou N do lado da imagem que foi usada para simular um CheckBox no DBGrid.
Estas duas coisas não conseguiu achar uma solução. Se puder ajudar agradeço.
Responder

Gostei + 0

29/12/2014

Jiraya San

Boa tarde rrubinho valeu pela dica, em um Sistema que utilizamos na empresa onde trabalho ao ir incluindo algo nas tabelas ele vai retornando os registro que acabaram de ser inclusos. Não consegui fazer desta forma, mas do jeito que você orientou está sempre me trazendo o último registro que foi incluído, pelo menos não está vindo com todos os registros da tabela. Coloquei este código no FDQuery do meu formulário de cadastro:
SELECT * FROM CLIENTES WHERE CLI_CODIGO = :ID


Aproveitando você saberia me dizer como resolver outra questão: Ao incluir algum registro, por padrão eu deixo o campo ativo = S e marca = N. Até aí tudo bem grava no banco corretamente, mas quando realizo uma consulta me é mostrado como na imagem abaixo:

[img]http://arquivo.devmedia.com.br/forum/imagem/390998-20141229-154120.jpg[/img]

Na tela de edição, ele vem com o CheckBox sempre desta forma e não como está no DBGrid mostrando se está ou não Checado. E se você perceber no DBGrid ele fica com um S ou N do lado da imagem que foi usada para simular um CheckBox no DBGrid.
Estas duas coisas não conseguiu achar uma solução. Se puder ajudar agradeço.



Referente ao Problema do DBGrid e CheckBox vou dar uma olhada neste Posto que você respondeu e ver o que consigo com relação a isso:
[url]https://www.devmedia.com.br/forum/me-ajudem-com-checkbox-na-grid/505519[/url]
Responder

Gostei + 0

29/12/2014

Jiraya San

Estava usando um outro código para simular um CheckBox no DBGrid e tentei adaptar de acordo com seu exemplo no outro Post, mas não deu certo. Aí fiz uns ajustes uzando seu exemplo, mas mesmo assim ainda continuar aparecendo o S ou N ao lado do CheckBox. Meu código ficou assim:

with FDQuery do
  begin
    if Column.FieldName = PrefixoTabela + 'ATIVO' then
    begin
      dbgDados.Canvas.Font.Color := dbgDados.Canvas.Brush.Color;
      dbgDados.Canvas.FillRect(Rect);

      Check := 0;
      if FDQuery.FieldByName(PrefixoTabela + 'ATIVO').Value = 'S' then
        Check := DFCS_CHECKED
      else
      Check := 0;
      R:= Rect;
      InflateRect(R,-2,-2);
      DrawFrameControl(dbgDados.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
    end;
  end;


Não conseguiu deixar a fonte transparente.
Responder

Gostei + 0

29/12/2014

Renato Rubinho

O código era todo do Marlon, que abriu o post.
Apenas sugeri colocar a mesma cor da font e da célula para, por lógica, ficar transparente.
Vamos ver o que ele responde e se funcionou.
Para validar, force as duas cores com branco para ver se funciona.

      dbgDados.Canvas.Font.Color := clWindow;
      dbgDados.Canvas.Brush.Color := clWindow;
Responder

Gostei + 0

30/12/2014

Jiraya San

Era isso mesmo rrubinho valeu cara, salvou mais uma.
Você já passou por algo como na última imagem que mandei? Referente ao CheckBox?

[img]http://arquivo.devmedia.com.br/forum/imagem/390998-20141229-154120.jpg[/img]
Responder

Gostei + 0

30/12/2014

Renato Rubinho

Como assim "no cadastro"?
De onde é essa imagem com o os checkboxes azuis ?
Responder

Gostei + 0

06/01/2015

Jiraya San

Olá boa tarde rrubinho um Feliz Ano Novo para todos nós.
Então segue abaixo um exemplo de como está hoje:

1 - Quando consulto no DBGrid aparece desta forma;
2 - Se vou alterar ou visualizar na tela de cadastro aparece desta forma;
3 - E o correto deveria já vir Checado ou Não de acordo com o que está na tabela.

Não consegui resolver isso. Obs os campos Ativo e Marca no banco de dados estão como Char(1) e gravo eles como sendo: S ou N

[img]http://arquivo.devmedia.com.br/forum/imagem/390998-20150106-155709.jpg[/img]
Responder

Gostei + 0

06/01/2015

Renato Rubinho

Feliz Ano Novo!!

Não tenho Delphi com Firedac para testar, mas está com cara que você não setou o datasource, datafield ou o tipo de dado e valores para marcado/desmarcado (ValueChecked / ValueUnchecked - caso sejam iguais aos DataControls padrões) nos checkboxes "Ativo" e "Marca" da Tab-Cadastro.

Abraççç,
rrubinho
Responder

Gostei + 0

09/01/2015

Jiraya San

Estranho, pois o DataSource e DataField está setados para os campos correspondentes no Banco de Dados.
Responder

Gostei + 0

13/10/2015

Jiraya San

Boa tarde a todos, estou passando para finalizar o tópico pois deixei ele aberto.
Só para constar, o problema que citei acima sobre não ficar marcado os chekbox era problema de BIOS.

Eu estava esquecendo de setar as propriedades:
ValueChecked e ValueUnChecked de acordo com minha tabela.
Responder

Gostei + 0

13/10/2015

Jiraya San

Boa tarde a todos, estou passando para finalizar o tópico pois deixei ele aberto.
Só para constar, o problema que citei acima sobre não ficar marcado os chekbox era problema de BIOS.

Eu estava esquecendo de setar as propriedades:
ValueChecked e ValueUnChecked de acordo com minha tabela.



RESOLVIDO
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar