Fórum DBGrid: Gravação no Banco de Dados #395687

14/02/2011

0

Amigos,

Como faço para gravar as informações alimentadas em dbGrid por um clientdataset diferente.

Exemplo:
Pelo dbnavigator, ao gravar ele vai inserir as informações de alguns campos no cds01.
Ó dbGrid é alimentado com a query do cds02, porém, quero gravar o que foi exibido no dbGrid no cds01.

It's possible?

Obrigado!
Elton Ésqui

Elton Ésqui

Responder

Posts

14/02/2011

Diego Cavalca

Amigos,

Como faço para gravar as informações alimentadas em dbGrid por um clientdataset diferente.

Exemplo:
Pelo dbnavigator, ao gravar ele vai inserir as informações de alguns campos no cds01.
Ó dbGrid é alimentado com a query do cds02, porém, quero gravar o que foi exibido no dbGrid no cds01.

It's possible?

Obrigado!


No caso se quiser 'jogar' informações no cds01, com base nos dados do cds02, faz o seguinte...
//cds02 já carregado
cds02.First;
cds01.Close;
cds01.CreateDataSet;

//Percorre os valores alimentados do cds02
while not cds02.eof do
begin
  //Aqui pode colocar algum filtro...
  cds01.insert;

  cds01CAMPO_1.value := cds02CAMPO_1.value;
  cds01CAMPO_2.value := cds02CAMPO_2.value;

  cds01.append;
  cds02.next;
end;


[]'s
Responder

Gostei + 0

14/02/2011

Alison Bissoli

Mande gravar manualmente no seu cds02, algo como abaixo, nao estou seguro do codigo pois esetou sem a IDE mas dá para ter uma idéia espero.
cds01.first;while not cds01.eof dobegin     cds02.append;     for i := 0 to cds02.fields.count     begin          cds02.fields(i).value := cds01.fields(i).value;     end     cds02.applyupdates(0);end;




--------------------------------------------http://garotodesktop.blogspot.com
Responder

Gostei + 0

14/02/2011

Alison Bissoli

correção...
cds01.first;while not cds01.eof dobegin     cds02.append;     for i := 0 to cds02.fields.count - 1;     begin          cds02.fields(i).value := cds01.fields(i).value;     end     cds02.applyupdates(0);     cds01.next;end;

Responder

Gostei + 0

14/02/2011

Elton Ésqui

Desculpe minha inexperiência, mas em qual evento coloco isso?
Responder

Gostei + 0

14/02/2011

Diego Cavalca

Desculpe minha inexperiência, mas em qual evento coloco isso?


No caso, quer fazer por dbnavigator né?!

Se o dbnavigator estiver linkado no cds01, coloque no evento 'AfterPost' do cds01...

Se quiser colocar no 'click' do dbNavigator, vai ter que programar na mão...

 if DBNavigator1.DataSource.DataSet.State in [dsInsert,dsEdit] then
   //Chama o código para gravar;


[]'s
Responder

Gostei + 0

14/02/2011

Marco Salles

Ó dbGrid é alimentado com a query do cds02, porém, quero gravar o que foi exibido no dbGrid no cds01
  Mas para que vc quer isto????   O CloneCds não resolve ????
Responder

Gostei + 0

15/02/2011

Elton Ésqui

E o que seria o CloneCds?

Joguei no Google e veio: cds da novela o cloneBLAHHHHH

E então descobri que o correto seria: CloneClientDataSet...rsrs
Responder

Gostei + 0

15/02/2011

Marco Salles

E o que seria o CloneCds?

Joguei no Google e veio: cds da novela o cloneBLAHHHHH

E então descobri que o correto seria: CloneClientDataSet...rsrs
  cloneCds para os intimos ... Para os demais é  CloneClientDataSet
Responder

Gostei + 0

15/02/2011

Elton Ésqui

Não consegui pensar direito :(

Como faço agora para clonar de um DBGRID para o outro?

O código abaixo clona dentro do próprio DBGRID.

procedure TForm1.btnClonarRegistroClick(Sender: TObject);
var
 varCdsClne : TClientDataSet;
 varI       : Integer;
begin
  varCdsClne := TClientDataSet.Create(Self);
  try
    varCdsClne.CloneCursor(TClientDataSet(cds1), True);
    cds1.Append;
    for varI := 0 to cds1.FieldCount - 1 do
      begin
        if (cds1.Fields[varI].FieldKind = fkData) then
        cds1.Fields[varI].Value := varCdsClne.FieldByName(cds1.Fields[varI].FieldName).Value;  
      end;
  finally
    varCdsClne.Close;
    varCdsClne.Free;
  end;
end;


PS: Ainda não toda essa intimidade...rsrs
Responder

Gostei + 0

15/02/2011

Marco Salles

Amigos,

Como faço para gravar as informações alimentadas em dbGrid por um clientdataset diferente.

Exemplo:
Pelo dbnavigator, ao gravar ele vai inserir as informações de alguns campos no cds01.
Ó dbGrid é alimentado com a query do cds02, porém, quero gravar o que foi exibido no dbGrid no cds01.

It's possible?

Obrigado!
Elton deixa eu entender ..   Veja se é isto que vc quer ??   Vc tem um dbgrid alimentado por um ClientDataSet ()   Vc tem (1000) N_esimos registros neste ClientDatSet , mas o DbGrid visualiza uma quantidade de cada vez (correto)   Ai neste momento , vc insere mais um Registro , Mais outro , mais Outro .. Totalizado 1000+3 = 1003 Regustro   O que vc quer é esses Gravar esse Tres Registros  ????      
Responder

Gostei + 0

15/02/2011

Elton Ésqui

Oi Marco.

Não é bem isso.

Eu tô fazendo uma coisa, que talvez tenha um caminho mais simples.

A parada é assim:

Tenho lá doi DBEdits, por exemplo

[edtNumero] [edtData] <--- Cds01

Então abaixo o DBGRID
[dataini] até [datafin] [OK] <--- Filtro

No DBGrid tenho o Cds02, porque tenho duas tabelas. Uma vou gravar as informações dos dois DBEdits incluindo algumas informações da outra tabela que é carregado do Cds02.

Se eu fizer assim:
Colocar no DBGrid o Cds01 e incluir dados na mão, grava de boa, mas o que eu preciso é gravar o resultado do DBgrid na tabela do Cds01.

Ai meu Deus, será que fui claro?...rsrs
Responder

Gostei + 0

15/02/2011

Marco Salles

Mas esses clientDataSet tem estruturas diferentes .. Ou vc quer valores soemente de alguns Campo ??? Porque no inicio do seu post ja foi reportado estrutura de bloco com While Não gosto muito , mas a principio resolve .
Responder

Gostei + 0

15/02/2011

Elton Ésqui

Somente de alguns campos (chave).

Eu tentei implementar as dicas anteriores, mas não rolou.
Responder

Gostei + 0

15/02/2011

Diego Cavalca

Somente de alguns campos (chave).

Eu tentei implementar as dicas anteriores, mas não rolou.


Qual erro foi reportado no bloco de código 'WHILE'?
Responder

Gostei + 0

15/02/2011

Elton Ésqui

D. Cavalca

É como se não estivesse lendo.

Field 'NOTA' have a must value.
Esse erro da com ou sem o While, pois de fato não existe um campo com esses valores, os valores estão no DBGrid, que são carregado de outra tabela.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar