Fórum Veja: Como colocar o Generator em um Dbedit usando Dbexpress #192336

02/11/2003

0

Bom resolvir postar a forma que resolvi a questão de colocar o próximo registro de um Generator em um Dbedit, pois apesar dos meus colegas ajudarem e de pesquisar, eu não tava conseguindo, é claro que tb devido ao fato de ser muito lego, espero que esta solução, no qual não sei dizer se é a mais adequada, possa ajudar meus colegas programadores, agradecimentos a A. Farias, pois tive vendo suas respostas e através dela é que criei a solução abaixo:

Bom, com esta solução vc poderá que ter o Generator e a Tigger que incrementa o generator.

Peguei um sqlDataset e dei o nome de sqlGenerator, no qual irá servir para todas as minhas tabelas. e depois criei uma unit e coloquei a seguinte função abaixo:(veja a unit completa)


unit UFuncao;

interface
uses SysUtils;
Function Generator(NomeGenerator:String):String; //Esta função é para retornar o código do Generator

implementation
uses udm;


Function Generator(NomeGenerator:String):String; //Esta função é para retornar o código do Generator
begin
with dm.sqlGenerator do
begin
Close;
CommandText := ´SELECT GEN_ID(´+NomeGenerator+´,0) FROM rdb$database´;
Open;
Generator := inttostr(Fields[0].AsInteger+1);
end;
end;
end.


depois declarei ela no Uses dos forms que iria utiliza-la
e a chamei da seguinte forma: (veja no button)

procedure TfrmProduto.btnNovoClick(Sender: TObject);
begin
btnGravar.Enabled := true;
btnNovo.enabled := false;
dm.cdsProduto.Append;
dbeCodigo.Text := Generator(´GEN_PRODUTO_ID´); //Função usada para retornar o valor do Generator (GEN_PRODUTO_ID) da tabela de produtos
dbeDescricao.SetFocus;
end;

No caso é só passar o nome do Generator da tabela que vc quer.

Espero que meus colegas tenham entendido.


Jelves


Jelves

Jelves

Responder

Posts

03/11/2003

Jelves

sobe


Responder

Gostei + 0

03/11/2003

Moliva

Eu fiz quase a mesma coisa, porém usando a Paleta interbase.

A única grande diferença, é a de que como estou em rede e muitos usuários poderão cadastrar ao mesmo tempo, eu só retorno o Generator na hora da gravaçao.

Image a situação:
UsuA pressiona Novo e começa a incluir. (generator 5)
UsuB pressiona Novo e começa a Incluir. (generator 5)
(os dois vão aparecer com o mesmo código).
UsuB Grava seu registro (generator 5)
UsuA Grava seu registro (generator 6, porém na tela ele vai achar que é o 5 também.


Eu fiz mais ou menos o seguinte

procedure TfrmProduto.btnGravarClick(Sender: TObject);
begin
. . .
dbeCodigo.Text := Generator(´GEN_PRODUTO_ID´);
Post;
. . .
end;



[]s
Moliva


Responder

Gostei + 0

03/11/2003

Jelves

É Moliva não havia pensado no caso de usar em rede, realmente você está certo. Só que se eu usar a sua solução não tenho como saber o numero de imediato, só saberei após a gravação, a não ser que quando eu inserisse um novo registro eu gravaria o código, porém se fazer isto e o usuário desistir de gravar eu perco este numero. bom terei que pensar em uma outra solução... será bem vinda se alguém tiver.


Jelves
jelves@bol.com.br


Responder

Gostei + 0

04/11/2003

Moliva

Para o meu problema, a maneira que mostrei está funcionando bem. Afinal de conta, na prática o código só deve ser retornado quando o registro for gravado no banco.

Não consigo ver a necessidade do código ser retornado durante a inserção.

Mas de qualquer forma tentarei arrumar uma outra saída.



[]s
Moliva


Responder

Gostei + 0

04/11/2003

Jelves

Eu tive pensando na questão e realmente vc está certo, no caso o código terá que ser mostrado após a gravação, ficaria enviável de ser mostrado antes, devido várias estações está acessando ao mesmo tempo, até que fosse para usar local, funcionária. Mais mesmo que usassemos local, temos que contruir nossas aplicações baseadas em Client/Serv, pois se decedimos mais tarde usar em rede, não será preciso mudar nada.
Mais a forma que nós utilizamos ficou boa, pois desta forma não precisamos mudar a propriedade Requerid do campo CodProd para false, pois estamos passando o código.


Obrigado!
Jelves


Responder

Gostei + 0

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

Aceitar