PDA

View Full Version : سوال: اطلاع از خالی بودن فیلد Image



hadisalahi2
شنبه 20 مهر 1387, 11:08 صبح
با سلام به همگی دوستان.
من برای ذخیره عکس در بانک اطلاعاتی Sql Server از کد زیر استفاده کنم



procedure TDataBaseForm.InsertBlob(ID:Byte;fileName:String);
var
bS : TADOBlobStream;
Fs:TFileStream;
begin
bS := TADOBlobStream.Create( tblobfield(adoquery1.Fields[10]),bmwrite);
bS.Seek(0, soFromBeginning);
fs := TFileStream.Create(fileName,fmOpenRead or fmShareDenyWrite);
bS.CopyFrom(fs, fs.Size);
fs.Free;
bS.Free;
end;


و برای بازیابی هم از کد زیر استفاده میکنم.



procedure TDataBaseForm.PicRecovery(fieldName:string;ID:byte );
var StreamPic2 :TMemoryStream; IP : TJPEGImage;
begin
StreamPic2:= TMemoryStream.Create;
IP:= TJPEGImage.Create;
try TBlobField(DataBaseForm.ADOQuery1.FieldByName('Top Image')).SaveToStream(StreamPic2);
StreamPic2.Seek(0, soFromBeginning);
IP.LoadFromStream(StreamPic2);
PolEditForm.TopImage.Picture.Graphic:= IP;
finally
StreamPic2.Free;
IP.Free;
end;
end;


حالا مشکل من اینه که موقع بازیابی یک تصویر در صورت خالی بودن اون فیلد تصویر که از نوع Image تعریف شده ، پیغام خطا صادر میشه ، مبنی بر خالی بودن فیلد. حالا چه طور میتونم چک کنم که یک فیلد با نوع تصویر دارای مقدار است یا نه؟
و در کد زیر هم




bS := TADOBlobStream.Create( tblobfield(adoquery1.Fields[10]),bmwrite);


چه طور میتونم به جای دادن شماره فیلد ، نام اون فیلد رو وارد کنم؟
یا حق

shervin farzin
شنبه 20 مهر 1387, 23:00 عصر
سلام
براي تشخيص خالي بودن از كد زير استفاده كنين :

if ADOQuery1.FieldByName('pic') <> null
then
...


براي سوال دوم ميتونين بنويسين :

TBlobField(adoquery1.FieldValues['pic']),bmwrite

موفق باشيد .

hadisalahi2
پنج شنبه 25 مهر 1387, 10:24 صبح
این کد رو استفاده کردم ولی متاسفانه خطای Invali Typecast رو میده.
به این صورت استفاده کردم



bS := TADOBlobStream.Create( tblobfield(codeForm.adoquery1.FieldValues[Fname]),bmwrite);

hadisalahi2
پنج شنبه 25 مهر 1387, 10:27 صبح
این کد رو استفاده کردم ولی متاسفانه خطای Invalid Typecast رو میده.
به این صورت استفاده کردم



bS := TADOBlobStream.Create( tblobfield(codeForm.adoquery1.FieldValues[Fname]),bmwrite);


در ضمن ّFname هم یک متغیره که نام فیلد مورد نظر رو از کاربر میگیره.

hadisalahi2
پنج شنبه 25 مهر 1387, 10:57 صبح
برای قسمت دوم هم کد شما رو استفاده کردم ولی خطای Incompatible Type رو داد بعد به صورت زیر تغییرش دادم



if ADOQuery1.FieldByName(fieldName)<>nil then
PolEditForm.TopImage.Picture.Graphic:= IP;

این بار خطا رو نگرفت ولی بازهم نمیتونه چک کنه که فیلد خالیه یا نه و خطای عدم وجود تصویر در فیلد رو میده

shervin farzin
پنج شنبه 25 مهر 1387, 12:48 عصر
سلام
براي ساخت Stream اين كد رو امتحان كد :

bs:=ADOQuery1.CreateBlobStream(ADOQuery1.FieldByNa me('pic'),bmRead);

براي تست خالي بودن عكس هم يه كار ديگه ميكنيم ، اول از روي فيلد Image يه Stream با
كد بالا بسازيد . بعد اين كد رو بنويسين :

if bs.Size <> 0 then
...

اميدوارم مشكلي پيش نياد . موفق باشيد .

bahar tanha
یک شنبه 03 آذر 1387, 11:24 صبح
با سلام
من هنوز تازه دلفی رو شروع کردم سوالی داشتم اینکه توی پست من برای ذخیره عکس در اس کیو ال با دلفی نمی دونم که دستورات رو باید کجای فرمم قرار بدم اگه مشه کمکم کنید ممنون

bahar tanha
یک شنبه 03 آذر 1387, 12:17 عصر
سلام ببخشید منظور من پست 1 بود اگه می تونید بطور کامل توضیح بدید ممنون

bahar tanha
دوشنبه 04 آذر 1387, 14:13 عصر
خواهش مي كنم منو راهنمايي كنيد

shervin farzin
دوشنبه 04 آذر 1387, 22:25 عصر
سلام
منظورتون رو از سوال متوجه نشدم . براي ذخيره كردن عكس در database خوب كدتون رو روي
دكمه ذخيره يا هر دكمه ديگه اي كه براي اين كار در نظر گرفتيد مينويسيد . براي بازيابي عكس
هم بستگي داره كه چطوري بخواين اين كار رو توي فرمتون انجام بدين .
لطفا بيشتر در مورد كاري كه ميخواين انجام بدين توضيح بنويسيد .

Hamid_PaK
سه شنبه 05 آذر 1387, 06:08 صبح
سلام ببخشید منظور من پست 1 بود اگه می تونید بطور کامل توضیح بدید ممنون

توی همین بخش BlobStream رو جسجتو کنید، قبلا بحث شده است.

یا حق ...