Sie sind auf Seite 1von 3

Boa noite ademilson Moreira.

Voce pode fazer das duas maneiras.


Se for fazer via código, será com um código simples do Delphi o qual passo abaixo, e q
ue deverá ser escrito no Evento OnClick de um botão qualquer:
procedure TForm1.btnInserirNumero(Sender: TObject);
var I: Integer;
begin
I := 1;
Query1.First;
while not Query1.Eof do
begin
Query1.Edit;
Query1.FieldByName('Codigo').asInteger := I;
Query1.Post;
Query1.Next;
Inc(I); // Incrementa a variável I
end;
Query1.CommitUpdates;
end;

A Query é justamente o componente que lê a sua tabela e traz o DataSet para a sua máqu
ina.
Sinceramente, já que sua tabela tem 350.000 registros, então devo alertá-lo que o código
acima demorará uma penca de minutos, mas de 30 minutos talvez, ou mais.
Se for fazer via SQL, acredito que seja mais rápido, neste caso voce terá que criar
uma Stored Procedure dentro do Console do Firebird, podendo ser até dentro do IBEx
pert, assim.
SET TERM ^;
CREATE PROCEDURE INCREMENTA_CODIGO
as
declare variable increment integer;
begin
increment = 1;
For Select * From NomeTabela do
begin
update NomeTabela set codigo = increment;
increment = increment + 1;
end
suspend;
end^
SET TERM; ^

Se voce estiver utilizando o IBExpert, basta escrever este código dentro dos SQL E
ditor ou do New SQL Editor, que são dois ícones parecidos com uma folha escrita no m
enu igual ao do Word, já dentro do IBConsole, utilizará o SQL Editor.
Como vou executar esta procedure ? Simples, após esta Stored Procedure ser salva,
voltamos ao SQL Editor, e digito o seguinte código, e logo após execute com o ícone qu
e tem um raio amarelo.
Exec Incrementa_Codigo;

#3 Usuário está offline Discorpio


O Senhor é meu Pastor e nada me faltará (Sl. 23:01)
Grupo: Membros
Posts: 139
Cadastrado: 14-maio 08
Sexo:Masculino
Localização:Rio de Janeiro
Postou 23 maio 2008 - 23:34
Olá sou eu de novo.
O código SQL da Stored Procedure que postei aqui contém erros.
Por esta razão eu gostaria de pedir desculpas e corrigi o erro.
Bom, o código da Stored Procedure do jeito que está não compila, pois existe um erro d
e escrita logo após o NomeTabela, pois qualquer campo de NomeTabela precisa ser pa
ssado como parâmetro para dentro de um variável.
Existe também um erro de lógica, onde a instrução Update * From NomeTabela set Codigo =
Increment, ele vai atualizar toda a tabela para um único valor somente.
Assim sendo eis o código certo.
Suponhamos que a sua tabela de 350.000 registros tem um campo Nome, então utilizar
emos este campo como referência para que a instrução identifique cada linha de registr
o e atualize somente este linha com um valor incrementado, assim:
SET TERM ^;
CREATE PROCEDURE INCREMENTA_CODIGO
as
declare variable nom varchar(50);
declare variable increment integer;
begin
increment = 1;
For Select nome From NomeTabela into :nom
do begin
update NomeTabela set Codigo = :increment where nome = :nom;
increment = :increment + 1;
end
suspend;
end^
SET TERM; ^

Existe também o erro de como se invoca a procedure, o código certo é este:


Execute Procedure Incrementa_Codigo;
Agora podes contar que funciona.
Me desculpe o erro.
Um abraço.

Das könnte Ihnen auch gefallen