Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Seg Nov 11, 2019 3:21 pm Assunto: Append não funciona no clientdataset |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Seg Nov 11, 2019 3:41 pm Assunto: |
|
|
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 |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Seg Nov 11, 2019 4:16 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
|
Voltar ao Topo |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Seg Nov 11, 2019 4:37 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
|
Voltar ao Topo |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Seg Nov 11, 2019 5:17 pm Assunto: |
|
|
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 |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Seg Nov 11, 2019 5:46 pm Assunto: |
|
|
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 |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Seg Nov 11, 2019 5:56 pm Assunto: |
|
|
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 |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Seg Nov 11, 2019 6:01 pm Assunto: |
|
|
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 |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Ter Nov 12, 2019 10:04 am Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Nov 12, 2019 11:31 am Assunto: |
|
|
Bom dia,
Onde você quer gravar esses registros? Em um banco de dados? |
|
Voltar ao Topo |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Ter Nov 12, 2019 3:30 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Nov 12, 2019 4:37 pm Assunto: |
|
|
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 |
|
|
Fafnyr Novato
Registrado: Terça-Feira, 7 de Mai de 2019 Mensagens: 39
|
Enviada: Ter Nov 12, 2019 4:51 pm Assunto: |
|
|
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 |
|
Voltar ao Topo |
|
|
|