Adicionar um novo registro automaticamente
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á.
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
Curtidas 0
Respostas
Andersonpgsql
15/12/2006
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...
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...
GOSTEI 0
Andersonpgsql
15/12/2006
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)
GOSTEI 0
M@teus
15/12/2006
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?
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?
GOSTEI 0
Facc
15/12/2006
[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?
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?
GOSTEI 0
M@teus
15/12/2006
Ocorre o erro no OnChange, ou seja quando há alteração no componente. Já tentei no OnExit e deu na mesma.
GOSTEI 0
Facc
15/12/2006
[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?
Experimente assim
Pois se encontrar o locate ele já traz o valor True, caso contrario, False
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
GOSTEI 0