Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro Ao Salvar Dados...


robinhocne

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0
Qual banco você usa?

Qual componente para conexão?

E como esta salvando o registro?

Abraços

Alexandre

Eu uso Firebird 2.0.3

Para conexão, IBQuery, IBDataBase e um IBTransaction.

Bom eu acrescentei um Chekbox em meu projeto para que o usuario queira colocar a observação que ele queira deixar em alerta tipo assim ai aparecerá uma mensagem na aba principal do cadastro de alunos informando que tem uma observação em alerta.

Então vou passar os ultimos codigos que está o ChekBox, pois é sobre isso que está dando erro.

No banco de dados da tabela de alunos eu coloquei o Alerta como Numeric (1,0), para ele checar se for 1 ele ficar aparecendo zero caso contrario não!

Onde está dando o erro é no ChekObs, verificam para min se eu faço a checagem assim?

begin
   with vcpo do
      begin
         clear;
         add ('dtcadastro');
         add ('servicos');

....

         add ('observacoes');
         add ('CnhEntregue');
         If (EData ( TxtDtEnt.Text ) ) Then add ('DtEntregue');
         add ('Registro');
         Add ('Cedula');
         If (EData ( TxtVen.Text ) ) Then add ('Venc_Cnh');
         add ('Cat');
         Add ('Alerta');
      end;
   with vvlr do
      begin
     clear;
         Add ('Current_Date');
         if (rdbhab.checked) then
         add ('1')
         else if (rdbalt.checked) then
         add('2')
         else if (rdbren.checked) then
         add ('3');
....

         add (#39 + txtla.Text + #39);
         add (#39 + memobs.Text + #39);
         If RdbEnt.Checked Then
         Add ('1');
         If  ( EData (TxtDtEnt.Text) ) then
         Add (#39 + Formatdatetime ('mm/dd/yyyy', StrtoDate (TxtDtEnt.Text)) + #39);
         Add (#39 + TxtReg.Text + #39);
         Add (#39 + TxtCed.Text + #39);
         If  ( EData (TxtVen.Text) ) then
         Add (#39 + Formatdatetime ('mm/dd/yyyy', StrtoDate (TxtVen.Text)) + #39);
         Add (#39 + TxtCate.Text + #39);
         If ChekObs.Checked Then
         Add ('1');
     end;

     If (Editar) Then
     begin
        AlterarRegistro ('alunos', vCpo, vVlr, 'codigo =' + txtmat.Text)
     end
     else
     begin
        IncluirRegistro('alunos', vCpo, vVlr);
        imprimeFicha();
     end;
     Inherited;

End;

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

  • 0

Estava testando o programa e observei que se eu não selecionar o radiobutton e o check box ele não salva ai ele dá p erro.

Esse é os dados do RadioButton que é salvo:

If RdbEnt.Checked Then

Add ('1')

else If

RdbEnt.Checked Then

Add ('0');

e o chekbox

If ChekObs.Checked Then

Add ('1')

else If

ChekObs.Checked Then

Add ('0');

Porque esse erro?

Link para o comentário
Compartilhar em outros sites

  • 0
Está dando esse erro no meu projeto, na hora de eu salvar os dados, alguém sabe o que é esse erro e porque está acontecendo?

List Index out of Bounds (36)
robinhocne, sempre que você lidar com listas (como TStringList, p.e.) ou vetores e você tentar acessar uma posição da lista que não exista você receberá uma mensagem deste tipo e que significa que você tentou acessar uma posição (Index) fora do domínio (out of bounds) da lista (list).

Já "escolado" com este método que você está utilizando para gravar os dados, e vendo o código postado, eu arriscaria dizer que você está esquecendo de adicionar valores a sua lista de valores (vvlr).

Levando em consideração que justamente no procedimento AlterarRegistro (ref. post) você faz uso de um único indexador (baseado em vcpo) e acessa as duas listas (vcpo e vvlr), e que geraria este erro caso sua lista de campos fosse maior que a de valores. ;)

Imagino que você esteja adicionando a sua lista vcpo os campos associados aos ChekObs e RdbEnt, mas é possível observar no código a adição de valor em apenas uma condição (true), o que significa que em outra (false) não há adição à lista. Veja o comentário num trecho do seu código:

...
  If RdbEnt.Checked Then   // <========= apenas se checked
    Add ('1');
  If  ( EData (TxtDtEnt.Text) ) then
    Add (#39 + Formatdatetime ('mm/dd/yyyy', StrtoDate (TxtDtEnt.Text)) + #39);
  Add (#39 + TxtReg.Text + #39);
  Add (#39 + TxtCed.Text + #39);
  If  ( EData (TxtVen.Text) ) then
    Add (#39 + Formatdatetime ('mm/dd/yyyy', StrtoDate (TxtVen.Text)) + #39);
  Add (#39 + TxtCate.Text + #39);
  If ChekObs.Checked Then   // <========= apenas se checked
     Add ('1');
...
e quando a opção for falsa? supondo esta lógica em seu último post:
If RdbEnt.Checked Then
  Add ('1')
else If RdbEnt.Checked Then
  Add ('0');
isto não está "soando" meio estranho não?!
se RdbEnt marcado então
  adiciona 1
senão se RdbEnt marcado então
  adiciona 0
e quando RdbEnt NÃO estiver marcado??? O lógico seria:
If RdbEnt.Checked Then
  Add ('1')
else
  Add ('0');

já que Checked só pode ser True ou False, logo, if true then, do contrário, else (false)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

No Radio Button ele não está dando problemas, mas se eu tiro os dados do CheckBox ele funciona normal, mas se eu deixo ele com esses codigo:

If ChekObs.Checked Then
         Add ('1')
         else If
         ChekObs.Checked Then
         Add ('0');

Link para o comentário
Compartilhar em outros sites

  • 0
No Radio Button ele não está dando problemas, mas se eu tiro os dados do CheckBox ele funciona normal, mas se eu deixo ele com esses codigo:

If ChekObs.Checked Then
         Add ('1')
         else If
         ChekObs.Checked Then
         Add ('0');
Ok Resolvido: Muito Simples e não prestado a atenção:
If RdbEnt.Checked Then
  Add ('1')
else
  Add ('0');

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...