السلام عليكم
كيف اضافة صورة الى قاعدة المعطيات عن طريق delphi 7 ؟
في قاعدة المعطيات عندي جدول condidat و توجد الحقول التالية رقم المترشح ، اسم المترشح ، لقب المترشح،.......،صورة المترشح
انا استعمل delphi 7 و SQL server 2000 كقاعدة معطيات
السلام عليكم...
الكود التالي يفترض أنه يوجد Image1 قد يحتوي على صورة الشخص. و أن نوع الحقل في جدول SQL Server هو Image:
كود :
var
CmdText: string;
HasPicture: Boolean;
PicStream: TMemoryStream;
Bmp: TBitmap;
begin
// ...
// ...
CmdText := 'INSERT INTO table_name (field1, field2, field3, ..., img_field)';
CmdText := CmdText + ' VALUES (' + value1;
CmdText := CmdText + ', ' + value2;
CmdText := CmdText + ', ' + value3;
CmdText := CmdText + ', ' + ...
// ...
// ...
if Assigned(Image1.Picture.Graphic) then begin
// في حالة وجود صورة في المكون
HasPicture := True;
// إنشاء بارامتر لإضافة الصورة
CmdText := CmdText + ', :PicData';
try
// Create a Memory stream:
PicStream := TMemoryStream.Create;
// إنشاء صورة نقطية في الذاكرة
Bmp := TBitmap.Create;
// تحميل الصورة من المكون إلى الذاكرة
Bmp.Assign(imgPicture.Picture.Graphic);
// حفظ الصورة مؤقتاً في الذاكرة
Bmp.SaveToStream(PicStream);
// إعادة ضبط المؤشر إلى أول بايت - مهم
PicStream.Seek(0, soFromBeginning);
finally
Bmp.Free;
end;
end
else begin
// في حالة عدم وجود صورة في المكون
HasPicture := False;
CmdText := CmdText + ', NULL'; // لا نخزن شيئاً في الحقل
end;
CmdText := CmdText + ')';
ADOCommand.CommandText := CmdText;
if HasPicture then begin
// إذا كانت هناك صورة فإننا ننسخها من الذاكرة إلى البارامتر
ADOCommand.Parameters.ParamByName('PicData').LoadFromStream(PicStream, ftGraphic);
if Assigned(PicStream) then
PicStream.Free;
end;
// ننفذ استعلام الحفظ
ADOCommand.Execute;
* الصور التي جربتها شخصياً كانت من النوع BMP و JPG. أما بقية الأنواع فلم أجربها.
* table_name هو اسم الجدول لديك.
* field1 و field2 و field3 ... إلخ. هي أسماء الحقول في جدولك.
* value1 و value2 و value3 ... إلخ. هي القيم المقابلة للحقول في جدولك، باستثناء حقل الصورة.
* img_field هو اسم حقل الصورة في قاعدة البيانات (و يكون من النوع image).
* ADOCommand هو اسم مكون الـ ADOCommand الذي ستستعمله لحفظ البيانات.
*** نصيحة: رغم أن حفظ الصور ضمن قاعدة البيانات يضمن وجود الصورة معسجلها، فإن ذلك قد يؤدي إلى تضحم قاعدة البيانات بشكل كبير. و لهذا ربما يكون أحياناً من الأنسب حفظ الصور كملفات خارجية في مجلد تابع للبرنامج، و جعل حقل الصورة عبارة عن حقل نصي لحفظ مسار ملف الصورة المرتبطة بالسجل (بالطبع مع احتمال حذف الصورة من خارج البرنامج - مثلاً من خلال مستكشف ويندوز!) - الخيار يبقى لك.
نرجو الاستفادة و السلام.