Fórum Status mensagem #485431

14/07/2014

0

Bom dia,

Preciso muito de uma ajuda para alterar o status das minhas mensagens.

Exemplo: se eu envio uma mensagem para 3 usuários.. eu tenho que salvar como recebido apenas aquele usuário que já abriu o sistema e viu ... ai coloquei para mostrar no dbgrid e no clique dele, coloquei para alterar para recebido... ele até altera, porém... só altera o primeiro registro

Eu fiz assim:

if (dm.cdsrelusumsg.fieldbyname('Status').asstring = 'Enviado') and (dm.cdsrelusumsg.FieldByName('codigousu').AsString = quotedstr(xpubusu)) then
begin
dm.cdsrelusumsg.Edit;
dm.cdsrelusumsg.fieldbyname('Status').asstring:='Recebido';
dm.cdsrelusumsg.Post;
dm.cdsrelusumsg.ApplyUpdates(0);
end;
DBMemo1.Visible:=True;


Tem algo de errado para não salvar e nem alterar nada?
P. Azeredo

P. Azeredo

Responder

Posts

14/07/2014

Valquiria Silva

Olá Priscila.

Assim como está apenas o registro selecionado na linha do DbGrid será alterado.
Para alterar todos, você teria que percorrer todos os registros modificando os status.
Responder

Gostei + 0

14/07/2014

P. Azeredo

E como eu poderia fazer isso?
Pode me dar uma ajuda?

Eu teria que colocar:

dm.cdsrelusumsg.first;
while not dm.cdsrelusumsg.eof do
begin

if (dm.cdsrelusumsg.fieldbyname('Status').asstring = 'Enviado') and (dm.cdsrelusumsg.FieldByName('codigousu').AsString = quotedstr(xpubusu)) then
begin
dm.cdsrelusumsg.Edit;
dm.cdsrelusumsg.fieldbyname('Status').asstring:='Recebido';
dm.cdsrelusumsg.Post;
dm.cdsrelusumsg.ApplyUpdates(0);
end;
DBMemo1.Visible:=True;
dm.cdsrelusumsg.next;
Responder

Gostei + 0

14/07/2014

Valquiria Silva

Isso. Mas dar um edit e um post num laço dentro do mesmo ClientDataSet deixa o cursor perdido, o ideal é clonar esse dataset e ai sim atualizar, ou ainda, marcar todas as linhas que você quer atualizar e mandar um comando Update.

Mas não entendi uma coisa, vc disse :
se eu envio uma mensagem para 3 usuários.. eu tenho que salvar como recebido apenas aquele usuário que já abriu o sistema e viu


Quem deve alterar este status? O usuário ao entrar no sistema pela grid?
Responder

Gostei + 0

14/07/2014

P. Azeredo

" o ideal é clonar esse dataset e ai sim atualizar, ou ainda, marcar todas as linhas que você quer atualizar e mandar um comando Update."

Eu não compreendi!
Eu tentei dar um Update, mas diz que está com erro de síntaxe.

Sim, quem altera o status, é o usuário. Quando ele dá dois cliques na mensagem, a mensagem abre embaixo e o status altera para RECEBIDO.
Responder

Gostei + 0

14/07/2014

Valquiria Silva

Entendi.

neste caso se aparecerem 3 mensagens, o usuário tem que clicar em uma de cada vez e atualizar o status? Você tem tela pra mostrar essas mensagens?
Se for isso:

no doubleclick da grid

if (dm.cdsrelusumsg.fieldbyname('Status').asstring = 'Enviado') and (dm.cdsrelusumsg.FieldByName('codigousu').AsString = quotedstr(xpubusu)) then
begin
dm.cdsrelusumsg.Edit;
dm.cdsrelusumsg.fieldbyname('Status').asstring:='Recebido';
dm.cdsrelusumsg.Post;
DBMemo1.Visible:=True;
end;

e ao sair dessa tela
dm.cdsrelusumsg.ApplyUpdates(0);
Responder

Gostei + 0

14/07/2014

P. Azeredo

Fiz o que você falou e continua sem salvar! Nem alterando mais no dbgrid está... Porque isso acontece? Se está tudo correto, até onde eu sei?
Responder

Gostei + 0

14/07/2014

Valquiria Silva

Oi Priscila, faça o Debug do código pra verificar se ele está passando pelo click, e se está entrando no trecho de código que altera o status.
Responder

Gostei + 0

14/07/2014

P. Azeredo

Não está passando
Responder

Gostei + 0

14/07/2014

P. Azeredo

Eu tirei a parte do usuário e ele passou e alterou, porém, não modificou na tabela ainda. Altera no dbgrid e não salva no banco de dados.
Responder

Gostei + 0

14/07/2014

Valquiria Silva

Ok.

Volte o comando

dm.cdsrelusumsg.ApplyUpdates(0);

para onde estava assim:

if (dm.cdsrelusumsg.fieldbyname('Status').asstring = 'Enviado') then
begin
dm.cdsrelusumsg.Edit;
dm.cdsrelusumsg.fieldbyname('Status').asstring:='Recebido';
dm.cdsrelusumsg.Post;
dm.cdsrelusumsg.ApplyUpdates(0);
DBMemo1.Visible:=True;
end;


veja se salva
Responder

Gostei + 0

14/07/2014

P. Azeredo

Ele altera no dbgrid, mas nada de alteração no banco de dados... Se eu fechar e voltar para aquela tela, ele volta como Enviado... Ain Deus!
Responder

Gostei + 0

14/07/2014

Valquiria Silva

Não da erro? Nem nada?

Qual o tipo deste campo no banco de dados?

Este field ele é um campo calculado?
Responder

Gostei + 0

14/07/2014

P. Azeredo

Esse campo é VCHAR e não deu nenhum erro... ele passa pela linha, troca no dbgrid. Porém, não salva nada

Deixa eu te falar uma coisa...

Não sei se estou fazendo certo, mas sabe como eu coloquei para ficar como Enviado?

Na hora de enviar a mensagem e salvar na tabela... eu coloquei p o status salvar como ENVIADO
Será que é por isso que está dando problema? Eu deveria salvar de outra forma?
Responder

Gostei + 0

14/07/2014

Valquiria Silva

E como "ENVIADO" ele salva?

Qual o tipo deste campo no Banco de dados? Varchar de que tamanho?
Responder

Gostei + 0

14/07/2014

P. Azeredo

Sim, está salvando como ENVIADO... Porém, como RECEBIDO não.
Varchar(200)
Responder

Gostei + 0

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

Aceitar