View Full Version : قراردادن عکس دربانک SQL ازطریق برنامه دلفی
amehrabi
یک شنبه 13 شهریور 1384, 07:26 صبح
من یک بانک SQL دارم که روی server قرار دارد و کاربران از طریق برنامه دلفی که بر روی کلاینتها نصب می شود به آن دسترسی دارند . یکی از جدولهای بانک من یک فیلد از نوع Image دارد . چگونه می توانم از طریق برنامه در این فیلد عکس قرار دهم .
m-khorsandi
یک شنبه 13 شهریور 1384, 08:00 صبح
درود
procedure TForm1.Button2Click(Sender: TObject);
Var
MemStream: TMemoryStream;
begin
OpenDlg.Execute;
Image2.Picture.LoadFromFile(OpenDlg.FileName);
FileStream := TMemoryStream.Create;
FileStream.LoadFromFile(OpenDlg.FileName);
ADOTable1.Append;
TBlobField(ADOTable1.FieldByName('FaxData')).LoadF romStream(FileStream);
ADOTable1.Post;
end;
Naficy
یک شنبه 13 شهریور 1384, 18:11 عصر
procedure TForm1.Button2Click(Sender: TObject);
Var
FileStream: TMemoryStream;
begin
if OpenDlg.Execute then begin
FileStream := TMemoryStream.Create;
try
FileStream.LoadFromFile(OpenDlg.FileName);
ADOTable1.Append;
TBlobField(ADOTable1.FieldByName('FaxData')).LoadF romStream(FileStream);
ADOTable1.Post;
finally
FileStream.Free;
end;
end;
end;
تصحیح چند خطای جزیی و چند تصحیح ساختاری :چشمک:
همچنین واقعا بهتره (از نظر حافظه مصرفی و سرعت) که از TFileStream به جای TMemoryStream استفاده کنید. (وگرنه "تمام" فایل احتمالا حجیم شما یکبار به درون حافظه خوانده شده و بعد حافظه آزاد می شود)
amehrabi
دوشنبه 14 شهریور 1384, 09:23 صبح
از راهنماییهای شما دوستان عزیز بسیار ممنونم .
ehsan2000
سه شنبه 26 مهر 1384, 16:11 عصر
:تشویق: :تشویق: :تشویق:
bangal
سه شنبه 23 مرداد 1386, 17:50 عصر
naficy جان کد بازیافت از sql رو هم محبت کن و بده
Valadi
سه شنبه 23 مرداد 1386, 18:24 عصر
نمونه سورس این تاپیک در همین سایت هست
سرچ کن
Auobauob
شنبه 28 آذر 1394, 09:03 صبح
سلام من تازه دلفی یاد گرفتم ولی هر چه دنبال TBlobField میگردم پیدا نمیکنم.میشه راهنمایم کنید
Mahmood_M
دوشنبه 14 دی 1394, 21:38 عصر
سلام من تازه دلفی یاد گرفتم ولی هر چه دنبال TBlobField میگردم پیدا نمیکنم.میشه راهنمایم کنید
TBlobField در یونیت Data.DB قرار داره که باید نام این یونیت رو به قسمت Uses اضافه کنید
اگر از نسخه های قدیمی دلفی استفاده می کنید به جای "Data.DB" فقط "DB" رو به Uses اضافه کنید
hadisalahi2
سه شنبه 15 دی 1394, 09:48 صبح
توصیه اکید دارم تصاویر رو داخل بانک اطلاعاتی قرار ندید و فقط آدرس اون رو در بانک ذخیره کنید
من خودم یک بار این تجربه رو داشتم و واقعا دردسر داشتم
و به شما هم توصیه میکنم تصاویر رو به جای ذخیره مستقیم در بانک در هارد ذخیره کنید و فقط آدرسش رو در انک ذخیره کنید
یا حق
m-khorsandi
سه شنبه 15 دی 1394, 15:55 عصر
تجربه های موفقی از ذخیره سازی دیتاهای حجیم داخل بانک وجود دارد، ضمن اینکه دقت داشته باشید که نگهداری اطلاعات
به صورت مستقیم روی دیسک نیاز به بررسی زیادی در سطح سیستم عامل، شبکه، دسترسی ها، رمزنگاری فایل ها و
انتقال اطلاعات به کلاینت و... دارد و البته میتونه نتیجه خیلی خوبی هم داشته باشه.
راه کارهایی مثل FilreStream رو ببینید.
و در کنار ذخیره سازی روی دیسک، ذخیره سازی داخل یک دیتابیس جداگانه یا FileGroupهای مجزا و دیسک جداگانه و سریع هم میتونه راه کار مناسبی باشه.
hadisalahi2
سه شنبه 15 دی 1394, 16:53 عصر
راه کارهایی مثل FilreStream رو ببینید.
این راهکار خوبه اما تا اونجا که من اطلاع دارم بازم بر روی دیسک اطلاعات رو ذخیره میکنه.
نگهداری اطلاعات
به صورت مستقیم روی دیسک نیاز به بررسی زیادی در سطح سیستم عامل، شبکه، دسترسی ها، رمزنگاری فایل ها و
انتقال اطلاعات به کلاینت و... دارد
خیلی هم بررسی زیادی نمیخواد
ولی به سرعت و سادگی پیاده سازیش می ارزه
اما همون FILEsTREAM راه کار مناسبیه
hamid-nic
چهارشنبه 16 دی 1394, 08:22 صبح
راه کارهایی مثل FilreStream رو ببینید.
و در کنار ذخیره سازی روی دیسک، ذخیره سازی داخل یک دیتابیس جداگانه یا FileGroupهای مجزا و دیسک جداگانه و سریع هم میتونه راه کار مناسبی باشه.
از همین روش FileGroup مجزا در دیتابیس انجام دادم بدون مشکل داره کار میکنه و ذخیره و بازیابی تصاویر با رکورد زیاد داخل دیتابیس انجام میشه .
m-khorsandi
چهارشنبه 16 دی 1394, 09:10 صبح
این راهکار خوبه اما تا اونجا که من اطلاع دارم بازم بر روی دیسک اطلاعات رو ذخیره میکنه.
خیلی هم بررسی زیادی نمیخواد
ولی به سرعت و سادگی پیاده سازیش می ارزه
اما همون FILEsTREAM راه کار مناسبیه
مطمئنا به بررسی زیادی نیاز دارد.
وقتی که 400 تا کاربر از نرم افزار استفاده میکنند و تعداد فایل ها بعد از چند ماه به 200000 تا میرسه و فقط هم
با عکس سر و کار نداری و فیلم و ... هم هست. سخت افزار، امنیت فایلها، نوع دسترسی و سناریویی که برای تهیه نسخه پشتیبان باید در نظر بگیری حتما و حتما نیاز به بررسی داره.
ابوالفضل عباسی
چهارشنبه 16 دی 1394, 17:43 عصر
سلام
با استفاده از روش Stream ذخیره سازی کن:
برای ذخیره سازی:
var ms:tmemorystream;Begin
ms:=tmemorystream.create;
ms.position:=0;
image1.picture.bitmap.savetostream(ms);
ms.position:=0;
with yourfield as tblobfield do
loadfromstream(ms);
freeandnil(ms);
end;
برای خواندن:
var ms:tmemorystream;Begin
ms:=tmemorystream.create;
ms.position:=0;
with yourfield as tblobfield do
savetostream(ms);
ms.position:=0;
image1.picture.bitmap.loadfromstream(ms);
freeandnil(ms);
end;
این کارت رو راه می اندازه ولی به کد زیر هم یه نگاهی بکن اون هم جواب کارت رو میده:(ولی کمی طولانیه):لبخند:
uses jpeg, pngimage;
type
TitTYPES=(itJPG,itPNG,itBMP);
procedure TForm1.Button1Click(Sender: TObject);
var
jp:TJpegimage;
g:TGraphic;
begin
jp:=TJpegimage.Create;
try
ads.Close;
jp.LoadFromFile('C:\Bilder1\PIC.jpg');
ads.SQL.Text := 'Insert into IMGBlob (ID,Blob,typ) Values (:ID,:BLOB,:typ)';
ads.Parameters[0].Value := 1;
ads.Parameters[1].Assign(jp);
ads.Parameters[2].Value := itJPG;
ads.ExecSQL;
ads.SQL.Text := 'Select * from IMGBlob where ID=:ID';
ads.Parameters[0].Value := 1;
ads.Open;
try
case TitTYPES(ads.FieldByName('typ').AsInteger) of
itJPG: g:=TJpegimage.Create;
itPNG: g:=TPNGImage.Create;
itBMP: g:=TBitmap.Create;
end;
g.Assign(ads.FieldByName('Blob'));
Image1.Picture.Assign(g);
finally
g.Free;
end;
finally
jp.Free;
end;
end;
hadisalahi2
پنج شنبه 17 دی 1394, 10:03 صبح
با استفاده از روش Stream ذخیره سازی کن:
البته منظرو من از fileStream اون قابلیتی هستش که از sql Server 20008 به بعد به این نرم افزار اضاضه شد.
ابوالفضل عباسی
چهارشنبه 23 دی 1394, 14:57 عصر
آهان خب من اشتباه فهمیدم.شرمنده
خب با file stream خوب برنامه sql این کار رو انجام بدی بهتر هست.چون اینطوری کد نویسی نداره.
hadisalahi2
پنج شنبه 24 دی 1394, 09:39 صبح
چون اینطوری کد نویسی نداره.
چرا عزیزم اونجا هم کد نویسی داره
اما عملیات ذخیره و بازیابی رو خودش انجام میده
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.