Erro GenID

27/07/2010

Bem estou retornando com o problema ainda em aberto e o ero se dá em todas as tabelas depois que criei a função GENID E a procedure GETID, já verifiquei os generator e as triggers e tá tudo certo. As imagens estão abaixo:  
Glaucio Silva

Glaucio Silva

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

27/07/2010

Grande Gláucio,

Seguinte meu velho, veja o parâmetro tableName e veja como ele esta, qual o nome do generator que você criou no banco de dados ?

Pois sem dúvidas você esta com o generator errado, na hora de executar o seu script

Veja e me fale. Qualquer coisa manda o banco de dados (.FDB)

Um abraço

Wesley Y


GOSTEI 0
Glaucio Silva

Glaucio Silva

27/07/2010

Bom Dia Wesley, tudo bem!   Se for possivel baixe o projeto completo tem mas ou menos 8 MB. http://www.maqgrua.com.br/AppComercial.rar .   No aguardo!
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

27/07/2010

Glaucio,

Qual é o conteúdo que você esta passando para tablename ?

Att,

Wesley Y
GOSTEI 0
Glaucio Silva

Glaucio Silva

27/07/2010

Fala Wesley, velho é o seguinte foi criada uma function GenID(tablename : string) : Integer; retornando um inteiro que seria o id para a tabela de vendas pois estou usando um master details e por isso para as tabelas filho já terem o id da venda. Foi isso que foi feito e está dando erro. Tudo feito no datamodule e o procedimento da function foi pegar o gen_id, um select com o nome da tabela e incrementar + 1. Como se fosse um select e um update dos dados. Espero ter respondido o que você queria.
Um abração!
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

27/07/2010

Glaucio,


A função eu conheço muito bem, pois fui eu quem a fiz naquela turma que você participou.

A questão é saber se você esta passando o nome do generator certo, pois o erro é de nome de Generator "GEN_CLIENTE_ID IS NOT DEFINED" , veja o nome do se generator por exemplo, o nome do mesmo é GEN_CLIENTES_ID, ou seja voce esta passando GENID('Cliente'), e não GENID('CLientes').

Veja se isso não resolve seu problema


Att,

Wesley Y
GOSTEI 0
Glaucio Silva

Glaucio Silva

27/07/2010

Fala Wesley! Bom, verifiquei o conteudo todo e não vi nada de errado inclusive os generators. Se der para você verificar o erro no arquivo original, o fonte completo do sistema está neste link http://www.maqgrua.com.br/AppComercial.rar . No aguardo!
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

27/07/2010

Olá Glaucio,

Seguinte sua função

procedure TDM.GetID(DataSet: TDataSet);
begin
  DataSet.Fields[0].AsInteger := GenID(Copy(DataSet.Name,4));
end;

Ela esta dando problema pois o nome do seu ClientDataSet é cdsCliente, e o nome do seu generator é GEN_CLIENTES_ID

Você tem que mudar e nome do seu cdsCliente para cdsClientes.


Att,

Wesley Y
GOSTEI 0
Glaucio Silva

Glaucio Silva

27/07/2010

Fala Wesley!   Bem refiz tudo passo a passo, revi os generators, os nomes das tabelas e é o seguinte. No procedimento do oncreate do datamodule,  quando digito a linha do TClientDataSet para o evento do onNewRecord receber o GetID o Ctrl + espaço não chama o mesmo. Acho que o erro está aí, mas não estou conseguindo achar o mesmo, será que tem que declarar alguma biblioteca.   veja o exemplo do erro abaixo:   procedure TDm_Dados.DataModuleCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to Pred(ComponentCount) do
  if Components[I] is TClientDataSet then
    TClientDataSet(Components[I]).OnNewRecord := GetID (<-Aqui no GetID que o ctrl+espaço não acha o mesmo)
end;   No aguardo!
GOSTEI 0
Glaucio Silva

Glaucio Silva

27/07/2010

Fala Wesley!   O procedimento correto é este pois esqueci do begin e end, mas mesmo assim não chama.   procedure TDm_Dados.DataModuleCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to Pred(ComponentCount) do
  if Components[I] is TClientDataSet then
  begin
    TClientDataSet(Components[I]).OnNewRecord := GetID;
  end;
end;
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

27/07/2010


Glaucio,
  Você esta querendo fazer um method point, reescrever os método NewRecord, mas a assinatura do seu genID é diferente do NewRecord, e isso não funciona, a declaração dos parâmetros é a mesma, você terá que ver outro local para fazer isso, porém não desta forma com method pointer, pois não vai funcionar.

Quanto a dúvida inicial foi resolvido certo? Podemos fechar o chamado ?

Att,

Wesley Y
GOSTEI 0
Glaucio Silva

Glaucio Silva

27/07/2010

Wesley sabe o que não dá pra entender é que refiz tudo passo a passo de acordo com as video aulas e exatamente como está na video aula, pausando a video para cada linha de código e todo processo passo apasso desde o banco de dados que o Rodrigo faz. Tem que funcionar certo, é isso que não dá pra entender pois só se nos intervalos das gravações é feita as correções e não são passadas pro usuário(aluno), esse procedimento é diretamente tirado com o SAC da devmedia. Se for for pode fechar o post e um forte abraço.
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

27/07/2010

Glaucio,

  Como os nomes eram bem parecidos genid e getid, acabei confundindo. O mesmo tem de funcionar, pois a assinatura é igual, fiz um teste aqui e funcionou perfeitamente.


procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to Pred(ComponentCount) do
  if Components[I] is TClientDataSet then
  begin
    TClientDataSet(Components[I]).OnNewRecord := GetID;
  end;
end;

procedure TForm1.GetID(DataSet: TDataSet);
begin
  ShowMessage('');
end;

O exemplo funciona de forma perfeita, agora sua dúvida inicial não foi esta, para resolver este problema, se o mesmo persistir você tem que abrir outro chamado, um chamado para cada dúvida.

Att.

Wesley Y
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

27/07/2010

Glaucio, o problema foi resolvido ? Podemos fechar o chamado ?

Um abraço

Wesley Y
GOSTEI 0
POSTAR