DATABASE.Prior travando

Delphi

09/09/2011

Pessoal, bom dia! Estou usando o PocketStudio 2.1 Professional. Estou tendo o seguinte problema: Quando abro o form de Entrevistados com a chamada abaixo:
procedure btnEntrevistadosSelect;
begin
  FrmGotoForm(formCadEntrevistados);
end;
No Open do form esta assim:
procedure formCadEntrevistadosOpen;
begin
  PSForm.Draw;
  CarregaDados;
  PSForm.SetFocus(FieldID);
end;
O código da procedure CarregaDados é este:
procedure CarregaDados;
Var
Buffer: Array[0..9-1]of Char;
begin
//Se não tiver nenhum registro na tabela nada será feito
if PsDataBase.RecordCount(DBEntrevistadosTipo) = 0 then
exit;
StrIToA(Buffer, PsDataBase.FieldUInt16(DBEntrevistadosTipo,Entrevistado_ID));
PsField.Settext(FieldId, Buffer);

PsField.SetText(FieldNome, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_NOME));
PsField.SetText(FieldIdade, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_IDADE));
PsField.SetText(FieldSexo, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_SEXO));
PsField.SetText(FieldProfissao, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_PROFISSAO));
PsField.SetText(FieldCidade, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_CIDADE));
PsField.SetText(FieldEstado, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_ESTADO));
PsField.SetText(FieldEndereco, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_ENDERECO));
PsField.SetText(FieldBairro, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_BAIRRO));

end;
Bom. O que esta acontecendo de errado é o seguinte: Quando a tabela ainda esta vazia, e se abre o form de entrevistados pela primeira vez. Quando se clika nos botões Primeiro, Anterior, Proximo e Último. Eles funcionam normal (Não exibem nada cadastrado é claro, e não dá erro na navegação). Mas, quando se chama um novo registro clickando no botão novo cujo código é esse:
procedure btnNovoSelect;
begin
 // create a new record
  if not PSDatabase.Append(DBEntrevistadosTipo) then
    FrmCustomAlert(AlertError, 'Erro', '', '')
  else
  begin
    DBEntrevistadosInclui:= True;
    Limpar;
    PSForm.SetFocus(FieldId);
  end
end;
Daí em diante. você pode editar o registro inserido normal. Pode inserir outro. Pode até navegar entre os botões. Porém, um erro acontece: Quando você vai clickando no botão Anterior ou no Próximo (Obs.: Nos botões Primeiro e Ultimo o erro não ocorre), quando chega no primeiro ou no último registros e você clika novamente no botão, daí ocorre o erro abaixo:
Enquetes[1.0] just read from memory location 0x00000000, which is in lkow memory.

"Low memory" is defined as he first 256 bites of memory. it should not be directly accessed by applictions under any circunstances.
Como corrigir esse erro? Esse é o código dos Botões:
procedure btnIPrimeiroSelect;
begin
  PsDataBase.First(DBEntrevistadosTipo);
  CarregaDados;
  PSForm.SetFocus(FieldID);
end;
procedure btnAnteriorSelect;
begin
   PsDataBase.Prior(DBEntrevistadosTipo);
   CarregaDados;
   PSForm.SetFocus(FieldID);
end;
procedure btnProximoSelect;
begin
   PsDataBase.Next(DBEntrevistadosTipo);
   CarregaDados;
   PSForm.SetFocus(FieldID);
end;
procedure btnUltimoSelect;
begin
   PsDataBase.Last(DBEntrevistadosTipo);
   CarregaDados;
   PSForm.SetFocus(FieldID);
end;
Grato a quem puder ajudar.
Carlos Rocha

Carlos Rocha

Curtidas 0

Respostas

Carlos Rocha

Carlos Rocha

09/09/2011

Pessoal, bom dia! Estou usando o PocketStudio 2.1 Professional. Estou tendo o seguinte problema: Quando abro o form de Entrevistados com a chamada abaixo:
procedure btnEntrevistadosSelect;
begin
  FrmGotoForm(formCadEntrevistados);
end;
No Open do form esta assim:
procedure formCadEntrevistadosOpen;
begin
  PSForm.Draw;
  CarregaDados;
  PSForm.SetFocus(FieldID);
end;
O código da procedure CarregaDados é este:
procedure CarregaDados;
Var
Buffer: Array[0..9-1]of Char;
begin
//Se não tiver nenhum registro na tabela nada será feito
if PsDataBase.RecordCount(DBEntrevistadosTipo) = 0 then
exit;
StrIToA(Buffer, PsDataBase.FieldUInt16(DBEntrevistadosTipo,Entrevistado_ID));
PsField.Settext(FieldId, Buffer);
 
PsField.SetText(FieldNome, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_NOME));
PsField.SetText(FieldIdade, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_IDADE));
PsField.SetText(FieldSexo, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_SEXO));
PsField.SetText(FieldProfissao, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_PROFISSAO));
PsField.SetText(FieldCidade, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_CIDADE));
PsField.SetText(FieldEstado, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_ESTADO));
PsField.SetText(FieldEndereco, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_ENDERECO));
PsField.SetText(FieldBairro, PsDataBase.FieldStringPtr(DBEntrevistadosTipo, Entrevistado_BAIRRO));
 
end;
Bom. O que esta acontecendo de errado é o seguinte: Quando a tabela ainda esta vazia, e se abre o form de entrevistados pela primeira vez. Quando se clika nos botões Primeiro, Anterior, Proximo e Último. Eles funcionam normal (Não exibem nada cadastrado é claro, e não dá erro na navegação). Mas, quando se chama um novo registro clickando no botão novo cujo código é esse:
procedure btnNovoSelect;
begin
 // create a new record
  if not PSDatabase.Append(DBEntrevistadosTipo) then
    FrmCustomAlert(AlertError, 'Erro', '', '')
  else
  begin
    DBEntrevistadosInclui:= True;
    Limpar;
    PSForm.SetFocus(FieldId);
  end
end;
Daí em diante. você pode editar o registro inserido normal. Pode inserir outro. Pode até navegar entre os botões. Porém, um erro acontece: Quando você vai clickando no botão Anterior ou no Próximo (Obs.: Nos botões Primeiro e Ultimo o erro não ocorre), quando chega no primeiro ou no último registros e você clika novamente no botão, daí ocorre o erro abaixo:
Enquetes[1.0] just read from memory location 0x00000000, which is in lkow memory.
 
"Low memory" is defined as he first 256 bites of memory. it should not be directly accessed by applictions under any circunstances.
Como corrigir esse erro? Esse é o código dos Botões:
procedure btnIPrimeiroSelect;
begin
  PsDataBase.First(DBEntrevistadosTipo);
  CarregaDados;
  PSForm.SetFocus(FieldID);
end;
procedure btnAnteriorSelect;
begin
   PsDataBase.Prior(DBEntrevistadosTipo);
   CarregaDados;
   PSForm.SetFocus(FieldID);
end;
procedure btnProximoSelect;
begin
   PsDataBase.Next(DBEntrevistadosTipo);
   CarregaDados;
   PSForm.SetFocus(FieldID);
end;
procedure btnUltimoSelect;
begin
   PsDataBase.Last(DBEntrevistadosTipo);
   CarregaDados;
   PSForm.SetFocus(FieldID);
end;
Grato a quem puder ajudar.  
GOSTEI 0
POSTAR