Como obter o valor de um Generator
Eu gostaria de saber como posso obter o valor de
um determinado [b:40e2bf0a25]GENERATOR[/b:40e2bf0a25][/b]
um determinado [b:40e2bf0a25]GENERATOR[/b:40e2bf0a25][/b]
Fabio-ps
Curtidas 0
Respostas
Afarias
12/12/2003
function TFormx.GetNewID(const AGenerator: string): Integer; const SQLText = ´select gen_id(¬s, 1) from rdb$database´; begin with IBSQL1 do begin SQL.Text := Format(SQLText, [AGenerator]); Transaction.StartTransaction; try ExecQuery; Result := Fields[0].AsInteger; finally Transaction.Commit; end; end; end;
...faça uma pesquisa no fórum pela palavra GENERATOR...
T+
GOSTEI 0
Aersoftware
12/12/2003
Uma pequena dúvida em cima disso.. onde exatamente eu coloco esse código?? :?:
Allan Elias Ramos :?:
Allan Elias Ramos :?:
GOSTEI 0
Afarias
12/12/2003
vc poderá usar a função acima em diversos lugares do seu código. 2 lugares ´preferidos´ são no evendo BeforePost e OnNewRecord do DataSet (Query, etc...)
ex::
DataSet.FieldByName(´nome_campo´).AsInteger := GetNewID(´nome_do_generator´);
T+
ex::
DataSet.FieldByName(´nome_campo´).AsInteger := GetNewID(´nome_do_generator´);
T+
GOSTEI 0
Aersoftware
12/12/2003
Valeu afarias,
Só estou com mais uma pequena dúvida.. essa function tem q ser declarada? eu nunca fiz uma.. eu sei fazer procedures...
eu declaro la em cima como ´procedure teste´ por exemplo, em cima dele clico em ´Crtl + Shift + C´ e ele me abre pra bota o código.. é a mesma coisa com a function???
Allan Elias Ramos :roll:
Só estou com mais uma pequena dúvida.. essa function tem q ser declarada? eu nunca fiz uma.. eu sei fazer procedures...
eu declaro la em cima como ´procedure teste´ por exemplo, em cima dele clico em ´Crtl + Shift + C´ e ele me abre pra bota o código.. é a mesma coisa com a function???
Allan Elias Ramos :roll:
GOSTEI 0
Gandalf.nho
12/12/2003
Tente esse componente, serve justamente para recuperar o valor de um generator: [url]www.ceres-software.com/files/ibgen.zip[/url]
GOSTEI 0
Afarias
12/12/2003
eu declaro la em cima como ´procedure teste´ por exemplo, em cima dele clico em ´Crtl + Shift + C´ e ele me abre pra bota o código.. é a mesma coisa com a function???
a mesma coisa! funções e procedimentos (métodos já q estamos falando de classes) são a mesma coisa. a única diferença é q uma função tem um ´valor associado´.
pra declarar a função::
function NomeDaFunção( ** lista de parâmetros ** ): TipoDeRetorno;
T+
GOSTEI 0
Aersoftware
12/12/2003
Tente esse componente, serve justamente para recuperar o valor de um generator: [url]www.ceres-software.com/files/ibgen.zip[/url]
Gandalf, o arquivo nao abre, nao dá erro na página, como se ela nao existisse.. :cry:
Allan Elias Ramos :roll:
GOSTEI 0
Rodrrs
12/12/2003
É SIMPLES
select gen_id(nomedogenerator,0) from rdb$database
colocando o nome do generator vc ja tem o valor dele e 0 para
ele nao incrementar nada somente para vc ter o valor dele.
rodrigo-regis@uol.com.br
select gen_id(nomedogenerator,0) from rdb$database
colocando o nome do generator vc ja tem o valor dele e 0 para
ele nao incrementar nada somente para vc ter o valor dele.
rodrigo-regis@uol.com.br
GOSTEI 0
Aersoftware
12/12/2003
RODRRS, onde eu coloco esse código? E pra colocar ele eu preciso dakele outro maior la em cima?
Tentei colocar esse select no BeforePost do TClientDataSet e me deu o seguinte erro na hora de compilar:
Allan Elias Ramos :cry:
Tentei colocar esse select no BeforePost do TClientDataSet e me deu o seguinte erro na hora de compilar:
[Error] UDmDados1.pas(48): Undeclared identifier: ´select´ [Error] UDmDados1.pas(48): Undeclared identifier: ´gen_grupos_id´ [Error] UDmDados1.pas(48): Missing operator or semicolon [Error] UDmDados1.pas(48): Missing operator or semicolon [Fatal Error] ProjTeste.dpr(7): Could not compile used unit ´UDmDados1.pas´
Allan Elias Ramos :cry:
GOSTEI 0
Aersoftware
12/12/2003
Dei um tempo na programação do meu software, mas agora estou voltando.. ainda nao consegui arrumar o erro q ta dando no post acima, alguém sabe o q pode ser? grato..
Allan Elias Ramos
Allan Elias Ramos
GOSTEI 0
Beppe
12/12/2003
Ae, conterrâneo, o Delphi não permite SQL embarcado nos fontes. Vc insere ele no IBSQL, como o primeiro post do afarias mostra. :wink:
GOSTEI 0
Aersoftware
12/12/2003
Ae, conterrâneo, o Delphi não permite SQL embarcado nos fontes. Vc insere ele no IBSQL, como o primeiro post do afarias mostra. :wink:
Hmmm.. agora ja clareou um pokinho.. ja sei onde não colocar.. hehe.. mas ainda continuo em dúvida de onde colocar, já q nesse mesmo post tem duas resposta diferentes.. uma com uma function q é complexa e outra somente com o select.. qual das duas eu uso no evento BeforePost??
Não sei pq eu emperrei nessa e não consigo sair nem da etapa inicial... :cry:
Allan Elias Ramos :cry:
GOSTEI 0
Vinicius2k
12/12/2003
Se eu estivesse na sua posição, utilizaria a função do afarias que é genérica e vai lhe servir por toda a aplicação, não necessitando de implentar toda a rotina várias vezes...
T+
T+
GOSTEI 0
Aersoftware
12/12/2003
Ceeerto.. agora estou me encontrando.. hehe.. mas, onde eu coloco ela? como eu declaro? (Nunca me dei bem com Functions).. eu preciso ´ativar´ ela nos forms ou em algum componente q vou precisar dela?? :?:
Allan Elias Ramos :roll:
Allan Elias Ramos :roll:
GOSTEI 0
Aersoftware
12/12/2003
Pessoal, por incrível q pareça eu consegui obter o valor do gerador, mas ainda preciso de uma ajuda.. o q esta acontecendo é o seguinte..
Tá, eu insiro os registros e ele nao me aparece os códigos, q foi feito pra ser auto-numeração.. mas o gerador e a trigger funcionam.. quando eu fecho a aplicação e abro ela novamente, ele me lista os registros ja com os devidos códigos... bom, os códigos estao aparecendo como eu keria, mas só se eu reiniciar a aplicaçao.. tem como eu fazer eles aparecer sem precisar reiniciar? tem algum jeito de dar um refresh em algum componente ou algo do tipo?? to usando FB 1.5 e lingando pelo DbExpress... :wink:
Allan Elias Ramos :roll:
Tá, eu insiro os registros e ele nao me aparece os códigos, q foi feito pra ser auto-numeração.. mas o gerador e a trigger funcionam.. quando eu fecho a aplicação e abro ela novamente, ele me lista os registros ja com os devidos códigos... bom, os códigos estao aparecendo como eu keria, mas só se eu reiniciar a aplicaçao.. tem como eu fazer eles aparecer sem precisar reiniciar? tem algum jeito de dar um refresh em algum componente ou algo do tipo?? to usando FB 1.5 e lingando pelo DbExpress... :wink:
Allan Elias Ramos :roll:
GOSTEI 0
Rodolpho123
12/12/2003
Vc pode fazer o seguinte:
Quando vc faz o select para obter o valor do generator, vc tem o campo GEN_ID na sua Query. Então, vc pode acrescentar mais um valor no seu generator para vc ver o valor que irá ser cadastrado. Ex:
Isto não irá alterar o valor do seu generator. É só uma forma de vc ver o registro que irá ser cadastrado.
Quando vc faz o select para obter o valor do generator, vc tem o campo GEN_ID na sua Query. Então, vc pode acrescentar mais um valor no seu generator para vc ver o valor que irá ser cadastrado. Ex:
ShowMessage(IntToStr(IBQuery1GEN_ID.Value + 1));
Isto não irá alterar o valor do seu generator. É só uma forma de vc ver o registro que irá ser cadastrado.
GOSTEI 0
Aersoftware
12/12/2003
Olá, gostaria a agradecer todos pela ajuda.. finalmente consegui o q eu keria fazer.. mas por incrivel q pareça, nao precisei desses códigos nao.. eu botei, pra toda vez q salvar um registro, alem de salvar e dar o ApplyUpdates, eu coloco o Active do ClientDataSet pra false e depois novamente para True, e dou um refresh na grid.. isso faz com q, ao salvar, ele me exiba o código gerado.. :wink:
Allan Elias Ramos :roll:
Allan Elias Ramos :roll:
GOSTEI 0