Após o comando ClientDataSet.ApplyUpdates(0);

Delphi

20/02/2012

Após o comando ClientDataSet.ApplyUpdates(0), devo fechar e abrir o SQLDataSet e o ClientDataSet para ter na tela os dados atualizados?
Fábio Banhos

Fábio Banhos

Curtidas 0

Respostas

Marco Salles

Marco Salles

20/02/2012

Voce pode dar um refresh no próprio cds que ele ira atualizar sem alterar o seu cursor de dados

em hipotene-se nhuma voce pode abrir e fecha o seu SQLDataSet , porque ele não faz parte da aplicação
cliente ..

GOSTEI 0
Fábio Banhos

Fábio Banhos

20/02/2012

certo...

mas tem lugares que utilizo o SQLDataSet como costumo usar uma ADOQuery.

Veja um caso como exemplo:

procedure TfrmLogin.LocalizaUsuario(Codigo: Integer);
begin
  sdsUsuario.Close;
  sdsUsuario.ParamByName(ID_USUARIO).Value := Codigo;
  sdsUsuario.Open;

  if (sdsUsuario.IsEmpty) then
  begin
    MessageDlg(Usuário inválido!, mtInformation, [mbOK], 0);
    lblNomeUsuario.Caption := ;
    edtUsuario.SetFocus;
  end
  else
  begin
    lblNomeUsuario.Caption := sdsUsuario.FieldByName(NM_USUARIO).AsString;
    edtUsuario.Text        := sdsUsuario.FieldByName(ID_USUARIO).AsString;
  end;

  sdsUsuario.Close;
end;


Estou errado em fazer assim ?
GOSTEI 0
Marco Salles

Marco Salles

20/02/2012

Primeiro voce fez uma pergunta o que voce pode ou deve fazer para atualizar os dados
eu disse para dar Refresh () e disse mais que não se usa o abrir e fechar o SqldataSet
Porque ??

Na tecnologia DBX DataSnap , voce não tem acesso físico ao SqldataSet
a não ser que voce esteja no servidor de aplicação , o que dificilmente será o caso

então o SqlDataset tem a instrução Sql

tipo assim (SqlUSUARIO no IDE Mesmo) la no Servidor (no caso em Um DataModulo separado )

select NM_USUARIO , ID_USUARIO From USUARIO where ID_USUARIO:pID_USUARIO

irá gerar um parâmetro (No ID mesmo)

No Objecto inspector voce configura este parametro o tipo se é de entrada etc...

Então , isto é o que voce Faz no servidor , no cliente NÂO tem sdsUsuario

então voce utiliza o CDS , e seria mais ou menos :

with ClientDataSet2 do
begin
Close;
FetchParams;
Params[0].assinteger:=Codigo ; // **************
Open;
if IsEmpty then
begin
MessageDlg(Usuário inválido!, mtInformation, [mbOK], 0);
lblNomeUsuario.Caption := ;
edtUsuario.SetFocus;
end
else
begin
lblNomeUsuario.Caption := FieldByName(NM_USUARIO).AsString;
edtUsuario.Text := FieldByName(ID_USUARIO).AsString;
end;

Amigo , este é o modo correto (Modo RAD , diga-se de paasagem), mesmo que voce não utilize o dataSnap ...

Voce tem que entender que o SqlDAtaSet , o SqlConecction esta em Outra Camada , no caso Outro datamodulo
e na Aplicação cliente tem os seu Cds





GOSTEI 0
Fábio Banhos

Fábio Banhos

20/02/2012

Boa explicação!

Valeu amigo.
GOSTEI 0
Fábio Banhos

Fábio Banhos

20/02/2012

Cara desculpa a minha ignorância, mas ainda não entendi muito bem o funcionamento dos componentes DBExpress.

O ClientDataSet reconhece os parametros do SQLDataSet ?

É porque no ClientDataSet não tem SELECT, ele pega os dados que o SQLDataSet buscou.
GOSTEI 0
Marco Salles

Marco Salles

20/02/2012

Cara desculpa a minha ignorância, mas ainda não entendi muito bem o funcionamento dos componentes DBExpress.

O ClientDataSet reconhece os parametros do SQLDataSet ?

É porque no ClientDataSet não tem SELECT, ele pega os dados que o SQLDataSet buscou.



Atraves do TdataSetProvider (num processo chamdo Resolving), seria mais ou menos isto
GOSTEI 0
POSTAR