Array
(
)

Ajuda Em Reestruturação De Tabelas

Cd.stormer
   - 06 abr 2006

Será que alguém poderia me ajudar com o seguinte problema?

Estou desenvolvendo um software que precise pegar uma tabela (PARADOX) e comparar com outra tabela(PARADOX)... ver se a estrutura está a mesma.

Se não estiver, preciso que esse software que eu preciso desenvolver para a empresa onde trabalho veja o que esta diferente da tabela pai(a correta que voce ira apontar) com a tabela filho. Se a tabela filho estiver diferente (algum tamanho de campo alterado, ou indice ou campo criado), a tabela filha se ajuste automaticamente e fique igual a tabela pai.

Por favor me ajudem se alguem souber.

O que eu desenvolvi até agora foi:




procedure Teste(const DBName, TblName, DBName2, TblName2: string;
List1, List2, List3, List4: TStringList);
var
I: integer;
I2:Integer;
item1,
item2 :string;
begin
List1.Clear;
List2.Clear;
List3.Clear;
List4.Clear;


with TTable.Create(Application) do
try
DatabaseName := DBName;
TableName := TblName;
with FieldDefs do
begin
Update;
for I := 0 to Count -1 do
begin
with TTable.Create(Application) do
begin
DatabaseName := DBName;
TableName := TblName;

item1:=Items[I].Name;
List1.Add(Items[I].Name);
List3.Add(Items[I].FieldClass.ClassName);

with TTable.Create(Application) do
begin
DatabaseName := DBName2;
TableName := TblName2;
with FieldDefs do
begin
update;
for I2:=0 to Count-1 do
begin
if (item1 = Items[I2].Name) then
begin
List2.Add(Items[I2].Name);
List4.Add(Items[I2].FieldClass.ClassName);
end;
end;
end;
end;
end;
end;
end
finally
Free;
end;
end;



exemplo de utilizacao: colocar 4 MEMO e um botao.

no on click do botao:

procedure TfrmDetalhes.Button2Click(Sender: TObject);
var
List1,
List2,
List3,
List4 : TStringList;
begin
List1 := TStringList.Create;
List2 := TStringList.Create;
List3 := TStringList.Create;
List4 := TStringList.Create;
try
Teste(´victoria´,´rapha1´,´victoria´,´rapha2´, List1, list2, List3, list4);
Memo1.Lines.Assign(List1);
Memo2.Lines.Assign(List2);
Memo3.Lines.Assign(List3);
Memo4.Lines.Assign(List4);

finally
List1.Free;
List2.Free;
List3.Free;
List4.Free;

end;

end;


como resultado ele trara em dois memo a estrutura da tabela pai e nos outros 2 a estrutura da tabela filho QUE ESTEJA DIFERENTE da tabela pai.

preciso agora saber o tamanho dos campos e comparar os indices...





POR FAVOR AJUDEM!


Citação:
Título editado por Massuda

Por favor, não use títulos com apenas letras maiúsculas



Carlos Rausch
   - 23 abr 2006

Eu trabalho com uma lógica um pouco diferente da sua.

Quando eu reestruturo as tabelas , eu copio as tabelas antigas para uma pasta, crio as tabelas novamente , só q as crio vazias.
Depois eu copio os dados da tabela copiada , para a nova q foi criada.

Faço isso sem comparar se foi alterada ou não a tabela...Ou seja, pode ser q eu tenha criado algum campo novo ou alterado o tamanho de um campo já existente, ou não, para isso no meu datamodule eu já tenho a componente table , em outro datamodule eu tenho uma query para os arquivos copiados, consulto a tabela antiga, se tiver o campo grava ele mesmo e se não tiver ele grava algum valor padrão...Qdo crio a tabela nova ele já vem com os novos campos....

Não sei se é isso q vc precisa...?


Ricardoif
   - 24 abr 2006

raush

como vc verifica se o campo existe


Carlos Rausch
   - 27 abr 2006

#Código

Crio uma variável chamada

var
campos : TStrings;

Campos := TStringList.Create();
query1.GetFieldNames(campos);

iF CAMPOS.IndexOf(´CampoX´) <> -1 THEN //Se o campo existir
begin
If Table1.FieldValues[´CampoX´] <> null then
Table1.AsString := Query1.FieldValues[´query1´];
end
else
table1.fieldValues[´CampoX´] := ´Campo Novo´; //Se não existir

Campos.free;

Onde a query1 é a pesquisa dos arquivos antigos e table1 já é a tabela atualizada