PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Atualização/Inserção #39531

17/10/2003

0

Colegas,

Estou com uma enorme dúvida, pois tenho um sistema de replicação de dados onde consigo Inserir dados de um banco para outro, mas na hora de atualizar dar erro ( PRIMARY KEY ), pois se o banco 02 tiver informações não dar certo, podem ajudar ????

A função :

Obs.: O nome Origem é do componente Filelistbox, que uso para listar todas as tabelas.

No OnShow do Formulário já seleciono todas as tabelas
////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.FormShow(Sender: TObject);
var i:integer;
begin
/////////
try DB1.Connected := true except showmessage(´Problemas na Conecçao´) end;
// Carrega Query
Query1.Close;
Query1.sql.Clear;
// Verifica Tabelas na Base

Query1.sql.Add(´SELECT RDB$RELATION_NAME Bancos FROM RDB$RELATIONS ´+
´ WHERE NOT RDB$RELATION_NAME LIKE :P00 ´);
Query1.Params[00].Text:= ´RDB$¬´;

try
Query1.Open
except
showmessage(´Base não conectada verifique´);
end;
// Alimenta o Bases
origem.Items.clear;
while not Query1.eof do begin
origem.Items.Add(Query1.Fields[0].AsString);
Query1.next;
end;
/////////
//gravo true em todas as tabelas
for i := 0 to origem.Items.count-1 do begin
origem.Checked[i] := true;
end;

//===============================================//
//===============================================//
//===============================================//

end;


////////////////////////////////////////////////////////////////////////////////////////////////

procedure TForm1.BitBtn2Click(Sender: TObject);
var i,j,xpos,xreg,xultimo : integer;
xtipo,xidx,xidx_old,xold,xbase_old,xcp_idx : string;
function Tira_Ponto(texto:string):string;
var i:integer;
s:string;
begin
for i := 1 to length(texto) do begin
if (copy(texto,i,1) <> chr(39)) then
s := s + copy(texto,i,1)
end;
Tira_Ponto := s;
end;

begin

/////// Conecta tabela destino
/////////rotina de inclusao das tabelas
// de.Visible := true;
for i := 0 to origem.Items.count-1 do begin
if origem.Checked[i] then begin
// tabela2.Active:=false;
query1.Close;
query1.sql.Clear;
query1.sql.add(´select * from ´+origem.items[i]);
// Mostra base exportada
BaseExport.Caption := origem.items[i];
BaseExport.Refresh;
GroupBox2 .Refresh;
try query1.open except end;
//////////////
query2.Close;
query2.sql.Clear;
query2.sql.add(´select * from ´+origem.items[i]);
try query2.open except end;

tabela2.TableName :=origem.items[i];
tabela2.Active:=true;
///////////////
xpos := 0;
xreg := 0;
xultimo := query1.RecordCount;
ProgressBar1.Position := 0;

// Passa dados entrea as Tabelas
while not Query1.EOF do begin
// Numero dos registros exportados
inc(xreg);

// Exporta.Caption := inttostr(xreg);
// Exporta.Refresh;
// Marca .Caption := inttostr(xultimo);
// Marca .Refresh;



// Barra de progressao
inc(xpos);
if xpos = Query1.RecordCount div 10 then begin
xpos := 0;
ProgressBar1.Position := ProgressBar1.Position + 10;
end;

if not Query2.IsEmpty then
begin

for j := 0 to Query1.FieldCount - 1 do begin
tabela2.edit;
tabela2.Fields[j].AsString := tira_ponto(Query1.Fields[j].AsString);
tabela2.post;

end;

end else
begin
tabela2.append;

for j := 0 to Query1.FieldCount - 1 do begin
tabela2.Fields[j].AsString := tira_ponto(Query1.Fields[j].AsString);

end;


end; ////////////

tabela2.ApplyUpdates;
tabela2.CancelUpdates;

Query1.Next;
end;
end;
end;
/////////fim da rotina de inclusao das tabelas


end;


Claudiomar

Claudiomar

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar