Como fazer a mesma rotina do storedproc no cds
o video mostra dois exemplos um com stored proc e outro com cds , gostaria de fazer o mesmo com cds
[#VIDEO-182#]
[#VIDEO-182#]
Carlos Faria
Curtidas 0
Respostas
Wesley Yamazack
03/03/2010
Olá meu amigo,
Estou analisando o chamado e logo retornarei
Um abraço
Wesley Y
Estou analisando o chamado e logo retornarei
Um abraço
Wesley Y
GOSTEI 0
Carlos Faria
03/03/2010
Ok amigo, o mais rapido possivel !
GOSTEI 0
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
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
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;
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
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
03/03/2010
Eu vou gravar um video e te demostar a real situação aqui ,
GOSTEI 0
Wesley Yamazack
03/03/2010
OK fico no aguardo
Um Abraço
Wesley Y
Um Abraço
Wesley Y
GOSTEI 0
Carlos Faria
03/03/2010
Hoje sem falta agente fecha esse chamado nao tive como responder !
GOSTEI 0
Wesley Yamazack
03/03/2010
OK amigo, fico no aguardo.
Forte abraço
Wesley Y
Forte abraço
Wesley Y
GOSTEI 0
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
03/03/2010
Olá amigo,
Estamos aqui pra ajudar sempre, cds é muito bom. rsrs. Chamado Fechado
Um abraço
Wesley Y
Estamos aqui pra ajudar sempre, cds é muito bom. rsrs. Chamado Fechado
Um abraço
Wesley Y
GOSTEI 0