Problemas com Insert usando FireDAC
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.
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
Curtidas 0
Respostas
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
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
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:
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.
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
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:
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.
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
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:
Não conseguiu deixar a fonte transparente.
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
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.
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
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]
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
29/12/2014
Como assim "no cadastro"?
De onde é essa imagem com o os checkboxes azuis ?
De onde é essa imagem com o os checkboxes azuis ?
GOSTEI 0
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]
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
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
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
29/12/2014
Estranho, pois o DataSource e DataField está setados para os campos correspondentes no Banco de Dados.
GOSTEI 0
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.
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
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.
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