record not found or changed by another user
Estou tendo esse problema para atualizar uma tabela mysql.
Usando DBX, preciso atualizar os dados de uma tabela principal em FB para uma tabela secundaria em mysql repassando os campos, porem no momento de dar um applyupdate, retorna esse erro, percebi que isso acontece se todos os campos do registro em questao estiverem iguais nas 2 tabelas, mas faço isso tb em outras tabelas de produtos por exemplo, as flags do SQLDataset estao configuradas, o datasetprovider tb esta configurado para whereonlykey, mas nao vai, nao sei mais o que fazer.
Alguem tem uma luz ?
Abs
Felipe Ip
Curtidas 0
Respostas
Marco Salles
06/08/2010
como esta sua configuração dos providers Flags ???
e pq o DataSetProvider esta para whereOnlyKey ???
GOSTEI 0
Felipe Ip
06/08/2010
TSQLDataset:
campo chave:
update = true
where = true
key = true
demais campos:
update = true
where = false
key = false
TDataSetProvider
UpdateMode = wherekeyonly
TClientDataset
igual ao TSQLDataset
Abs
GOSTEI 0
Eriley Barbosa
06/08/2010
Primeiro me explica uma coisa tua chave primária é gerada por um generator? Pq se não, tem que ter chave mesmo antes de dar o post;
Exclua os componentes e vamos do ZERO:
DatasetProvider, mude a propriedade UPDATEMODE para upWhereKeyOnly
SQLDataset, faça o SQL e adicione os campos. Selecione o campo Chave e mude a propriedade PROVIDERFLAGS, deixe true para UPDATE, WHERE e KEY...agora os demais campos tu vai apenas deixar o UPDATE, deixando o where FALSE (para os campos externos deixar tudo FALSE, são aqueles que vem pelo LEFT join ).
Agora inclua os campos no clientdataset e realize a mesma configuração que fez no SQLDataset.
Faça o mesmo teste que gerou os erros.
Atenciosamente
Eriley
Exclua os componentes e vamos do ZERO:
DatasetProvider, mude a propriedade UPDATEMODE para upWhereKeyOnly
SQLDataset, faça o SQL e adicione os campos. Selecione o campo Chave e mude a propriedade PROVIDERFLAGS, deixe true para UPDATE, WHERE e KEY...agora os demais campos tu vai apenas deixar o UPDATE, deixando o where FALSE (para os campos externos deixar tudo FALSE, são aqueles que vem pelo LEFT join ).
Agora inclua os campos no clientdataset e realize a mesma configuração que fez no SQLDataset.
Faça o mesmo teste que gerou os erros.
Atenciosamente
Eriley
GOSTEI 0
Felipe Ip
06/08/2010
Eriley, obrigado pela mensagem, mas fiz isso varias vezes, exatamente como vc descreveu.
Quanto a chave primaria, veja o que estou fazendo:
Tenho uma tabela de clientes, em FB. (chave primaria gerada por uma funcao que procura o ultimo codigo)
Tenho uma tabela com a mesma estrutura, em MYSQL.
Quando é feito alteracao em algum cadastro ou inserido um novo cliente sempre sera feito na tabela FB.
Entao preciso atualizar a tabela em MYSQL. Para isso pesquiso os cadastros alterados ou novos, atraves de um TSQLDataset, depois faço um laço nele e vou pesquisando no MYSQL, se encontrar o codigo, altero (Edit) e depois Post e applyupdate, vou para o proximo registro do TSQLDataset e assim por diante.
Abs
Obrigado
GOSTEI 0
Felipe Ip
06/08/2010
Esqueci de mencionar, faço a mesma coisa em uma tabela de produtos e esse maldito erro, nunca ocorreu.
Abs
GOSTEI 0
Eriley Barbosa
06/08/2010
Teria como postar o DFM do form onde tem os componentes que gravam no FB e no MySQL.
Atenciosamente
Eriley
GOSTEI 0
Felipe Ip
06/08/2010
Depois de alguns testes percebi o seguinte:
Caso envie um registro identico (sem nenhuma alteracao) pro outro banco, o erro ocorre, caso eu faça qualquer alteracao em qualquer campo, o erro NAO acontece.
Entao se ele vai passar os dados sem alteracao, quer dizer todos os campos tem os mesmos dados, o erro ACONTECE.
Obrigado
GOSTEI 0
Felipe Ip
06/08/2010
Resolvido, um campo timestamp no firebird os dados estavam null e no banco mysql o padrao esta 00/00/00 00.00.00, passei a nao enviar mais esse campo, ou preencher ele com valor e o erro sumiu, claro q usando os providers flags dos campos.
Obrigado a todos
GOSTEI 0