Como fazer a mesma rotina do storedproc no cds

03/03/2010

o video mostra dois exemplos um com stored proc e outro com cds , gostaria de fazer o mesmo com cds

[#VIDEO-182#]
Carlos Faria

Carlos Faria

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

03/03/2010

Olá meu amigo,
  Estou analisando o chamado e logo retornarei

Um abraço

Wesley Y
GOSTEI 0
Carlos Faria

Carlos Faria

03/03/2010

Ok amigo, o mais rapido possivel ! 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

03/03/2010

Olá meu amigo,
  Seguinte, pelo que entendi, você esta fazendo o processo errado. no seu loop você tem que fazer da seguinte forma

Var
  xNome : String;

begin

Xnome := DBEdit1.text;

For I:=0 to max do
begin
  CDSx.Append;
  CDSx.FieldByname('NomeMotoqueiro').asstring := xNome   ;
  CDSx.Post;
end;

TClientDataSet(DS.DataSet).ApplyUpdates(0);


O que acontece, você tem que preparar a tabela para inclusão com Append, e gravar a inclusão.
O ApplyUpdates, ele é executado uma única vez, pois você primeiro passa todos os dados para memoria e depois sim gravar todos eles de uma só vez, pensa neste comando como Commit, você pode deltar um registro, incluir 10, alterrar 5, isso tudo em memória, quando você quiser gravar no banco de dados basta usar uma única vez o APPLYUPDATES.

Sacou meu amigo ?

Um abraço

Wesley Y 
GOSTEI 0
Carlos Faria

Carlos Faria

03/03/2010

Funcionou igualzinho a proc porem eu pensei que ia saber como fazer e nao soube   Eu tenho 2 cds    cdscliente cdscorridas   quando eu consulto no cdscorridas eu ja jogo todos os dados no cdscorridas , assim se tudo estiver do mesmo jeito e nao precisar fazer alterações o usuario ja finaliza sem digitar nada , apenas escolhe a quantidade e manda bala   A questao agora é como eu vou dar insert em um clientdataset ?   como mostro abaixo     var
  xCorrida: TClientDataSet;
  Max, I: integer;
begin
  xCorrida := dsCorridas.DataSet.Fields.Create ;
  Max := STRTOINT(rgQTMotoqueiros.items[rgQTMotoqueiros.ItemIndex]);
  for I := 0 to Max do
  begin     dsCorridas.DataSet.Append;
    dsCorridas.DataSet.FieldByName('nome').AsString := xNome;
    dsCorridas.DataSet.Post;
  end;
  TClientDataSet(dsCorridas.DataSet).ApplyUpdates(0);
  dsCorridas.DataSet.Close;
  dsCorridas.DataSet.Open;
 
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

03/03/2010

 
Olá amigo,
    Me diga uma coisa, porque criar um ClientDataSet na mão ? E não ter ele no form, já apontando para um DataSetProvider, e por sua vez apontando para um SQLQuery/SQLDataSet ? Assim você não precisa ficar criando ele.
   E para inserir os dados no ClientDataSet, você tem que fazer como no exemplo


    dsCorridas.DataSet.Append;
    dsCorridas.DataSet.FieldByName('nome').AsString := xNome;
    dsCorridas.DataSet.Post;
    TClientDataSet(dsCorridas.DataSet).ApplyUpdates(0);

  
E os dados são gravador. Agora se você quer fazer um loop em um outro clientdataset, e preencher este CDS com os dados do segundo, ai é outra história, você tem que passar para os Fields do primeiro cds, os dados do segundo, mas sempre usando o append e depois o post,exemplo


Você tem que fazer um loop no cds que deseja varrer, e pegar os dados para preencher no outro.

while not cdsConsulta.eof do
bebin
    dsCorridas.DataSet.Append;
    dsCorridas.DataSet.FieldByName('nome').AsString := cdsConsulta.FieldByName('nome').AsString;
    dsCorridas.DataSet.FieldByName('codigo').AsString := cdsConsulta.FieldByName('idcorrida').AsString;
    dsCorridas.DataSet.FieldByName('data').AsString := cdsConsulta.FieldByName('datacorrida').AsString;
    dsCorridas.DataSet.Post;
    TClientDataSet(dsCorridas.DataSet).ApplyUpdates(0);
   cdsConsulta.Next; //Tem que ter o next, senao você vai ficar em Loop infinito
end;

Seria isso que você quer ??

Um abraço

Wesley Y
GOSTEI 0
Carlos Faria

Carlos Faria

03/03/2010

Eu vou gravar um video e te demostar a real situação aqui ,
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

03/03/2010

OK fico no aguardo

Um Abraço

Wesley Y
GOSTEI 0
Carlos Faria

Carlos Faria

03/03/2010

Hoje sem falta agente fecha esse chamado nao tive como responder !
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

03/03/2010

OK amigo, fico no aguardo.


Forte abraço

Wesley Y
GOSTEI 0
Carlos Faria

Carlos Faria

03/03/2010

Ola Wesley , pode fechar o chamado ai que ficou bastante clara a explicação entendi e coloquei para funcionar tudo no clientdataset ? acho que ja saquei a coisa que mata em quem era acostumado a usar proc e migou para o cds os erros do clientdataset sao silenciosos isso era que tava me fazendo acreditar que o componente nao era tao bom assim como voces dizem ai! vou aprender a ver esses erros silenciosos !
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

03/03/2010

Olá amigo,

  Estamos aqui pra ajudar sempre, cds é muito bom. rsrs. Chamado Fechado

Um abraço

Wesley Y
GOSTEI 0
POSTAR