Alterar registros com MySQL - DBExpress

Delphi

21/04/2010

Pessoal,   Tenho uma dúvida tremenda aqui no meu formulário de cadastro, onde utilizo delphi 2010 e Mysql 5.1. Eu consigo normalmente cadastrar os meus registros e ir colocando dentro do Banco de Dados, inclusive utilizando um código que peguei aqui no site da DevMedia, sobre o autoincremento do mysql.   Até ai tudo bem, o problema está sendo em editá-lo, pois quando eu faço as alterações e dou o ApllyUpdates, ele cria um novo ID para o campo e a partir daí, ele fica dando erro de key violation, não sei mais o que fazer, pois cadastrar novos registros está 100%, mais quando chega a parte de alteração não saiu do canto.   Eu sou iniciante e estou aprendendo utilizando o MySQL, pois já venho do PHP e tenho familiaridade com esse BD. Queria muito a ajuda de todos, de como eu faço pra alterar um registro, sem alterar o seu ID.   Fico no aguardo. Desde já, muito obrigado.
Francisco Sena

Francisco Sena

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

21/04/2010

Como está sendo feito o seu código sobre o auto-incremento?
GOSTEI 0
Francisco Sena

Francisco Sena

21/04/2010

Eu tou usando o auto-incremento do próprio SQL, usei o MySQL-Front para criar as tabelas e lá utilizei a opção auto-incremento.

Dentro do sistema eu utilizei uns códigos que peguei no curso de uma aplicação financeira qutilizando mysql e delphi 2009, que fala sobre esse ID MySQL, mas, ele tá funcionando normalmente, o problema está só acontecendo quando clico em EDITAR um registro, pois no lugar de manter o mesmo ID, ele gera um novo ID e depois daí, ele não deixa mais cadastrar novos registros, pois dá Key Violation.

Qualquer coisa, se precisar, posto os códigos que fazem o auto-incremente, mas, resaltando, que não é essa parte que está com problema, é NA PARTE DE EDIÇÃO DO REGISTRO.
GOSTEI 0
Wilson Junior

Wilson Junior

21/04/2010

O que você pode fazer é que quando não for INSERT, você não utilizar o auto-incremento. Assim ele não gera um novo ID.

Qualquer dúvida posta o código aí que tentamos lhe ajudar.
GOSTEI 0
Francisco Sena

Francisco Sena

21/04/2010

valeu Wilson,   Mais como eu faria isso ?? Eu sou novato no Delphi e tenho pouquíssima experiência nesse tipo de programação. Seria alterando algum componente, ou utilizar algum código ??   Agradeço desde já a sua ajuda.
GOSTEI 0
Wilson Junior

Wilson Junior

21/04/2010

Coloque o seu código aqui para poder lhe ajudar.
Pois não sei se você está gerando o ID diretamente no banco ou via código no Delphi. Coloque aqui para poder lhe ajudar.
GOSTEI 0
Francisco Sena

Francisco Sena

21/04/2010

esse código fica no Data Module: procedure TDM.DataModuleCreate(Sender: TObject);
var
  I: Integer;
begin
    for I := 0 to ComponentCount - 1 do
    if Components[I] is TClientDataSet then
    begin
        TClientDataSet(Components[I]).BeforePost := SetID;
    end; end;     function TDM.GetID(Table: String): Integer;
var
  SqlQuery : TSQLQuery;
begin
   SqlQuery := TSQLQuery.Create(Self);
   SqlQuery.SQLConnection := SQLCon;
   SqlQuery.SQL.Add('SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ' + QuotedStr(Table));    SqlQuery.Open;    Result := SqlQuery.Fields[0].Value;
end;     procedure TDM.SetID(DataSet: TDataSet);
begin
    DataSet.Fields[0].Value := GetID('tbl' + copy(DataSet.Name, 4));
end;     Conforme eu falei anteriormente, eu peguei esses códigos de um curso de aplicação financeira com delphi 2009 e mysql...   Por favor, me dá essa forcinha, só está faltando essa parte para cocnluir a minha parte dos registros...   Agradeço desde ja!
GOSTEI 0
Francisco Sena

Francisco Sena

21/04/2010

alguma novidade ?? será que tem como resolver ?
GOSTEI 0
Wilson Junior

Wilson Junior

21/04/2010

procedure TDM.SetID(DataSet: TDataSet);
begin
  if  TClientDataSet(DataSet).State = dsInsert then
      DataSet.Fields[0].Value := GetID('tbl' + copy(DataSet.Name, 4))
  ;
end;


Espero ter colaborado.
GOSTEI 0
POSTAR