Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Atualizar tabela paradox


Eder

Pergunta

Ola,

Pessoal, tenho duas tabelas paradox TB1.db e TB2.db

ambas tem os campos iguais porem uma tabela TB1.db tem um campo(COD_OCO) que é atualizado constantemente.

O que eu gostaria é copiar os dados deste campo que é sempre atualizado TB1.db(COD_OCO) e atualizar o mesmo campo da TB2.db(COD_OCO).

Só que tem um pequeno detalhe como a TB2.db tem dados do ANO INTEIRO e a TB1.db tem dados só de UM MÊS teria que ter um filtro campo chave para atualizar o registro correto. O campo chave é chamado de NUMERO_CTRC

alguém poderia me mostrar um pequeno exemplo de como funcionaria esta atualização de dados?

Muito Obrigado

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
Pessoal, tenho duas tabelas paradox TB1.db e TB2.db e ambas tem os campos iguais

eu gostaria é copiar os dados deste campo que é sempre atualizado TB1.db(COD_OCO) e atualizar o mesmo campo da TB2.db(COD_OCO).

Eder... Esse exemplo vai servir para o que está querendo, é só fazer as modificações necessárias

procedure TForm1.Button1Click(Sender: TObject);
var
   i: integer;
   NomeCampo: String;
begin
   Tabela1.First;
   While Not Tabela1.Eof Do
   Begin
      Tabela2.Append;
      For i := 0 To Tabela1.FieldCount - 1 Do Begin
         NomeCampo := Tabela1.Fields[i].FieldName;
      Tabela2.FieldbyName(NomeCampo).Value :=
      Tabela1.FieldbyName(NomeCampo).Value;
   End;
   Tabela2.Post;
   Tabela1.Next;
   Application.ProcessMessages;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ola, Jonas, Muito Obrigado pela resposta, mas não é esta idéia, perdão se me expressei mal.

Seguinte:

Eu tenho uma tabela1 que tem dados assim:

Codigo-Numero-CodOco

===============

1 2565 35

2 2566 35

3 2567 87

e assim por diante.

Outra tabela2 assim:

Codigo-Numero-CodOco

===============

1 2565 10

2 2567 11

e assim por diante.

a tabela a ser atualizada é a tabela1 em relação a Tabela2

note que a tabela1 e a tabela2 o campo(NUMERO)tem o valor 2565 e 2567 igual nas duas tabelas....pois é, eu queria alterar somente a linha campo (CODOCO)que possui os campos iguais, no caso depois da atualização a tabela1 ficaria assim.

Codigo-Numero-CodOco

===============

1 2565 10

2 2566 35

3 2567 11

e assim por diante.

o FILTRO é o campo NUMERO que compara e vê qual o numero a ser alterado o campo CODOCO. No caso o numero 2565 recebeu CODOCO = 10 e o 2567 recebeu = 11

Não sei se você entendeu...o que eu precisaria.

Muito Obrigado e Bom Final de Semana.

Editado por Eder
Link para o comentário
Compartilhar em outros sites

  • 0

Ola, Jonas

Carinha tentei, mas não consegui o resultado esperando, o codigo percorre as tabelas mas não funciona, realmente não sei como fazer dentro do exemplo que demonstrou.

Fiz assim:

procedure TForm1.Button1Click(Sender: TObject);
var
   i: integer;
   NomeCampo: String;
begin
   Table1.First;
    While Not Table1.Eof Do
     Begin
      Table2.append;
        For i := 0 To Table1.FieldCount - 1 Do Begin
          NomeCampo := Table1.Fields[i].FieldName;
          if ((Table2Numero.AsString) = (NOMECAMPO)) then
            begin
             Table2.Edit;
             Table2.FieldbyName('CODOCO').Value := Table1.FieldbyName('NOMECAMPO').Value;
             Table2.post;
           end;
        end;
      Table1.next;
      Application.ProcessMessages;
     end;
end;

Se pudures me ajudar comentando as linhas agradeço, para o melhor entendimento.

Muito Obrigado, Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Tabela1

cod--num-----codoco

1......2567.....35

2......2568.....35

3......2569.....67

Tabela2

cod--num-----codoco

1......2567.....10

2......2568.....35

3......2569.....11

Atualização da tabela 1 e relação a tabela 2

Tabela1

cod--num-----codoco

1......2567.....10

2......2568.....35

3......2569.....11

procedure TForm1.Button1Click(Sender: TObject);
var
   i,j: integer;
   NomeCampo: String;
