Substituição de valores de campos em 2 tabelas (Paradox)

13/09/2004

Olá pessoal,

Tenho duas tabelas em paradox:
Table1:
CODIGO............N
NOME................A....50

Table2:
CODIGO............N
NOME................A....50
DATA_NASC......D
CONJUGE..........A....50

Abri um form, inseri duas tables, um BitBtn e gostaria que, ao clicar no botão, ocorra a seguinte alteração na table2:

Alterar o Código da Table2 caso o nome seja igual ao da Table1, independente qual código esteja cadastrado na Table2.

Exemplo: Digamos que na Table1 tenha:
95551 JOAO DA SILVA
95552 JOSE GERALDO
95553 MARIA APARECIDA

Caso haja um JOAO DA SILVA na Table2, o código do JOAO DA SILVA na Table2 altere para 95551.

Caso haja um JOSE GERALDO na Table2, o código de JOSE GERALDO na Table2 altere para 95552.

E assim sussessivamente, até o final da table1. O objetivo é alterar todos os códigos da Table2 com os da Table1 desde que os nomes sejam iguais. Talvez um comando While resolva, mas já quebrei a cabeça e não consegui.

Agradeço a quem puder ajudar, obrigado.


Marcio_soares

Respostas

13/09/2004

Dataclass

Olá!

Olha você vai ter que fazer um ´loop´ percorrendo todos os registros da Table2.Neste loop você pega e verifica se o cara existe na Table1 ,caso exista é só fazer um UPDATE na Table2 usando o codigo encontrado na Table1.

Se tiver bronca implementando é só falar que quando tiver 5 minutos livres agente desenrola!

Abraço!


Responder Citar

13/09/2004

Marcio_soares

DataClass, fiz o seguinte código:

Table1.first;
begin
While not Table2.eof do
begin
If Table1NOME = Table2NOME;
Table2CODIGO := TABLE1CODIGO;
end;
Table1.next;
end;

Mas não deu certo, onde errei?
Obrigado.


Responder Citar

13/09/2004

Marcio_soares

Sobe..


Responder Citar

13/09/2004

Gandalf.nho

Faça assim:

Table1.first;
While not Table2.eof do
begin
If Table1NOME.Value = Table2NOME.Value then
begin
Table2.Edit;
Table2CODIGO.Value := TABLE1CODIGO.Value;
Table2.Post;
end;
end;
Table1.next;


Responder Citar

13/09/2004

Marcio_soares

Ok, irei testar hoje à noite.

Se alguém tiver mais idéias, por favor, me ajude.

Por enquanto, obrigado.


Responder Citar

14/09/2004

Marcio_soares

Pessoal,

Ontem à noite, voltei a mexer no sistema, refiz a rotina, conforme abaixo:

[b:5367f4f704][b]procedure TFORMRecusados.BitBtn1Click(Sender: TObject):[/b:5367f4f704]
begin[/b]
Table1.[b:5367f4f704]first[/b:5367f4f704];
Table2.[b:5367f4f704]first[/b:5367f4f704];
...[b:5367f4f704]while not [/b:5367f4f704]Table1.eof do
.......[b:5367f4f704]begin[/b:5367f4f704]
..........[b:5367f4f704]while not [/b:5367f4f704]Table2.eof do
..............[b:5367f4f704]begin[/b:5367f4f704]
..................Table2.[b:5367f4f704]Edit[/b:5367f4f704];
..................[b:5367f4f704]If [/b:5367f4f704]Table1NOME.value = Table2NOME.value [b:5367f4f704]then
[/b:5367f4f704]
..................Table2CODIGO.value := Table1CODIGO.value;
..................Table2.[b:5367f4f704]post[/b:5367f4f704];
..................Table2.[b:5367f4f704]next;[/b:5367f4f704]
..............[b:5367f4f704]end[/b:5367f4f704];
.......Table1.next;
.......[b:5367f4f704]end[/b:5367f4f704];
[b:5367f4f704]end[/b:5367f4f704];
[b:5367f4f704]end[/b:5367f4f704].

Ocorreu o seguinte:
Está lendo somente o primeiro registro da Table1 e alterando o código correspondente na Table2.
Não está lendo os demais registros da Table1.
O que falta para que seja efetuada a leitura de todos os registros na Table1?

Aguardo resposta, obrigado.

gandalf.nho obrigado por sua ajuda, pois foi imprescindível para estar dando certo.


Responder Citar

14/09/2004

Rômulo Barros

UPDATE TABLE2 SET CODIGO = (
                            SELECT T1.CODIGO FROM TABLE1 T1
                            WHERE  T1.NOME = NOME
                            ) 



:wink: :wink: :wink: :wink:


Responder Citar