Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AndréAraujo

Erro na ordem do id na hora de inserir um novo dado na tabela

Recommended Posts

Olá pessoal, estou com dois pequenos problemas na minha tabela.

 

1° erro - O ultimo dado que foi inserido na tabela fica a frente dos novos dados que são inseridos.

 

Lembrando que meu id é AUTO-INCREMENT.

 

Ex: Se eu já tenho 5 dados e insiro mais um, o id dos dados vão ficar nessa ordem ( 1, 2, 3, 4, *6*, 5 ).

Ao apertar o botão "Refresh" o id se normaliza ficando na ordem correta ( 1, 2, 3, 4, 5, 6 ).

 

2° erro - Ao inserir um novo dado os botões de navegação se invertem.

 

Ex: Prior; se transforma em próximo, Next; se transforma em anterior,

 

First; se transforma em ultimo e Last; se transforma em primeiro. Ao apertar o botão "Refresh" os botões de navegação se normalizam ficando na ordem correta.

 

 

Não usei "DataSource1StateChange(self);" nos botões de navegação pois o Delphi me retorna este erro:

 

[DCC Error] Unit1.pas(385): E2003 Undeclared identifier: 'DataSource1StateChange'

 

Seria correto usar no botão salvar os dois comandos?

 

DataSource1.DataSet.Post;
DataSource1.DataSet.Refresh;
Agradeço a atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que não fica claro... esse erro de inserir ocorre por insersões sequenciais na sua máquina ou por inserts concorrentes em rede? Se for em rede, realmente o Refresh se faz necessário após inserts/updates/deletes, pois a visualização dos dados pode apresentar estas distorções por ter ocorrido entradas de alterações simultâneas nas informações... quanto a questão dos botões, nunca vi situação semelhante ocorrendo, mas parei a muito tempo de manipular dados usando inserts diretos via ClientDataSet (prefiro usar inserts via SQL dinâmica ou chamar uma stored procedure).

 

Quanto a este comando....

 

 

DataSource1StateChange

 

Até onde vi, ele não é um comando, é um evento do DataSource que você tem que programar no DataSource desejado (selecionando o datasource -> object inspector -> events -> OnStateChange). Como não costumo usá-lo, fiz uma pesquisa rápida e achei este link: http://www.devmedia.com.br/controlando-o-estado-dos-botoes/2107

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste momento apenas um insert (manual ou automático por vez) em minha máquina e futuramente terá mais de um sistema rodando, cada um terá um insert (manual ou automático por vez) que por dividirem o mesmo banco de dados poderão ser simultâneos frequentemente.

 

Chrnos Obrigado pela força, Me ajudou muito!

 

Olha o erro, eu estava adicionado no evento errado "OnDataChange".

SpeedButton9.Enabled:=not DataSource1.DataSet.Bof;
SpeedButton10.Enabled:=not DataSource1.DataSet.Eof;
SpeedButton11.Enabled:=DataSource1.State in [dsBrowse];
SpeedButton12.Enabled:=DataSource1.State in [dsEdit,dsInsert];
SpeedButton13.Enabled:=DataSource1.State in [dsEdit,dsInsert];
SpeedButton14.Enabled:=DataSource1.State in [dsBrowse];
SpeedButton15.Enabled:=not DataSource1.DataSet.Bof;
SpeedButton16.Enabled:=not DataSource1.DataSet.Eof;
SpeedButton19.Enabled:=not DataSource1.DataSet.Bof;

 

por isso que aparecia aquele erro na ordem dos botões e também não aceitava o

DataSource1StateChange(self);
Agora eu mudei para o evento que você sitou e adicionei o "DataSource1StateChange(self);"
nos botões:

 

procedure TForm1.SpeedButton9Click(Sender: TObject);
begin
DataSource1.DataSet.Prior;
DataSource1StateChange(self);
end;
procedure TForm1.SpeedButton10Click(Sender: TObject);
begin
DataSource1.DataSet.Next;
DataSource1StateChange(self);
end;
procedure TForm1.SpeedButton15Click(Sender: TObject);
begin
DataSource1.DataSet.First;
DataSource1StateChange(self);
end;
procedure TForm1.SpeedButton16Click(Sender: TObject);
begin
DataSource1.DataSet.Last;
DataSource1StateChange(self);
end;
Quanto a ordem dos id na hora que é salvo um novo dado mantive o:
procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
DataSource1.DataSet.Post;
DataSource1.DataSet.Refresh;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.