Acces Violation przy zwalnianiu bloba

0
procedure TfrmMain.ZapiszBlob(FileName, FieldName: string);
var
  blob, myFileStream : TStream;
begin
  blob := DataSet.CreateBlobStream(DataSet.FieldByName(FieldName), bmWrite);
  try
    blob.Seek(0, soFromBeginning);
    myFileStream := TFileStream.Create(FileName, fmShareDenyWrite);
    try
      blob.CopyFrom(myFileStream, myFileStream.Size) ;
    finally
       myFileStream.Free ;
    end;
  finally
    blob.Free ;  <- Tutaj Acces Violation
  end;
end; 

dlaczego na linijce blob.Free zawsze mam Acces Violation ?
Przeglądałem kilka stron w internecie w we wszystkich przykładach tak właśnie zapisują pliku do pola blob.

0

dlaczego na linijce blob.Free zawsze mam Acces Violation ?

Bo usiłujesz się odwołać do niepoprawnego miejsca w pamięci. Gdybyś powiedział więcej to też bym powiedział więcej. No ale żeby powiedzieć więcej trzeba umieć używać debuggera, czego nowi się boją jak ognia...

0
  1. Jeśli mam powiedzieć więcej to napisz co chciałbyś jeszcze wiedzieć. Napisem całą procedurę. Mogę jedynie dodać że chodzi o bazę Firebird i komponent IBDataSet.

  2. Debugger nic w tym miejscu nie pomaga. Ustawiłem beakpoint na tej linii i jak daję tam F7 to nigdzie głębiej nie wchodzi tylko od razu błąd wywala.

1

"Ustawiłem beakpoint na tej linii i jak daję tam F7 to nigdzie głębiej nie wchodzi tylko od razu błąd wywala"

No przecież -123oho napisał, że trzeba umieć używać ... ;-)

1

Zamiast mówić że trzeba umieć używać, to lepiej powiedzieć jak używać.
Wtedy na przyszłości nie będę musiał niepotrzebnie pisać na forum.

1
Pele2 napisał(a):

Zamiast mówić że trzeba umieć używać, to lepiej powiedzieć jak używać.
Wtedy na przyszłości nie będę musiał niepotrzebnie pisać na forum.

Zamiast mówić że nie wiesz jak używać, to lepiej użyj googla.
Wtedy na przyszłości nie będę musiał niepotrzebnie pisać na forum.
Link dla tych którzy tego nie znają: www.google.pl

1 użytkowników online, w tym zalogowanych: 0, gości: 1