Erro GenID
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
Curtidas 0
Respostas
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
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
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
27/07/2010
Glaucio,
Qual é o conteúdo que você esta passando para tablename ?
Att,
Wesley Y
Qual é o conteúdo que você esta passando para tablename ?
Att,
Wesley Y
GOSTEI 0
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!
Um abração!
GOSTEI 0
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
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
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
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
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
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!
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
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;
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
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
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
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
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
27/07/2010
Glaucio, o problema foi resolvido ? Podemos fechar o chamado ?
Um abraço
Wesley Y
Um abraço
Wesley Y
GOSTEI 0