mosharecat
جمعه 01 شهریور 1387, 20:21 عصر
وقتی AdoTable روی فرم هستش این کد که برای ذخیره کردن تصویر و دیتابیس هستش کاملا درست عمل میکنه ولی وقتی AdoTable روبه DataMadule میبریم (که اینکار حتما باید انجام بشه بخاطر بعضی از اصول ها ) خطای Row Cannot Be Located For Updating .Some Values May Have Been Chaned Since It was Last Read. رو میده!
تابع JpegStartsInBlob و Procedure SaveJpegToTable برای ذخیره کردن تصویر هستن وقتی برنامه به خط SaveJpegToTable میرسه و اون زیربرنامه (با DataMadule.Adotable برای پارامتر اول مقداردهی میشه ) رو صدا میزنه ومیره داخل زیربرنامه، داخل زیربرنامه وقتی به خط table.Edit میرسه اون خطا رو میده و این در حالیه که وقتی Adotable روی خود فرم هستش نه تو DataMAdule و وقتی ما اونو بصورت (SaveJpegToTable(ADOTable1,DataModule1.ADOTable1Pi c,picpath برنامه کاملا درست عمل میکنه وهیچ مشکلی نیست خواهشا راهنمایی بفرمایید بدجوری بهش احتیاج دارم. :ناراحت::افسرده:
function JpegStartsInBlob(PicField:TBlobField):integer;
function JpegStartsInBlob(PicField:TBlobField):integer;
var
; bS : TADOBlobStream
;buffer : Word
; hx : string
begin
; Result := -1
bS := TADOBlobStream.Create(PicField, bmRead);
try
while (Result = -1) and (bS.Position + 1 < bS.Size) do begin
; (bS.ReadBuffer(buffer, 1)
; ( hx:=IntToHex(buffer,2)
if hx = 'FF' then begin
; (bS.ReadBuffer(buffer, 1
; (hx:=IntToHex(buffer,2
if hx = 'D8' then Result := bS.Position - 2
; else if hx = 'FF' then bS.Position := bS.Position-1
end;
end;//while
finally
bS.Free
end; //try
end;
//================================================== ===================
Procedure SaveJpegToTable(Table:TADOTable;PicField:TBlobFiel d;spicPath : string);
var
fs: TfileStream;
begin
fs:=TFileStream.create(spicPath,fmOpenRead);
try
;Table.Edit
; (picfield.LoadFromStream(fs
;Table.Post
finally
fs.free;
; end
End
//================================================== ===================
procedure TRegForm.saveClick(Sender: Tobject);
var
;bS : TADOBlobStream
;Pic : TJPEGImage
begin
....
...
// save filed pic
if picpath <> '' then
begin
;DataModule1.ADOTable1.Edit
; (SaveJpegToTable(DataModule1.ADOTable1,DataModule1 .ADOTable1Pic,picpath
'';:=picpath
; (bS := TADOBlobStream.Create(DataModule1.ADOTable1Pic, bmRead
try
; ( bS.Seek(JpegStartsInBlob(DataModule1.ADOTable1Pic) , soFromBeginning
;Pic:=TJpegImage.Create
try
; ( Pic.LoadFromStream(bS
;picimage.Picture.Graphic:=Pic
finally
;Pic.Free
;end
finally
bS.Free
;end
;end
http://i33.tinypic.com/23wlrr.jpg
تابع JpegStartsInBlob و Procedure SaveJpegToTable برای ذخیره کردن تصویر هستن وقتی برنامه به خط SaveJpegToTable میرسه و اون زیربرنامه (با DataMadule.Adotable برای پارامتر اول مقداردهی میشه ) رو صدا میزنه ومیره داخل زیربرنامه، داخل زیربرنامه وقتی به خط table.Edit میرسه اون خطا رو میده و این در حالیه که وقتی Adotable روی خود فرم هستش نه تو DataMAdule و وقتی ما اونو بصورت (SaveJpegToTable(ADOTable1,DataModule1.ADOTable1Pi c,picpath برنامه کاملا درست عمل میکنه وهیچ مشکلی نیست خواهشا راهنمایی بفرمایید بدجوری بهش احتیاج دارم. :ناراحت::افسرده:
function JpegStartsInBlob(PicField:TBlobField):integer;
function JpegStartsInBlob(PicField:TBlobField):integer;
var
; bS : TADOBlobStream
;buffer : Word
; hx : string
begin
; Result := -1
bS := TADOBlobStream.Create(PicField, bmRead);
try
while (Result = -1) and (bS.Position + 1 < bS.Size) do begin
; (bS.ReadBuffer(buffer, 1)
; ( hx:=IntToHex(buffer,2)
if hx = 'FF' then begin
; (bS.ReadBuffer(buffer, 1
; (hx:=IntToHex(buffer,2
if hx = 'D8' then Result := bS.Position - 2
; else if hx = 'FF' then bS.Position := bS.Position-1
end;
end;//while
finally
bS.Free
end; //try
end;
//================================================== ===================
Procedure SaveJpegToTable(Table:TADOTable;PicField:TBlobFiel d;spicPath : string);
var
fs: TfileStream;
begin
fs:=TFileStream.create(spicPath,fmOpenRead);
try
;Table.Edit
; (picfield.LoadFromStream(fs
;Table.Post
finally
fs.free;
; end
End
//================================================== ===================
procedure TRegForm.saveClick(Sender: Tobject);
var
;bS : TADOBlobStream
;Pic : TJPEGImage
begin
....
...
// save filed pic
if picpath <> '' then
begin
;DataModule1.ADOTable1.Edit
; (SaveJpegToTable(DataModule1.ADOTable1,DataModule1 .ADOTable1Pic,picpath
'';:=picpath
; (bS := TADOBlobStream.Create(DataModule1.ADOTable1Pic, bmRead
try
; ( bS.Seek(JpegStartsInBlob(DataModule1.ADOTable1Pic) , soFromBeginning
;Pic:=TJpegImage.Create
try
; ( Pic.LoadFromStream(bS
;picimage.Picture.Graphic:=Pic
finally
;Pic.Free
;end
finally
bS.Free
;end
;end
http://i33.tinypic.com/23wlrr.jpg