begin
   Tabela2.First;
   While Not Tabela2.Eof Do
   Begin
      For i := 0 To Tabela2.FieldCount-1 Do
      Begin
         NomeCampo := Tabela2.Fields[i].FieldName;

         if (NomeCampo = 'Numero') and
            (Tabela1.FieldbyName(NomeCampo).Value = Tabela2.FieldbyName(NomeCampo).Value ) then
            begin
               Tabela1.Edit;
               if Tabela1.FieldbyName('Codoco').Value <> Tabela2.FieldbyName('Codoco').Value then
                  Tabela1.FieldbyName('Codoco').Value := Tabela2.FieldbyName('Codoco').Value;
               Tabela1.Next;

            end;
      End;
   Tabela1.Post;
   Tabela2.Next;
   Application.ProcessMessages;

   end;
end;

OBS: esta abordagem serve apenas para tabelas com estruturas iguais

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jonas, tinha um errinho, você tinha trocado o Post por Next, mas beleza corrigi e deu certo.

Ai percebi, que eu tinha mais um campo para associar ao NUMERO, é a SIGLA, pois somente o NUMERO poderá dar problema, pois tem filial que pode usar o mesmo número que a outra e ai vai dar problema.

Então adaptei o codigo assim como esta abaixo, mas não deu certo.

procedure TForm1.Button1Click(Sender: TObject);
var
   i,j: integer;
   NomeCampo: String;
begin
   Tabela2.First;
   While Not Tabela2.Eof Do
   Begin
      For i := 0 To Tabela2.FieldCount-1 Do
      Begin
         NomeCampo := Tabela2.Fields[i].FieldName;

            If (NomeCampo = 'SIGLA') and
            (Tabela1.FieldbyName(NomeCampo).Value = Tabela2.FieldbyName(NomeCampo).Value ) THEN
            If (NomeCampo = 'NUMERO') and
            (Tabela1.FieldbyName(NomeCampo).Value = Tabela2.FieldbyName(NomeCampo).Value ) then

            begin
               Tabela1.Edit;
               if Tabela1.FieldbyName('CODOCO').Value <> Tabela2.FieldbyName('CODOCO').Value then
                  Tabela1.FieldbyName('CODOCO').Value := Tabela2.FieldbyName('CODOCO').Value;
               Tabela1.Post;

            end;
      End;
   Tabela1.Next;
   Tabela2.Next;
   Application.ProcessMessages;
      end;
end;
Neste eu não poderia trabalhar com dois campos chaves(filtro) partindo deste código? fiz de várias maneiras e não pega o filtro Tentei também e não deu certo:
If ((NomeCampo = 'SIGLA') and (NomeCampo = 'NUMERO')) and
            (Tabela1.FieldbyName(NomeCampo).Value = Tabela2.FieldbyName(NomeCampo).Value ) THEN

valeu...Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Tabela1

cod--sigla--numero-----codoco

1......BMA.....2566............35

2......BLU......2565............41

3......BLU......2566............67

4......JOI.......2567............10

5......BMA.....2567............35

6......BLU......2567............55

7......BLU......2568............67

8......JOI.......2568............10

Tabela2

cod--sigla--numero-----codoco

1......BMA.....2567............01

2......BLU......2567............01

3......BLU......2568............01

4......JOI.......2568............03

Note que a tabela2 tem poucos dados para serem atualizados na tabela1

ficando assim a tabela1 depois de atualizado:

Tabela1

cod--sigla--numero-----codoco

1......BMA.....2566............35

2......BLU......2565............41

3......BLU......2566............67

4......JOI.......2567............10

5......BMA.....2567............01

6......BLU......2567............01

7......BLU......2568............01

8......JOI.......2568............03

Grato

Editado por Eder
Link para o comentário
Compartilhar em outros sites

  • 0

Nesse caso a abordagem é outra

procedure TForm1.Button1Click(Sender: TObject);
var
   i,j: integer;
   NomeCampo: String;
begin
   Tabela1.First;
   For j := 1 to Tabela1.RecordCount do
   Begin
      Tabela2.First;
      For i := 1 To Tabela2.RecordCount Do
      Begin
         If (Tabela1Sigla.Value = Tabela2Sigla.Value) and (Tabela1Numero.Value = Tabela2Numero.Value)
            and (Tabela1Codoco.Value <> Tabela2Codoco.Value) then
            begin
               Tabela1.Edit;
               Tabela1Codoco.Value := Tabela2Codoco.Value;
               Tabela1.Post;
            end;
            Tabela2.Next;
      End;
   Tabela1.Next;
   Application.ProcessMessages;
   end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza, Jonas, Fechou certinho, testei de várias formas.

Era esta a minha idéia do começo mas eu não sabia montar esta parte, alias não tinha idéia de como montar:

Tabela1.First;
   For j := 1 to Tabela1.RecordCount do
   Begin
      Tabela2.First;
      For i := 1 To Tabela2.RecordCount Do

Este código seu ficou fácil o entendimento.

valeu a ajuda mais uma vez.

Obrigado e Grande Abraço :)

Editado por Eder
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...