Após o comando ClientDataSet.ApplyUpdates(0);
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
Curtidas 0
Respostas
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 ..
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
20/02/2012
certo...
mas tem lugares que utilizo o SQLDataSet como costumo usar uma ADOQuery.
Veja um caso como exemplo:
Estou errado em fazer assim ?
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
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
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
20/02/2012
Boa explicação!
Valeu amigo.
Valeu amigo.
GOSTEI 0
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.
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
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.
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