Ir para conteúdo
Fórum Script Brasil
  • 0

Erro: Linha não localizada para Atualização


wilsonrosa

Pergunta

Pessoal,

Iniciei o desenvolvimento de um sistema que terá 11 tabelas no SQLServer2000. Criei todas as tabelas e linkei cada campo do delphi com seu respectivo campo na tabela.

A tabela form é a principal e as demais podem são tabelas "A, B, C, D, F, G, H, I, J, K".

Todas as tabelas tem o mesmo nome de campo como chave primária "codrel".

Ao gravar um registro novo entro com dados e os mesmos são distribuídos nas tabelas, até ai beleza. Porém, para editar, entendo q o ponteiro de cada tabela deva estar no registro q eu quero ou seja se eu estou sobre o codrel da tabela principal form de nº 1000, todas as demais tabelas precisam estar tb no registro de nº 1000, para mudar somente o registro nº 1000.

Mas acredito q deva estar ocorrendo algum erro e o ponteiro de registro de alguma tabela esteja se perdendo e ai vem o erro abaixo:

Erro: Row cannot be located for updating. Some values may have been changed since it was las read.

Como posso resolver esse problema, pois o erro sempre ocorre na edição de um dado, de forma aleatória, porque as vezes consigo editar e gravar sem dar o erro e tal erro sempre ocorre sobre a linha da tabela principal dm.form.post;

Caso necessitem de mais informações me avisem.

Agradeço desde já a atenção

WillRos

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Erro: Linha não pode ser localizada para atualizar. Alguns valores podem ter sido mudados desde a ultima leitura.

se em alguma tabela não existir o registro ( seguindo o seu exemplo ) de nº 1000 é esse o erro que vai ocorrer

abraço

Mas verifiquei todas as tabelas no banco e todas tem o registro de nº 1000.

Alguma sugestão ?

No Aguardo

Agradeço

WillRos

Link para o comentário
Compartilhar em outros sites

  • 0
Erro: Linha não pode ser localizada para atualizar. Alguns valores podem ter sido mudados desde a ultima leitura.

se em alguma tabela não existir o registro ( seguindo o seu exemplo ) de nº 1000 é esse o erro que vai ocorrer

abraço

Jhonas,

Acredito ter resolvido o problema da seguinte forma: Em cada tabela envolvida mudei a propriedade CursorLocation para clUseServer e o problema não mais ocorreu.

você saberia me dizer se isso pode influnciar em alguma outra coisa, qualquer coisa, acesso pelo usuário (gravação ou alteração) por exemplo ?

Agradeço a atenção

WillRos

Link para o comentário
Compartilhar em outros sites

  • 0
você saberia me dizer se isso pode influnciar em alguma outra coisa, qualquer coisa, acesso pelo usuário (gravação ou alteração) por exemplo ?
TCustomADODataSet.CursorLocation

Especifica se o cursor para a conexão é client-side ou server-side.

propriedade CursorLocation: TCursorLocation;

Descrição

Use CursorLocation para indicar se os cursores que usam o objeto de conexão para conectar ao datastore do ADO usam um client-side ou de cursor server-side. CursorLocation só afeta conexões abertas depois que a propriedade for fixa ( escolhida ). O padrão para CursorLocation é clUserClient ( client-side ).

Um cursor client-side oferece mais flexibilidade. Todo os dados são retornados à máquina local e então operados lá, enquanto normalmente não permitindo operações não normalmente apoiado por servidores como ordenando e recorrendo os dados e adicionando filtros. São executadas declarações de SQL no servidor, assim para declarações que restringem o resultado fixadas com um cláusula WHERE, somente o resultado reduzido é retornado a um cursor local.

Um cursor server-side oferece menos flexibilidade, mas pode ser mais vantajoso (ou necessário) para resultados grandes. Usar um cursor server-side fica necessário quando o tamanho completo de um resultado exceder o espaço de disco disponível, que seria preciso criar o cursor server-side. Também, muitos servidores só apóiam cursores de unidirecional. Isto impediria mudança para trás do ponteiro de registro no dataset (até mesmo um registro) pelo resultado.

OBS: como voce pode perceber usar server-side (clUserServer) só e vantajoso se for necessario retornar num grande numero de registros da sua SQL e não for necessario retornar o ponteiro do registro

então no seu caso seria melhor utilizar o clUserClient e não o clUserServer. A influencia seria apenas na velocidade de retorno de suas consultas

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
você saberia me dizer se isso pode influnciar em alguma outra coisa, qualquer coisa, acesso pelo usuário (gravação ou alteração) por exemplo ?
TCustomADODataSet.CursorLocation

Especifica se o cursor para a conexão é client-side ou server-side.

propriedade CursorLocation: TCursorLocation;

Descrição

Use CursorLocation para indicar se os cursores que usam o objeto de conexão para conectar ao datastore do ADO usam um client-side ou de cursor server-side. CursorLocation só afeta conexões abertas depois que a propriedade for fixa ( escolhida ). O padrão para CursorLocation é clUserClient ( client-side ).

Um cursor client-side oferece mais flexibilidade. Todo os dados são retornados à máquina local e então operados lá, enquanto normalmente não permitindo operações não normalmente apoiado por servidores como ordenando e recorrendo os dados e adicionando filtros. São executadas declarações de SQL no servidor, assim para declarações que restringem o resultado fixadas com um cláusula WHERE, somente o resultado reduzido é retornado a um cursor local.

Um cursor server-side oferece menos flexibilidade, mas pode ser mais vantajoso (ou necessário) para resultados grandes. Usar um cursor server-side fica necessário quando o tamanho completo de um resultado exceder o espaço de disco disponível, que seria preciso criar o cursor server-side. Também, muitos servidores só apóiam cursores de unidirecional. Isto impediria mudança para trás do ponteiro de registro no dataset (até mesmo um registro) pelo resultado.

OBS: como voce pode perceber usar server-side (clUserServer) só e vantajoso se for necessario retornar num grande numero de registros da sua SQL e não for necessario retornar o ponteiro do registro

então no seu caso seria melhor utilizar o clUserClient e não o clUserServer. A influencia seria apenas na velocidade de retorno de suas consultas

abraço

Bom Dia!!!

Entendo o q me disse, mas o problema volta a aparecer quando coloco clUserClient. Em todas as tabelas não há erro nenhum na gravação de qualquer registro, ou seja todas as tabelas possuem todos os registros gravados, mas o erro acontece quando clico no botão editar.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Erro: Linha não pode ser localizada para atualizar. Alguns valores podem ter sido mudados desde a ultima leitura.

mas o erro acontece quando clico no botão editar. voce não postou o código .. dificil ajudar

pesquise o erro usando o debugger do delphi ... caso contrario reveja toda a estrutura de suas tabelas

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Erro: Linha não pode ser localizada para atualizar. Alguns valores podem ter sido mudados desde a ultima leitura.

mas o erro acontece quando clico no botão editar. voce não postou o código .. dificil ajudar

pesquise o erro usando o debugger do delphi ... caso contrario reveja toda a estrutura de suas tabelas

abraço

O botão editar só tem o nome da Adoquery.edit; mais nada, só q abro 10 tabelas e edito as 10 ao mesmo tempo. O erro ocorre quando passa pelo botão gravar onde tenho as tabelas as Adoquery.post;

Só isso, por isso não postei.

Obrigado mesmo assim.

WillRos

Link para o comentário
Compartilhar em outros sites

  • 0

Exemplo:

vamos abrir 4 tabelas:

ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select CODIGO from PRODUTOS_A where CODIGO = 1234');
    ADOQuery1.Active:=True;
    ADOQuery1.Open;

    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('select CODIGO from PRODUTOS_B where CODIGO = 1234');
    ADOQuery2.Active:=True;
    ADOQuery2.Open;

    ADOQuery3.Close;
    ADOQuery3.SQL.Clear;
    ADOQuery3.SQL.Add('select CODIGO from PRODUTOS_C where CODIGO = 1234');
    ADOQuery3.Active:=True;
    ADOQuery3.Open;

    ADOQuery4.Close;
    ADOQuery4.SQL.Clear;
    ADOQuery4.SQL.Add('select CODIGO from PRODUTOS_D where CODIGO = 1234');
    ADOQuery4.Active:=True;
    ADOQuery4.Open;
agora vamos editar o registro de cada uma delas ( isso pode estar em um botão )
ADOQuery1.Edit;
    ADOQuery2.Edit;
    ADOQuery3.Edit;
    ADOQuery4.Edit;
depois de editado os registros, vamos salvar as alterações
ADOQuery1.Post;
    ADOQuery2.Post;
    ADOQuery3.Post;
    ADOQuery4.Post;
ADOQuery1.ApplayUpdates(-1);
    ADOQuery2.ApplayUpdates(-1);
    ADOQuery3.ApplayUpdates(-1);
    ADOQuery4.ApplayUpdates(-1);

a sequencia seria essa ... todas as tabelas estariam apontando para o mesmo codigo em cada uma das tabelas

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Exemplo:

vamos abrir 4 tabelas:

ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select CODIGO from PRODUTOS_A where CODIGO = 1234');
    ADOQuery1.Active:=True;
    ADOQuery1.Open;

    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('select CODIGO from PRODUTOS_B where CODIGO = 1234');
    ADOQuery2.Active:=True;
    ADOQuery2.Open;

    ADOQuery3.Close;
    ADOQuery3.SQL.Clear;
    ADOQuery3.SQL.Add('select CODIGO from PRODUTOS_C where CODIGO = 1234');
    ADOQuery3.Active:=True;
    ADOQuery3.Open;

    ADOQuery4.Close;
    ADOQuery4.SQL.Clear;
    ADOQuery4.SQL.Add('select CODIGO from PRODUTOS_D where CODIGO = 1234');
    ADOQuery4.Active:=True;
    ADOQuery4.Open;
agora vamos editar o registro de cada uma delas ( isso pode estar em um botão )
ADOQuery1.Edit;
    ADOQuery2.Edit;
    ADOQuery3.Edit;
    ADOQuery4.Edit;
depois de editado os registros, vamos salvar as alterações
ADOQuery1.Post;
    ADOQuery2.Post;
    ADOQuery3.Post;
    ADOQuery4.Post;
ADOQuery1.ApplayUpdates(-1);
    ADOQuery2.ApplayUpdates(-1);
    ADOQuery3.ApplayUpdates(-1);
    ADOQuery4.ApplayUpdates(-1);

a sequencia seria essa ... todas as tabelas estariam apontando para o mesmo codigo em cada uma das tabelas

abraço

Valeu jhonas, vou testar e posto os resultados.

Obrigado

WillRos

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...