Gravar com banco firebird / clientedataset
Estou usando o banco Firebird 1.5 com Ibexpert.
No botão gravar
DM.ClientDataSet.Post;
DM.ClientDataSet.ApplyUpdates(0);
DM.ClientDataSet.Refresh;
Auto incremento no banco.
O que ocorre quando gravo o registro, ele vai para o primeiro por causa do refresh.
Alguem teria alguma solução?
No botão gravar
DM.ClientDataSet.Post;
DM.ClientDataSet.ApplyUpdates(0);
DM.ClientDataSet.Refresh;
Auto incremento no banco.
O que ocorre quando gravo o registro, ele vai para o primeiro por causa do refresh.
Alguem teria alguma solução?
Soupinto
Curtidas 0
Respostas
Emarcolongo
15/02/2008
Qual a duvida ?
Vc quer que ele fique no ultimo depois do insert ?
depois do refresh coloque: DM.ClientDataSet.Last;
Ou tire o refresh para continuar no mesmo...
Qualquer coisa manda ai.,
Vc quer que ele fique no ultimo depois do insert ?
depois do refresh coloque: DM.ClientDataSet.Last;
Ou tire o refresh para continuar no mesmo...
Qualquer coisa manda ai.,
GOSTEI 0
Soupinto
15/02/2008
Qual a duvida ?
Vc quer que ele fique no ultimo depois do insert ?
depois do refresh coloque: DM.ClientDataSet.Last;
Ou tire o refresh para continuar no mesmo...
Qualquer coisa manda ai.,
certo isso eu fiz coloquei o last, mas no editar qnd eu edito por exemplo o segundo registro e aperto gravar ... se tiver o DM.ClientDataSet.Last; vai para ultimo e senão vai para o primeiro.
GOSTEI 0
Dor_poa
15/02/2008
Isso acontece porque você da o ApplyUpdates.
ApplyUpdates é igual ao COMMIT
Nesse caso ele sempre retornará para o 1º registro...!!
uma saída boba, seria vc armazenar antes do POST em uma variavel a chave do registro atual e depois dar um locate!
vlrChave := DM.ClientDataSet.Fieldbyname(´CAMPO´).asstring;
DM.ClientDataSet.Post;
DM.ClientDataSet.ApplyUpdates(0);
DM.ClientDataSet.locate(´CAMPO´, vlrChave, []);
Essa seria uma saida para vc!
ApplyUpdates é igual ao COMMIT
Nesse caso ele sempre retornará para o 1º registro...!!
uma saída boba, seria vc armazenar antes do POST em uma variavel a chave do registro atual e depois dar um locate!
vlrChave := DM.ClientDataSet.Fieldbyname(´CAMPO´).asstring;
DM.ClientDataSet.Post;
DM.ClientDataSet.ApplyUpdates(0);
DM.ClientDataSet.locate(´CAMPO´, vlrChave, []);
Essa seria uma saida para vc!
GOSTEI 0
Host
15/02/2008
Amigo usa o TStrBookMark ou BookmarkStr naum lembro o nome ... sou daquelas q nao tem memoria ... so referencia hehehehhe
GOSTEI 0
Ffabiop
15/02/2008
sim Host, acho que falas do TBookMark:
var
Registro: TBookMark;
begin
DM.ClientDataSet.Post;
DM.ClientDataSet.ApplyUpdates(0);
Registro := DM.ClientDataSet.GetBookMark;
DM.ClientDataSet.Refresh;
DM.ClientDataSet.GotoBookmark(Registro);
end;
var
Registro: TBookMark;
begin
DM.ClientDataSet.Post;
DM.ClientDataSet.ApplyUpdates(0);
Registro := DM.ClientDataSet.GetBookMark;
DM.ClientDataSet.Refresh;
DM.ClientDataSet.GotoBookmark(Registro);
end;
GOSTEI 0
Crpavao
15/02/2008
Colega,
Apenas tire o .Refresh. Só isso. Após o applyupdates(0) o cursor fica no mesmo registro.
Apenas tire o .Refresh. Só isso. Após o applyupdates(0) o cursor fica no mesmo registro.
GOSTEI 0