Tengo una rutina que hace un update en una tabla de banco. Que pasa es que estas tablas tiene muchos registros. Una com 60.000.000 y otra con 5.000.000. La que yo voy a actualizar es la de 5.000.000, pero basada en la que tiene 60 millones. Yo pongo uno registros apenas y quando me voy a actualizar, me lo da el erro: TIEMPO EXCEDIDO. Hay como permitir que mi programa lo haga con el tiempo que for necesario? Uso:
Delphi 6, MsSql Server 2005 y ADO. Abajo mi rutina:
Código Delphi
[-]procedure TfrmMain.AtualizaTabela;
var
sql,
tabela: String;
qry,qry_carga: TAdoQuery;
dts: TDataSource;
arq: TextFile;
incrementa:integer;
begin
incrementa := 0;
if rgBanco.ItemIndex = -1 then
begin
MessageDlg('Selecione uma opção de Forma de Execução',mtInformation,[mbok],0);
Exit;
end;
AssignFile (arq, 'D:\Logs\Log_Erro_Update.txt');
Rewrite (arq);
qry := TAdoQuery.Create(nil);
qry.Connection := DM.Conn;
dts := TDataSource.Create(nil);
dts.DataSet := qry;
Grid.DataSource := dts;
if ComboBox1.Text <> '' then
tabela := ComboBox1.Text;
bAtualiza_tudo := rgBanco.ItemIndex = 0;
DM.qryAtualiza.Sql.Clear;
if (rgBanco.ItemIndex = 1) and (edtQtde.Text <> '') then
DM.qryAtualiza.Sql.Add('select top ' + edtQtde.Text + ' * from conhecimento_carga where data_emissao_conhecimento = ''1899-12-30 00:00:00.000''');
DM.qryAtualiza.Open;
sql := Memo1.Lines.Text;
pb.Max := DM.qryAtualiza.RecordCount;
pb.Position := 0;
DM.qryAtualiza.First;
while not DM.qryAtualiza.Eof do
begin
try
DM.Conn.BeginTrans;
qry.SQL.add(sql);
qry.ExecSQL;
DM.Conn.CommitTrans;
pb.Position := pb.Position + 1;
inc(incrementa);
DM.qryAtualiza.Next;
except
on E: Exception do
begin
writeln(arq, DateToStr(Now) + ' - ' + E.Message);
end;
end;
end;
DM.qryAtualiza.Close;
CloseFile(arq);
end;