a linha nao pode ser localizada para atualizacao
04/01/2006
0
pq da esse erro???
como evita-lo???
estou usando os seguintes comandos ...
tabela.append para colocar a tabela em estado de insercao ...
tabela.post para postar os dados que estao em modo de insercao ...
logo apos esse comando creio que a tabela entra em State dsBrowse certo???
se eu fizer alguma modificacao e tenntar postar vai dar erro ...
tentei resolver da seguinte forma
with tabela do begin if state = dsBrowse then Edit; end; post;
sei la, deem uma força ai please!!
Fernando_cunha
Posts
04/01/2006
Fernando_cunha
para inserir dados em uma tabela uso o comando
tabelaX.append;
quando faço isso a tabela fica em modo DsInsert certo??
insiro os dados nos DBEdits e utilizo o comando TabelaX.Post; para gravar os dados ...
quando faço isso a tabela fica em modo DsBrowse, Certo???
pelo o que eu sei, em modo DsBrowse nao vou conseguir inserir dados na tabela, a tabela tem que estar em modo DsEdit para poder modificar os dados ...
se eu seguir a ordem certinha de execucao nao vai gerar nenhum erro, mas pensem que o usuario nao vai fazer nada certo ...
por exemplo, quando eu insiro dados na tabela e uso post para gravar os dados na mesma a tabela entra em modo DsBrowse (por favor me corrijam se eu estiver errado) se logo apos o o usuario tentar mudar alguma coisa nos dbedits e clicar em post, vai dar o erro que eu mencionei acima
´a linha nao pode ser localizada para atualizacao. alguns valores podem ter sido alterados desde que ela foi lida pela ultima vez ... ´
o que eu quero saber é, como resolver esse erro!!
o mlehor jeito édesabilitar os botoes que nao devem ser pressionados??
tem como eu tratar isso via codigo, por exemplo, se o usuario der post e a tabela estiver em modo de visualizacao fazer ela entrar em modo de edicao????
captaram???
[]ss
04/01/2006
Rômulo Barros
Tenho o seguinte método:
Procedure ControlaBotoes(){ botaoAppend.Enabled := DataSet.State In [dsBrowse]; botaoEdit.Enabled := (DataSet.State In [dsBrowse] And Not (DataSet.isEmpty)); botaoPost.Enabled := DataSet.State In [dsInsert,dsEdit]; botaoCancel.Enabled := DataSet.State In [dsInsert,dsEdit]; botaoDelete.Enabled := (DataSet.State In [dsBrowse] And Not (DataSet.isEmpty)); }
Pronto, agora basta vc chamar esta procedure no evento [b:84e3f1eece]OnStateChange [/b:84e3f1eece]do [b:84e3f1eece]DataSource [/b:84e3f1eece]que está ligado ao seu dataset.
04/01/2006
Fernando_cunha
[]s
obrigado pela ajuda!!
04/01/2006
Rômulo Barros
04/01/2006
Fernando_cunha
[]s
04/01/2006
Fernando_cunha
coloquei o seguinte codigo dentro da procedure controlabotoes()
if dm.tb1.State in [dsBrowse] then ShowMessage(´Browse´); if dm.tb1.State in [dsEdit] then ShowMessage(´Edit´); if dm.tb1.State in [dsInsert] then ShowMessage(´dsInsert´); if dm.tb1.State in [dsSetKey] then ShowMessage(´dsSetKey´);
colokei apenas para saber em qual modo a tabela esta operando no momento do erro !!!
e tbm para saber em que modo esta operando em cada acao que eu faço!!
vejamosss
quando clico no botaoAppend - tabela.append;
recebo um showmessage(´Dsinsert´)
quando clico em post logo apos preencher os dados recebo
DsBrowse
ate aqui correu tudo como esperado ...
apos dar post, clikei no botao edit e a tabela entrou em modo de edicao ...
quando mando postar, da o erro que eu citei acima!!!
nao tem pq dar o erro se a tabela esta em modo de edicao!!
por favor somebody help me!!!
[]ss
04/01/2006
Martins
Tenho o seguinte método:
Procedure ControlaBotoes(){ botaoAppend.Enabled := DataSet.State In [dsBrowse]; botaoEdit.Enabled := (DataSet.State In [dsBrowse] And Not (DataSet.isEmpty)); botaoPost.Enabled := DataSet.State In [dsInsert,dsEdit]; botaoCancel.Enabled := DataSet.State In [dsInsert,dsEdit]; botaoDelete.Enabled := (DataSet.State In [dsBrowse] And Not (DataSet.isEmpty)); }
Pronto, agora basta vc chamar esta procedure no evento [b:c35b950972]OnStateChange [/b:c35b950972]do [b:c35b950972]DataSource [/b:c35b950972]que está ligado ao seu dataset.[/quote:c35b950972]
Acredito q o código do Rômulo Barros seja o mais indicado, com algumas correções bem pequeninas.
botaoAppend.Enabled := DataSet.State In [dsBrowse]; botaoEdit.Enabled := ((DataSet.State In [dsBrowse] )And Not (DataSet.isEmpty)); botaoPost.Enabled := DataSet.State In [dsInsert,dsEdit]; botaoCancel.Enabled := DataSet.State In [dsInsert,dsEdit]; botaoDelete.Enabled := ( (DataSet.State In [dsBrowse]) And Not (DataSet.isEmpty));
O Código do Rômulo é o melhor pois assim vc não se preocupa se o usuário vai clicar no botão Gravar ou não pois o mesmo estará habilitado apenas em modo de inserção ou edição, e tb pq caso vc migre sua base e seus componentes de acesso, vc não terá trabalho.
Quanto ao erro no se vc pudesse mostra mais detalhes do código, pq se a tabela está em modo de edição não deveria dar nenhum erro ao dar um post.
Boa Sorte!
04/01/2006
Rômulo Barros
Veja só, quando damos um POST em uma Table ou Query e a mesma não se encontra em modo de inserção (dsInsert) ou em modo de edição (dsEdit), o delphi levanta a seguinte exceção:
[color=blue:8d6241d154][b:8d6241d154]DataSet Not In Insert or Edit Mode ( algo assim )[/b:8d6241d154][/color:8d6241d154]
No seu caso, acho que vc terá que configurar os [b:8d6241d154]ProviderFlags[/b:8d6241d154] dos fields da sua query/table. Quando as flags não estão setadas corretamente, os registros a serem atualizados não são encontrados e diversas exceção podem ser levantadas, entre elas esta: [b:8d6241d154]Unable to Find Record. No key Specify[/b:8d6241d154]
Já respondi algo parecido [url=http://forum.devmedia.com.br/viewtopic.php?t=62416&highlight=providerflags&sid=121432fbde342a60d8095a842ae3f0d4]NESTE LINK[/url]
Caso o link anterior não resolva seu problema, entre [url=http://translate.google.com/translate?u=http¬3A¬2F¬2Fdelphi.about.com¬2Fgi¬2Fdynamic¬2Foffsite.htm¬3Fzi¬3D1¬2FXJ¬26sdn¬3Ddelphi¬26zu¬3Dhttp¬253A¬252F¬252Fbdn.borland.com¬252Fborcon2004¬252Farticle¬252Fpaper¬252F0¬252C1963¬252C32229¬252C00.html&langpair=en¬7Cpt&hl=pt-BR&ie=UTF-8&oe=UTF-8&prev=¬2Flanguage_tools]NESTE LINK[/url], localize a palavra ´ProviderFlags´, e configurea conforme o artigo ensina.
[color=blue:8d6241d154][b:8d6241d154]Acredito que não voltarei mais a postar neste tópico durante 30 dias, muito menos neste fórum e outros, pois estou entrando de férias hoje e passarei um bom tempo longe do pc. [/b:8d6241d154][/color:8d6241d154]
:wink: [color=red:8d6241d154]Boa Sorte ![/color:8d6241d154]
04/01/2006
Fernando_cunha
[b:ec99a98c00]codigo no evento form create do form que inicializa a tabela!![/b:ec99a98c00]
procedure TFrmCadastroRE.FormCreate(Sender: TObject); var x: integer; pais, inco: TADOTable; begin Dm.tb1.TableName:= ´tbRegistroExportacao´; Dm.tb1.Active:= True; Dm.Ds1.OnStateChange:= ControlaBotoes; { rotinas que setam os datafields de cada componente rotinas que carregam dados em componentes combobox!! } end;
[b:ec99a98c00]procedures dos botoes ...[/b:ec99a98c00]
procedure TFrmCadastroRE.botaonovoClick(Sender: TObject); begin dm.tb1.Append; dm.tb1.FieldByName(´dtRE´).AsDateTime:= Date; end; procedure TFrmCadastroRE.botaopostClick(Sender: TObject); begin Dm.tb1.Post; end; procedure TFrmCadastroRE.SpeedButton5Click(Sender: TObject); begin if not Dm.tb1.IsEmpty then Dm.tb1.Delete; end; procedure TFrmCadastroRE.SpeedButton2Click(Sender: TObject); begin dm.tb1.Edit; end;
procedure controlabotes que estou usando unica e exclusivamente para mostrar o modo em que a tabela esta
procedure TFrmCadastroRE.ControlaBotoes(Sender: TObject); var x: integer; begin if dm.tb1.State in [dsBrowse] then ShowMessage(´Browse´); if dm.tb1.State in [dsEdit] then ShowMessage(´Edit´); if dm.tb1.State in [dsInsert] then ShowMessage(´dsInsert´); if dm.tb1.State in [dsSetKey] then ShowMessage(´dsSetKey´); {Botaonovo.Enabled:= Dm.Ds1.State in [DsBrowse]; BotaoPost.Enabled:= Dm.Ds1.State in [DsEdit,DsInsert];} end;
no mais, estou usando ado com mysql e odbc!!
agora vejam as acoes que executo antes dar o erro
1 - executo o comando append - tabela em modo de insercao
2- preencho os dbedits
3 - executo o comando post - tabela em modo browse
4 - executo o comando edit - tabela em modo de edicao
5 - altero algum dado e cexecuto o comando post!!
6 - ERRROOOOOOOOOOOOOOOOOOOOOOOOOOOO!!!
se alguem puder me ajudar, agradeço muito
[]s
04/01/2006
Rômulo Barros
Nem se preocupe com os modos, pois tenho certeza de que sua query estáem modo de edição e o post está sendo aplicado corretamente, apenas o registro não está sendo localizado para atualização.
Se sua query não estivesse em edição, o delphi levantaria a exceção: [b:fb49971d75]DataSet Not In Insert or Edit Mode ( algo assim ) [/b:fb49971d75]
Boa Sorte !
04/01/2006
Fernando_cunha
nao deveria dar nenhum erro
ou deveria??
boas ferias!!
[]s
04/01/2006
Martins
vc está usando Query, Table, ADOQuery, ClientDataSet?
04/01/2006
Fernando_cunha
estou usando ADOTable ...
tenho 3 tabelas em um DataModule ...
eu mudo algumas propriedades em tempo de execucao para alternar as tabelas ... pq se fosse inserir um componente para cada tabela teria que inserir mais de 50 componentes ADOTable, essa pratica que utilizo é a mais indicada!??
alguem sabe o que é esse providerflags ??
[]s
05/01/2006
Fernando_cunha
[]s
Clique aqui para fazer login e interagir na Comunidade :)