المشاركات : 59
المواضيع 12
:
: 0
الإنتساب : May 2009
السلام عليكم ،لدي مشكل لم أجد له حل رغم بحثي الكثير
لدي قاعدة معطيات اكسس تحتوي على عدة حقول من بينها حقل صور( blob(pdf و علي ادماجها في برنامج دلفي يعني قاعدة المعطيات هذه كانت موجودة من قبل و كان يتم ادخال البيانات من خلال اكسس و طلب مني عمل برنامج دلفي لادارة هذه القاعدة ، المشكل اني بمجرد أن أقوم بأي عملية حتى و لو كانت بحث يظهر message كالتالي : "bitmap image is not valid "
لا اله الا انت سبحانك اني كنت من الظالمين
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
و عليكم السلام و رحمة الله
تلك الرسالة تدل على أن البيانات المتعامل معها ليست من نوع bitmap
إقتباس : صور( blob(pdf
تقصد ملفات pdf ؟
معلومة:
الحقول من نوع blob ـ (binary large object ) هو مجموعة من البيانات الثنائية يمكن تكون صور ، أصوات ،ملفات ...
بالتوفيق
المشاركات : 59
المواضيع 12
:
: 0
الإنتساب : May 2009
شكرا أخي على التوضيح ، و لكن في هذه الحالة كيف يتم التعامل مع هذا النوع من البيانات و كيف يمكن حل هذا المشكل.
لا اله الا انت سبحانك اني كنت من الظالمين
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم و رحمة الله
مثال بإستخدام LoadFromFile 'توجد طرق أخرى بإستخدام Stream ':
لجلب و حفظ الملفات في هذا الحقل :
كود :
if OpenDialog1.Execute then
begin
ADODataSet1.Edit ;
TBlobField(ADODataSet1.FieldByName('YourBlobField')).LoadFromFile(OpenDialog1.FileName );
ADODataSet1.post ;
end;
لإستخراجها إلى ملف خارجي و فتحه مثال حول pdf
كود :
if SaveDialog1.Execute then
TBlobField(ADODataSet1.FieldByName('YourBlobField')).savetofile(SaveDialog1.FileName+'.pdf' );
ShellExecute(Handle, 'open', pchar((SaveDialog1.FileName+'.pdf' )), nil, nil, SW_SHOWNORMAL) ;
بالتوفيق
المشاركات : 59
المواضيع 12
:
: 0
الإنتساب : May 2009
08-12-2010, 11:03 AM
(آخر تعديل لهذه المشاركة: 08-12-2010, 01:22 PM بواسطة Lam.Abdeldjalil.)
السلام عليكم
شكرا أخي على الاقتراح و لكن **** أن أشرح لك أكثر المشكل في برنامجي لانني ربما لم أوصل الفكرة كما يجب:
لدي قاعدة بيانات اكسس من الشكل :
N° NOM PRENOM DATE ENVOI DOCUMENT
1 X Y 01/11/2010
Adobe Acrobat Document
2 MOHAMED ALI 02/11/2010
Adobe Acrobat Document
3 AHMED MOHAMED 03/11/2010
Adobe Acrobat Document
علما ان البيانات تم ادخالها سابقا عن طرق الاكسس و علي المحافظة على البيانات القديمة كما هي و استغلالها عن طريق برنامج دلفي يعني التعامل مع البيانات سيكون من خلال برنلمج دلفي و ليس اكسس.
قمت بربط قاعدة البيانات مع دلفي بواسطة ado ثم بدأت العمل عليها و قمت بعمل فورم للبحث عن في الجدول عن طريق الرقم ( N°) كالتالي :
كود :
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if edit1.Text<>'' then
begin
DMa.adotab1.Filtered:=false;
DMa.adotab1.Filter:='N°= '+ QuotedStr(edit1.Text);
DMa.adotab1.Filtered:=true;
end
else
DMa.adotab1.Filtered:=false;
end;
و لكن عند التنفيذ يظهر المسج التالي : " BITMAP IMAGE IS NOT VALID" بالنسبة للحقول(document) التي تحتوي على ملف pdf .
لا اله الا انت سبحانك اني كنت من الظالمين
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
وعليكم السلام و رحمة الله
ذكرت سابقا
كود :
تلك الرسالة تدل على أن البيانات المتعامل معها ليست من نوع bitmap
أي إنك تحاول التعامل مع الحقل على أنه bitmap .
لا يكمن عرض Pdf في المكون DBImage
عليك إستخراجه و فتحه كما ذكرت سابقا أو بإستخدام الـ Stream ( لم أستخدمها من قبل )
شيئ آخر وضح أكثر !
بالتوفيق
المشاركات : 59
المواضيع 12
:
: 0
الإنتساب : May 2009
شكرا أخي على الإجابة و سأوضح لك أكثر :
أنا لم أستخدم dbimage أصلا و كل ما عملته بحث في الجدول فقط لاظهار بيانات ليست blob كالاسم و التاريخ عن طريق dbedit يعني لم أصل حتى الى عرض الحقل من نوع blob و لكن أعتقد ان الحل في ال stream كما قلت و لكن انا لا اعرف ما هو الstream أصلا و لا كيفية التعامل معه.
لا اله الا انت سبحانك اني كنت من الظالمين
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
08-12-2010, 07:33 PM
(آخر تعديل لهذه المشاركة: 08-12-2010, 07:41 PM بواسطة Lam.Abdeldjalil.)
السلام عليكم
العفو ، لكن لحد الآن لم تظهر سبب المشكل أرفق المحاولة .
بالنسبة للعمل بالطريقة الأخرى
بإستعمال
TMemoryStream
كود :
var
MemStream: TMemoryStream;
begin
MemStream := TMemoryStream.Create;
try
TBlobField(ADODataSet1.FieldByName('YourBlobF')).SaveToStream(MemStream);
MemStream.Position :=0;
[COLOR=DarkGreen] Image1.Picture.Bitmap.LoadFromStream(MemStream);[/COLOR]
finally
MemStream.Free;
end;
هذا مثال لإستخراج صور Bmp و إظهارها في
Image1
بالنسبة للـ Pdf إستخدم أحد المكونات التي تحتوى على الدالة LoadFromStream بنفس الطريقة طبق !
و مكتبة AcroPDF لا تحتوي عليها و على حد علمي لا توجد مكونات مجانية تحتوي عليها
بالتوفيق
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم
إقتباس :بالنسبة للـ Pdf إستخدم أحد المكونات التي تحتوى على الدالة LoadFromStream
بإستخدام مكونات pdftoolkit ( مكونات تجارية )
كود :
gtPDFDocument1.LoadFromStream(MemStream) ;
gtPDFViewer1.Active :=true;
ملاحظة لا تدمر الـ MemStream بعد الفتح ( دمره بعد الإنتهاء من قراءة الملف مثلا .. ) و إلا واجهت مشكل Generic Error
بالتوفيق
المشاركات : 59
المواضيع 12
:
: 0
الإنتساب : May 2009
السلام عليكم.
بارك الله فيك أخي ،سأجرب الاقتراح ثم أخبرك بالنتيجة.
لا اله الا انت سبحانك اني كنت من الظالمين