Problemas com Insert usando FireDAC

Delphi

Firebird

29/12/2014

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

Curtidas 0

Respostas

Renato Rubinho

Renato Rubinho

29/12/2014

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
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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.
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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]
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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.
GOSTEI 0
Renato Rubinho

Renato Rubinho

29/12/2014

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;
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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]
GOSTEI 0
Renato Rubinho

Renato Rubinho

29/12/2014

Como assim "no cadastro"?
De onde é essa imagem com o os checkboxes azuis ?
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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]
GOSTEI 0
Renato Rubinho

Renato Rubinho

29/12/2014

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
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

Estranho, pois o DataSource e DataField está setados para os campos correspondentes no Banco de Dados.
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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.
GOSTEI 0
Jiraya San

Jiraya San

29/12/2014

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
GOSTEI 0
POSTAR