(ftBlob 필드에있는) ClientDataSet의 다른 레코드에 TBitmap 이미지의 배열을 추가하고 해당 레코드를 SQLite 데이터베이스에 저장하려고합니다. BLOB 필드 (DocImage)는 데이터베이스의 필수 필드입니다.SQLite 데이터베이스에서 BLOB 필드에 비트 맵을 저장하는 방법
그러나 내 코드는 비트 맵을 ClientDataSet의 blob 필드에 저장하지 않는 것 같습니다 ... 따라서 BdmMain.cdsTrxDoc.ApplyUpdates(0)
을 호출하면 "DocImage '필드에 값이 있어야합니다."라는 오류가 발생합니다.
나는 전에 FTrxPhotoValue[i].SaveToStream(BlobStream)
를 호출 한 후 내 BlobStream (BlobStream.Size)의 크기를 확인하고 그 크기가 증가 않지만, Blob 필드의 데이터 크기는 여기
0 코드의 조각입니다 남아 :
FTrxIDValue: Integer;
FTrxDocIDValue: array of Integer;
FTrxPhotoValue: array of TBitmap;
// ...
for i := 0 to Length(FTrxPhotoValue) do
begin
BdmMain.cdsTrxDoc.Insert;
BdmMain.cdsTrxDoc['TrxID'] := FTrxIDValue;
BdmMain.cdsTrxDoc['DocID'] := FTrxDocIDValue[i];
BlobField := BdmMain.cdsTrxDoc.FieldByName('DocImage');
BlobStream := BdmMain.cdsTrxDoc.CreateBlobStream(BlobField, bmWrite);
FTrxPhotoValue[i].SaveToStream(BlobStream);
end;
// ...
BdmMain.cdsTrxDoc.ApplyUpdates(0);
SaveToStream 호출 후 BlobStream.Free를 추가했지만 이제는 액세스 위반 오류가 발생합니다 ... –
전체 코드를 표시하고 액세스 위반이있는 행을 표시 할 수 있습니까? –
'for i : = 0 to Length (FTrxPhotoValue) -1 do'을 반복하십시오. – Victoria