ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Append não funciona no clientdataset
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Seg Nov 11, 2019 3:21 pm    Assunto: Append não funciona no clientdataset Responder com Citação

Boa tarde, galera, tenho que usar o append para adicionar registros em um cds, porém ele não está funcionando, não da nenhum erro, só não funciona mesmo, alguém pode ajuda?, segue o código abaixo
Código:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, Grids, DBGrids, DBClient;

type
  TForm1 = class(TForm)
    dscds: TClientDataSet;
    ds2: TDataSource;
    dbgrd1: TDBGrid;
    dscdsCK_EMAIL: TStringField;
    dscdsTX_EMAIL: TStringField;
    procedure dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dbgrd1CellClick(Column: TColumn);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Check: Integer;
R: TRect;
begin
if Column.FieldName = 'CK_EMAIL' then begin
DBGrd1.Canvas.FillRect(Rect);
Check := 0;
if dscdsCK_EMAIL.AsString = 'X' then
Check := DFCS_CHECKED
else Check := 0;
R:=Rect;
InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}
DrawFrameControl(DBGrd1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);
end;
end;

procedure TForm1.dbgrd1CellClick(Column: TColumn);
begin
dscds.Edit;
if dscdsCK_EMAIL.AsString = 'X' then
dscdsCK_EMAIL.AsString := ''
else dscdsCK_EMAIL.AsString := 'X';
dscds.Post;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
end;

end.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Nov 11, 2019 3:41 pm    Assunto: Responder com Citação

Creio que faltou você dar um ApplyUpdates(0) após o post para enviar as alterações para o banco de dados:

Código:
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;

dscds.ApplyUpdates(0); // Para enviar para o Banco de Dados

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Seg Nov 11, 2019 4:16 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Creio que faltou você dar um ApplyUpdates(0) após o post para enviar as alterações para o banco de dados:

Código:
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;
dscds.Append;
dscds.FieldByName('TX_EMAIL').AsString := 'teste';
dscds.post;

dscds.ApplyUpdates(0); // Para enviar para o Banco de Dados


Usando o applyupdates da Missing data provider or data packet, oque pode ser?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Nov 11, 2019 4:33 pm    Assunto: Responder com Citação

Citação:
Missing data provider or data packet

Citação:
Fornecedor ou pacote de dados em falta

Este erro é bem genérico, mas, normalmente, ocorre quando existe ligações incorretas dos seus componentes de acesso ao banco de dados.

Qual o banco de dados e os componentes de acesso ao banco que você usa, fora o ClientDataSet?

Veja estes links:

http://www.activedelphi.com.br/forum/viewtopic.php?t=70521&sid=0a3c04c8bb6b9b28eed583578e7fc671
http://tojatumo.blogspot.com/2014/11/missing-data-provider-or-data-packet.html
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Seg Nov 11, 2019 4:37 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Citação:
Missing data provider or data packet

Citação:
Fornecedor ou pacote de dados em falta

Este erro é bem genérico, mas, normalmente, ocorre quando existe ligações incorretas dos seus componentes de acesso ao banco de dados.

Qual o banco de dados e os componentes de acesso ao banco que você usa, fora o ClientDataSet?

Veja estes links:

http://www.activedelphi.com.br/forum/viewtopic.php?t=70521&sid=0a3c04c8bb6b9b28eed583578e7fc671
http://tojatumo.blogspot.com/2014/11/missing-data-provider-or-data-packet.html


Então, eu só tenho um data source ligado ao cds e um dbgrid ligado ao data source, não sei oque pode estar errado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Nov 11, 2019 4:52 pm    Assunto: Responder com Citação

Leia com atenção este artigo e veja se seguiu estes passos para criação do banco com ClientDataset:

https://www.devmedia.com.br/clientdataset-gerando-tabela-temporaria-em-memoria/3193
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Seg Nov 11, 2019 5:17 pm    Assunto: Responder com Citação

natanbh1 escreveu:
Leia com atenção este artigo e veja se seguiu estes passos para criação do banco com ClientDataset:

https://www.devmedia.com.br/clientdataset-gerando-tabela-temporaria-em-memoria/3193


Sim, vi esse artigo um tempo atrás para desenvolver um outro projeto envolvendo clientdataset, realmente não entendo oque pode estar acontecendo
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Nov 11, 2019 5:46 pm    Assunto: Responder com Citação

Antes de dar o Append para criar o registro, verifique se o DataSet está criado (CreateDataSet) e aberto (Open):

Teste o código abaixo:

Código:
  dscds.CreateDataSet; // Cria o Dataset
  dscds.Open; // Abre o Dataset

  dscds.Append;
  dscds.FieldByName('TX_EMAIL').AsString := 'teste';
  dscds.post;

  dscds.ApplyUpdates(0); // Para enviar para o Banco de Dados

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Seg Nov 11, 2019 5:56 pm    Assunto: Responder com Citação

Ele já esta aberto, e só com o open ele continua dando o mesmo erro no applyupdates, tá complicado mesmo, de qualquer forma, obrigado por estar ajudando Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Nov 11, 2019 6:01 pm    Assunto: Responder com Citação

Lembrou de usar o CreateDataSet antes?

Código:
dscds.CreateDataSet; // Cria o Dataset


E remova o ApplyUpdates e veja se funciona:

Código:
  dscds.CreateDataSet;
  dscds.Open;

  dscds.Append;
  dscds.FieldByName('TX_EMAIL').AsString := 'teste';
  dscds.post;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Ter Nov 12, 2019 10:04 am    Assunto: Responder com Citação

No caso o createdataset não funciona porque diz que já ta aberto, e o open não tem efeito nenhum, mesmo sem o applyupdates, sinceramente, ja to pensando em refazer o código de outro jeito pq ta complicado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Nov 12, 2019 11:31 am    Assunto: Responder com Citação

Bom dia,

Onde você quer gravar esses registros? Em um banco de dados?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Ter Nov 12, 2019 3:30 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Onde você quer gravar esses registros? Em um banco de dados?


É em um dataset temporário, mas já consegui, agradeço a ajuda do nathan, a título de curiosidade abri um novo projeto e usei o mesmo código, deu certo.
Agora não sei se devo abrir outro tópico então vou colocar aqui mesmo, como posso fazer para que quando eu marque uma checkbox desse dbgrid as outras desmarquem?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Nov 12, 2019 4:37 pm    Assunto: Responder com Citação

Existe algum campo no ClientDataSet que tenha um valor único para poder identificar cada registro?
Acredito que vai ser necessário utilizar código para guardar o valor para identificar o registro selecionado em uma variável, para depois varrer todos os registros e desmarca-los, com exceção do registro selecionado.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Fafnyr
Novato
Novato


Registrado: Terça-Feira, 7 de Mai de 2019
Mensagens: 39

MensagemEnviada: Ter Nov 12, 2019 4:51 pm    Assunto: Responder com Citação

imex escreveu:
Existe algum campo no ClientDataSet que tenha um valor único para poder identificar cada registro?
Acredito que vai ser necessário utilizar código para guardar o valor para identificar o registro selecionado em uma variável, para depois varrer todos os registros e desmarca-los, com exceção do registro selecionado.

Espero que ajude


Existe sim, no caso é um campo de email e o outro das checkbox, o campo das checkbox é string de 3 caracteres, e vai ser sim ou não como se fosse um boolean porém precisa ser string mesmo, estou vendo como vou fazer, todas ajudas são apreciadas, obrigado a todos Smile
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB