Como copiar um registro de uma Tabela para outra ?

22/06/2008

4

Ola Amigos do DevMedia
Boa Tarde

Preciso que todos os campos de um registro, sejam inseridos para uma linha em branco da mesma tabela, ou para outra tabela, com o APPEND OU INSERT.

Estou fazendo assim:
Guardo todos os campos do Registro em Variaveis, e depois que dou o Append, e Post ja tenho lá o Registro Gravado.

Mao nao esta certo: E se eu Tiver um registro com 80 Campos??? vou ter que criar 80 variaveis....

Por Favor, me deem a dica, deve haver um jeito mais fácil...
O exemplo no meu caso, é gravar a venda em varias parcelas..

BD access, e AdoDataSet

Atenciosamente.
Jotas


Responder

Posts

crie um dataset virtual para guardar o registro a ser ´clonado´.
algo assim:
var
  cdsClone: TClientDataset;
  i: integer;
begin
  cdsClone := TClientDataset.Create(nil);
  cdsClone.FieldDefs.Assign( ADODataset.FieldDefs );
  // cria um dataset vazio com os mesmos campos
  // do dataset original (ADODataset)
  cdsClone.CreateDataset;

  // crio o registro ´clone´ com os mesmos valores do registro origem
  cdsClone.Append;
  for i := 0 to ADODataset.FieldCount -1 do
    if not ADODataset.Fields[i].IsNull then
      cdsClone.FieldByName(ADODataset.Fields[i].FieldName).Value := ADODataset.Fields[i].Value;
  cdsClone.Post;

  // agora reproduzo o clone no próprio ADODataset
  ADODataset.Append;
  for i := 0 to cdsClone.FieldCount -1 do
    if not cdsClone.Fields[i].IsNull then
      ADODataset.FieldByName(cdsClone.Fields[i].FieldName).Value := cdsClone.Fields[i].Value;
  ADODataset.Post;

  cdsClone.Free;
end;

não trabalho com ADO, então algumas propriedades utilizadas podem ser diferentes.
corrija conforme o necessário. esse código é só para dar uma linha de raciocínio. espero que ajude.


Responder

24/06/2008

Jotas

Ola Emerson
Boa Tarde.

O Codigo, que vc mandou, funciona perfeitamente, sem ter que modificar nada....
Mas tive que criar no BD, uma tabela Clone, pois nao sei criar o DataSetVirtual

Por Exemplo: VAR CdsClone: TclientDataSet ... como uso o TAdoDataSet eu deveria colocar assim: VAR CdsClone: TAdoDataSet ....

Mas nao aparece pra mim na lista, esse objeto.
Onde, e, em que Local do Programa, devo criar o DataSetVirtual???

Desculpe pela minha ignorância, mas é porque sou Novato

Desde Já te agradeço,
jotas.


Responder
o clone deveria ser um TClientDataset mesmo


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar