Fórum Erro para alterar registro no BD #488841
14/08/2014
0
Estou com problema ao atualizar um registro me deparo com o seguinte erro:
Linha não pode ser localizada para a atualização. Alguns valores podem ter sido alterados desde que ela foi lida pela última vez".
Porém esse erro só ocorre quando tento atualizar vamos dizer um registro antigo pois quando acabo de inserir um registro no banco e logo na sequência tento alterar eu consigo com sucesso. Não sei o que fazer mais todas as chaves primárias e estrangeiras envolvidas estão devidamente criadas no banco. ME AJUDEM POR FAVOR
Estou utilizando Delphi 7 -> SqlServer2014 -> e o componente ADO Query
Sidnei Junior
Curtir tópico
+ 0Posts
14/08/2014
Valquiria Silva
Gostei + 0
14/08/2014
Sidnei Junior
Gostei + 0
14/08/2014
Sidnei Junior
select
conveniados.CONV_ID,
conveniados.TITULAR,
conveniados.LIBERADO,
conveniados.EMPRES_ID,
conveniados.GRUPO_CONV_EMP,
conveniados.CARGO,
conveniados.SETOR,
conveniados.COD_EMPRESA,
conveniados.DT_NASCIMENTO,
conveniados.CPF,
conveniados.RG,
conveniados.ENDERECO,
conveniados.NUMERO,
conveniados.BAIRRO,
conveniados.CIDADE,
conveniados.ESTADO,
conveniados.CEP,
conveniados.BANCO,
conveniados.AGENCIA,
conveniados.CONTACORRENTE,
conveniados.DIGITO_CONTA,
conveniados.TIPOPAGAMENTO,
conveniados.TELEFONE1,
conveniados.TELEFONE2,
conveniados.CELULAR,
conveniados.OBS1,
conveniados.OBS2,
conveniados.DTCADASTRO,
conveniados.OPERCADASTRO,
conveniados.DTALTERACAO,
conveniados.OPERADOR,
conveniados.DTULTCESTA,
conveniados.DTASSOCIACAO,
conveniados.EMAIL,
conveniados.LIMITE_MES,
conveniados.CONSUMO_MES,
conveniados.LIMITE_TOTAL,
conveniados.LIMITE_PROX_FECHAMENTO,
conveniados.CESTABASICA,
conveniados.SALARIO,
conveniados.FIDELIDADE,
conveniados.CONTRATO,
conveniados.TIPOSALARIO,
conveniados.FLAG,
conveniados.SENHA,
conveniados.DTAPAGADO,
conveniados.APAGADO,
conveniados.VALE_DESCONTO,
conveniados.LIBERA_GRUPOSPROD,
conveniados.COMPLEMENTO,
conveniados.USA_SALDO_DIF,
conveniados.ABONO_MES,
conveniados.SALDO_RENOVACAO,
conveniados.SALDO_ACUMULADO,
conveniados.DATA_ATUALIZACAO_ACUMULADO,
conveniados.CHAPA,
conv_detail.CONV_ID,
conv_detail.DATA_ADMISSAO,
conv_detail.DATA_DEMISSAO,
conv_detail.NUM_DEPENDENTES,
conv_detail.SALDO_DEVEDOR,
conv_detail.SALDO_DEVEDOR_FAT,
conv_detail.PIS,
conv_detail.NOME_PAI,
conv_detail.NOME_MAE,
conv_detail.CART_TRAB_NUM,
conv_detail.CART_TRAB_SERIE,
conv_detail.REGIME_TRAB,
conv_detail.VENC_TOTAL,
conv_detail.FIM_CONTRATO,
conv_detail.DISTRITO,
conv_detail.ESTADO_CIVIL,
empresas.FANTASIA,
empresas.BAND_ID,
empresas.nome empresa,
empresas.TIPO_CREDITO
from conveniados
left join conv_detail on conv_detail.conv_id = conveniados.conv_id
join empresas on empresas.empres_id = conveniados.empres_id and empresas.apagado <> 'S'
where conveniados.conv_id = 0
Gostei + 0
14/08/2014
Sidnei Junior
Gostei + 0
14/08/2014
Sidnei Junior
Gostei + 0
18/08/2014
Sidnei Junior
Gostei + 0
18/08/2014
Renato Rubinho
Achei estranhas essas cláusulas, pois você está dando left join pelo campo "conv_id", mas quer trazer apenas o que tiver "conv_id" = 0
from conveniados left join conv_detail on conv_detail.conv_id = conveniados.conv_id join empresas on empresas.empres_id = conveniados.empres_id and empresas.apagado <> 'S' where conveniados.conv_id = 0
Após a inclusão você não está alimentando este campo "conv_id", fazendo com que não se encaixe mais do critério da consulta ?
Como você fazer para gravar os dados no banco ?
Põe a procedure que está utilizando a gravação e refresh dos dados para podermos analisar melhor.
Abraççç,
Renato
Gostei + 0
18/08/2014
Marisiana Battistella
Poderia postar o código com o UPDATE que vc está fazendo?
Gostei + 0
18/08/2014
Sidnei Junior
var Item : String;
begin
if DBDateEdit2.Date = 0 then
QCadastroDATA_DEMISSAO.IsNull;
{Atribui a chave que o campo CONV_ID está recebendo para
o campo conv_detailCONV_ID}
QCadastroCONV_ID_1.Value := QCadastroCONV_ID.Value;
{Após a atribuição acima herda a função de cadastro da Unit FCad}
inherited;
if QConvDetail.State in [dsInsert,dsEdit] then
Self.TextStatus := ' Titular: ['+QCadastroCONV_ID.AsString+'] - '+QCadastroTITULAR.AsString+
' Empresa: ['+QCadastroEMPRES_ID.AsString+'] - '+QCadastroempresa.AsString;
end;
no inheirited herda de um formulário padrão dentro do nosso projeto o FCAD que por sua vez também possui a aba de cadastro e botão cadastrar. Segue o código do form herdado:
procedure TFCad.ButGravaClick(Sender: TObject);
begin
if QCadastro.State in [dsInsert,dsEdit] then
QCadastro.Post;
end;
Gostei + 0
18/08/2014
Marisiana Battistella
Veja se é mesmo caso que vc está tentando resolver...
E também encontrei um outro post em um fórum e a pessoa que conseguiu resolver postou a seguinte observação:
se na hora do post houver um outro registro na tabela cujo o valor do primeiro campo se repita da erro!
Para solucionar o problema na propriedade CursorLocation do ADOTable, ponha como clUseServer
Gostei + 0
18/08/2014
Sidnei Junior
Gostei + 0
18/08/2014
Marisiana Battistella
Qual é o UPDATE que vc utiliza? A passagem de parâmetros está correta?
Gostei + 0
18/08/2014
Renato Rubinho
Acho que isso não vai funcionar, pois nesse caso o objeto QCadastro está unidirecional, trazendo dados para a tela, mas não vai conseguir atualizar as tabelas do join.
Para utilizar o post, você precisa colocar um objeto para cada tabela, veja o TADOTable.
ou
Para a query que você já possui, utiliza uma nova para dar o update no banco.
Gostei + 0
18/08/2014
Sidnei Junior
Gostei + 0
18/08/2014
Renato Rubinho
Você vai ter que utilizar cada tabela em um objeto e gravar ambas ou, mantendo sua query única, utilizar outro objeto para dar INSERT / UPDATE no banco de dados passando os valores contidos na sua query.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)