Ajuda Em Reestruturação De Tabelas
06/04/2006
0
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!
[quote:80d6474063=´Moderação´][color=red:80d6474063]Título editado por Massuda
Por favor, não use títulos com apenas letras maiúsculas[/color:80d6474063][/quote:80d6474063]
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!
[quote:80d6474063=´Moderação´][color=red:80d6474063]Título editado por Massuda
Por favor, não use títulos com apenas letras maiúsculas[/color:80d6474063][/quote:80d6474063]
Cd.stormer
Curtir tópico
+ 1
Responder
Post mais votado
23/04/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...?
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...?
Carlos Bernardo
Responder
Mais Posts
27/04/2006
Carlos Bernardo
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
Responder