Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
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);DataSource1.DataSet.Next;
DataSource1StateChange(self);
end;
procedure TForm1.SpeedButton15Click(Sender: TObject);DataSource1.DataSet.First;
DataSource1StateChange(self);
end;
procedure TForm1.SpeedButton16Click(Sender: TObject);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;
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