I am using zeos8 (git pull from this date) + lazarus 3.2.
So, When I create memtable (Lista_Atual) with calc field, I can´t do memtable.[append/edit/...] because will trigger access viollation, if I remark as comment field qtde_solicitada_com (calculated field) no error will be displayed.
Code: Select all
try
with Lista_Atual.FieldDefs do
begin
Clear;
Add('id_processo' , ftLargeint, 0, False);
Add('criacao_grupo' , ftString, 32, False);
Add('tag_name' , ftString, 50, False);
Add('coditem_almox' , ftString, 50, False);
Add('necessidade_dt' , ftDateTime, 0, False);
Add('qtde_solicitada' , ftFloat, 0, False);
Add('unidade' , ftString, 6, False);
Add('qtde_solicitada_com' , ftString, 12, false); // calc field
Add('descricao' , ftString, 250, False);
Add('observacao' , ftString, 250, False);
Add('reserva_sn' , ftBoolean , 0, False);
end;
Lista_Atual.IndexFieldNames:='id_processo;coditem_almox';
Lista_Atual.FilterOptions:=[foCaseInsensitive];
if (not Lista_Atual.Active) then
Lista_Atual.Active:=true;
Lista_Atual.FieldByName('coditem_almox').Visible:=false;
Lista_Atual.FieldbyName('qtde_solicitada_com').FieldKind:=fkCalculated;
except
on e:exception do
begin
Result:=e.Message;
end;
end;
except
on e:exception do
begin
Result:=e.Message;
end;
end;
end;
// now, I try to append
lista_atual.Append; // Access Viollation Here
lista_atual.FieldbyName('id_processo').AsLargeInt:=Id_Processo;
lista_atual.FieldbyName('criacao_grupo').AsString:=edtCRIACAO_GRUPO.Text;
lista_atual.FieldbyName('tag_name').AsString:=edtTAG_NAME.Text;
lista_atual.FieldbyName('coditem_almox').AsString:=qPesquisaAlmox.FieldbyName('coditem_almox').AsString;
lista_atual.FieldbyName('necessidade_dt').AsDateTime:=edtNECESSIDADE_DT.Date;
lista_atual.FieldbyName('qtde_solicitada').AsFloat:=nQuantidade;
lista_atual.FieldbyName('unidade').AsString:=qPesquisaAlmox.FieldbyName('unidade').AsString;
lista_atual.FieldbyName('descricao').AsString:=LeftStr(qPesquisaAlmox.FieldbyName('descricao').AsString, 250);
lista_atual.FieldbyName('observacao').AsString:=edtOBSERVACAO.Text;
lista_atual.FieldbyName('reserva_sn').AsBoolean:=cboxRESERVA_SN.Checked;
lista_atual.Post;
(...)
procedure TfmView_rm_criacao.lista_atualCalcFields(DataSet: TDataSet);
var
dQuantidade:Double;
sQuantidade:String;
sUnidade:String;
begin
dQuantidade:=Dataset.FieldbyName('qtde_solicitada').AsFloat;
if dQuantidade>0 then
begin
sQuantidade:=FloatToStr(dQuantidade);
sUnidade:=Dataset.FieldbyName('unidade').AsString;
//Dataset.FieldbyName('qtde_solicitada_com').AsString:=LeftStr(sQuantidade+#32+sUnidade, 12);
end
end;