–5 votos
112 visitas
Durante o Insert chamado por um objeto de tabela (ex: prestadores.insert), o método doAssumir é executado e deveria preencher os valores padrões dos campos de uma determinada tabela.

Porém isso não está acontecendo e valores de campos Lógicos e do tipo radio estão vindo sempre nulos.

 

O que pode estar acontecendo e o que posso fazer para corrigir o problema?

Runner versão: 13.1.8.1
fechada com o comentário: Direcionado para tratar o problema via email.
por (31 pontos)
fechada por | 112 visitas
Olá Gilmar. Poderia dar um exemplo real do código de como está procedendo para fazer o DoAssumir?

Exemplo de DoAssumir na Wiki: http://wiki.benner.com.br/wiki/index.php?title=BSistema.DoAssumir

1 Resposta

–2 votos

Olá Rafael.

Esse problema está acontecendo no Delphi. 

O Código utiliza um objeto "Prestador" da classe USamPrestador. Segue a forma que o objeto é inicializado.

Prestador := TSamPrestador.Create(sys,nil);

 

Na hora que é necessário criar um registro, o procedimento utilizado é chamar o método insert desse objeto.

Prestador.insert.

 

Esse método Insert foi escrito da seguinte maneira (Classe UTabela).

procedure TTabela.Insert;
begin
  if (not query.Active) then
    Abrir(-1);

  if Query.Active and (Query.State in [dsBrowse]) then
  begin
    Query.Insert;
    Campo['HANDLE'].AsInteger := Sys.NewHandle(Tabela);
    try
      sys.doAssumir(integer(pointer(Query)), Self.Tabela);
    except
    end;
  end;
end;

 

Na teoria esse trecho "sys.doAssumir(integer(pointer(Query)), Self.Tabela);" iria varrer todas os campos do registro recém-criado, colocando o valor padrão de todos os campos configurados no builder, porém isso não está acontecendo mais, fazendo com que o programador precise declarar o valor de cada um desses campos manualmente no código.

Exs:

          Prestador.Cassipfparapj                 := false;
          Prestador.Certificadofatelet            := false;

 

Eu encontrei na wiki algo semelhante que explica a função doAssumir para o Delphi.

http://wiki.benner.com.br/wiki/index.php?title=Objeto_de_baixa_de_parcelas_(Corporativo)

 

"Quando o procedimento é executado, o TDContainerDB recebe um Insert, é executado o DoAssumir e é atribuído 0(zero) para os campos VALOR."

Apesar de estar especificando campos VALOR, esse método funcionava para demais tipos de campos, como Booleano e Radio, só que não funciona mais (pelo menos para esse caso).

por (31 pontos)
editado por
Gilmar.
Nesse código tem um try except "mudo" que poderia estar escondendo uma exceção ocorrida no momento do doAssumir. Remova o try except ou registre algo caso ocorra exceção. Me informe o resultado.
Tirei o try exception e apareceu o seguinte erro ao criar o registro

10:59:18: Out Application.OnError
10:59:18: In  Application.OnError
10:59:18: [uErrMsg] Error : "Falha catastrófica"
10:59:18: TMemoryFields.IndexOfName: Tabela de índice 0 não encontrada em MemoryTables.
10:59:18: TMemoryTables.IndexOfName: Tentativa de ler o índice da tabela  retornou 0 (Zero).
10:59:18: DoAssumir()
10:59:18: TBQuery.Close
10:59:18: TBQuery.Open
10:59:18: .Insert
10:59:18: RequestLive para "SAM_PRESTADOR"
10:59:18: TBQuery.Open
10:59:18: TBQuery.Close
Pelo log do método "DoAssumir()" o valor da variável Self.Tabela está nulo, era esperado vir "DoAssumir(SAM_PRESTADOR)". Aparentemente o valor da variavel "Tabela" não está nulo pois não deu erro no NewHandle, o que pode indicar que Self.Tabela e Tabela não são a mesma variável, podendo haver uma variavel Global. Verifique os valores das variáveis e me informe.

Vou fechar o post pois não está muito alinhado com o que se propõe o AccessViolation que é mais "perguntas e respostas" do que um canal de suporte de problemas. Eu e o Carlos estamos no suporte da tecnologia essa semana, nos reporte diretamente por email.

Perguntas relacionadas

+2 votos
1 resposta
perguntado 29 Out, 2019 por bruno.reis (40 pontos) | 29 visitas
0 votos
1 resposta
+5 votos
1 resposta
0 votos
1 resposta
perguntado 23 Jul, 2015 por Anderson Roberto (24 pontos) | 27 visitas
Melhores Mar 2020
  1. henrique.muller

    28 Pontos

  2. willian.metalsystem

    24 Pontos

  3. juliano.pezzini

    14 Pontos

  4. alan.jantz

    9 Pontos

  5. SlimShady

    6 Pontos

  6. maicon.pereira

    6 Pontos

  7. anônimo

    5 Pontos

  8. rafael.paludo

    5 Pontos

  9. fabio

    5 Pontos

  10. robert.volles

    5 Pontos

200 pontos
Melhores 2020 Mar 30 - Apr 05
  1. anônimo

    5 Pontos

  2. willian.metalsystem

    2 Pontos

420 perguntas
470 respostas
342 comentários
465 usuários