Fórum Adicionar um novo registro automaticamente #334757

15/12/2006

0

Olá, alguém sabe como eu faço para que eu consiga gerar um valor para um campo toda vez que eu clicar em ´Novo´?
Eu tô usando o seguinte:

var
i: Integer;
...
Tabela.Last;
i:= Tabela.FieldByName(´Codigo´).AsInteger + 1;
Tabela.Insert;
Tabela.FildByName(´Codigo´):= i;
...

Mas tá dando o inexplicável erro: ´DataSet is not in edit or insert mode´.
Se alguém souber onde está o erro ou conhecer uma maneira melhor de fazer isso e puder me ajudar eu agradeço desde já.


M@teus

M@teus

Responder

Posts

15/12/2006

Andersonpgsql

Qual banco de dados vc ta usando?? vc pode fazer isso dentro do banco...para sistemas cliente servidor seria melhor se vc fizesse no banco, caso queira insistir em fazer desta forma vou te dar uma dica...

var
i,vl: Integer;
...
Tabela.Last;
i:= Tabela.FieldByName(´Codigo´).AsInteger;
v:=i+1;
Tabela.Insert;
Tabela.Edit;
Tabela.FildByName(´Codigo´):= v;
...

outra coisa...confira se a tabela esta aberta ou ativa... se não tive abra e ative-a

ai ve se da certo...mas ainda seria melhor se vc fizesse dentro do banco...como uma trigger ou uma sequencia ou até mesmo uma função...


Responder

Gostei + 0

15/12/2006

Andersonpgsql

Qual banco de dados vc ta usando?? vc pode fazer isso dentro do banco...para sistemas cliente servidor seria melhor se vc fizesse no banco, caso queira insistir em fazer desta forma vou te dar uma dica... var i,vl: Integer; ... Tabela.Last; i:= Tabela.FieldByName(´Codigo´).AsInteger; v:=i+1; Tabela.Insert; Tabela.Edit; Tabela.FildByName(´Codigo´):= v; ... outra coisa...confira se a tabela esta aberta ou ativa... se não tive abra e ative-a ai ve se da certo...mas ainda seria melhor se vc fizesse dentro do banco...como uma trigger ou uma sequencia ou até mesmo uma função...


um pequeno erro é vl, eu coloquei só v (rsrs)


Responder

Gostei + 0

18/12/2006

M@teus

Meu banco de dados é o Access e eu uso conexão ADO. Valeu pela dica, funcionou, mas eu tô com um outro problema e queria aproveitar o tópico:
Em um Form eu tenho uma DBEdit (txtCodProduto) que possui o seguinte código no evento OnChange:

if frmProdutos.tbProdutos.Locate(´Codigo´, txtCodProduto.Text, [])= True then
txtDescricao.Text:= frmProdutos.tbProdutosCodigo.AsString
else
txtDescricao.Text:= ´´;

Em runtime, quando faço alguma alteração na DBEdit dá um erro dizendo que os argumentos são insuficientes ou estão incorretos. Onde que pode estar o erro?


Responder

Gostei + 0

18/12/2006

Facc

[quote:fb4ff46bc2=´M@tEuS´]Meu banco de dados é o Access e eu uso conexão ADO. Valeu pela dica, funcionou, mas eu tô com um outro problema e queria aproveitar o tópico:
Em um Form eu tenho uma DBEdit (txtCodProduto) que possui o seguinte código no evento OnChange:

if frmProdutos.tbProdutos.Locate(´Codigo´, txtCodProduto.Text, [])= True then
txtDescricao.Text:= frmProdutos.tbProdutosCodigo.AsString
else
txtDescricao.Text:= ´´;

Em runtime, quando faço alguma alteração na DBEdit dá um erro dizendo que os argumentos são insuficientes ou estão incorretos. Onde que pode estar o erro?[/quote:fb4ff46bc2]

Em que momento dá esse erro? Vc não tem nenhuma procedure lincada no OnExit desse DBEdit?


Responder

Gostei + 0

18/12/2006

M@teus

Ocorre o erro no OnChange, ou seja quando há alteração no componente. Já tentei no OnExit e deu na mesma.


Responder

Gostei + 0

18/12/2006

Facc

[quote:3528c694f7=´M@tEuS´]Ocorre o erro no OnChange, ou seja quando há alteração no componente. Já tentei no OnExit e deu na mesma.[/quote:3528c694f7]

e esse o código que se encontra no OnChange?
if frmProdutos.tbProdutos.Locate(´Codigo´, txtCodProduto.Text, [])= True then
txtDescricao.Text:= frmProdutos.tbProdutosCodigo.AsString
else
txtDescricao.Text:= ´´; 



Experimente assim
if frmProdutos.tbProdutos.Locate(´Codigo´, txtCodProduto.Text, []) then


Pois se encontrar o locate ele já traz o valor True, caso contrario, False


Responder

Gostei + 0

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

Aceitar