Numerar Id

Embed Size (px)

Citation preview

aa1

123


Boa noite ademilson Moreira. Voce pode fazer das duas maneiras. Se for fazer via cdigo, ser com um cdigo simples do Delphi o qual passo abaixo, e q ue dever ser escrito no Evento OnClick de um boto 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 varivel I end; Query1.CommitUpdates; end;

A Query justamente o componente que l a sua tabela e traz o DataSet para a sua mqu ina. Sinceramente, j que sua tabela tem 350.000 registros, ento devo alert-lo que o cdigo acima demorar uma penca de minutos, mas de 30 minutos talvez, ou mais. Se for fazer via SQL, acredito que seja mais rpido, 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 cdigo dentro dos SQL E ditor ou do New SQL Editor, que so 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, aps esta Stored Procedure ser salva, voltamos ao SQL Editor, e digito o seguinte cdigo, e logo aps execute com o cone qu

e tem um raio amarelo. Exec Incrementa_Codigo; #3 Usurio est offline Discorpio

O Senhor meu Pastor e nada me faltar (Sl. 23:01) Grupo: Membros Posts: 139 Cadastrado: 14-maio 08 Sexo:Masculino Localizao:Rio de Janeiro Postou 23 maio 2008 - 23:34 Ol sou eu de novo. O cdigo SQL da Stored Procedure que postei aqui contm erros. Por esta razo eu gostaria de pedir desculpas e corrigi o erro. Bom, o cdigo da Stored Procedure do jeito que est no compila, pois existe um erro d e escrita logo aps o NomeTabela, pois qualquer campo de NomeTabela precisa ser pa ssado como parmetro para dentro de um varivel. Existe tambm um erro de lgica, onde a instruo Update * From NomeTabela set Codigo = Increment, ele vai atualizar toda a tabela para um nico valor somente. Assim sendo eis o cdigo certo. Suponhamos que a sua tabela de 350.000 registros tem um campo Nome, ento utilizar emos este campo como referncia para que a instruo 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 tambm o erro de como se invoca a procedure, o cdigo certo este: Execute Procedure Incrementa_Codigo;

Agora podes contar que funciona. Me desculpe o erro. Um abrao.