السلام عليكم
استعمل دلفي 7 لقراءة ملف word مخزن على شكل blob في قاعدة البيانات برادوكس عن طريق olecontainer و استعملت هذا الكود :
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
MemStream: TMemoryStream;
begin
MemStream := TMemoryStream.Create;
try
TBlobField(.table1.FieldByName('doc')).SaveToStream(memstream);
MemStream.Position :=0;
OleContainer1.LoadFromStream(memstream);
finally
MemStream.Free;
end;
END;
عند التنفيذ تظهر رسالة الخطأ التالية :
:" raised exeption class eOlesyserror with message' %1 éxiste déja ' " apparait lors de l'éxécution
ماهو المشكل أو النقائص في هذا الكود؟
وعليكم السلام و رحمة الله
" TOleContainer يستخدم تنسيق خاص في الـ stream لذا لا يمكن إستعمال LoadFromStream ما لم يستخدم SaveToStream الخاص به "
ليس كلامي و لا أدري مدى صحته ،
لذا عندك حلان :
1* حفظ stream الخاص بك إلى ملف مؤقت ثم إستدعائه بـ
كود :
OleContainer1.CreateObjectFromFile('x');
2* تقوم بحفظ قيمة الحقل من نوع blob بإستخدم OleContainer
كود :
var memstrIN:tmemorystream;
begin
memstrIN :=TMemoryStream.Create;
try
memstrIN :=TMemoryStream.Create;
TBlobField(ADODataSet1.FieldByName('d')).SaveToStream(memstrIN);
memstrIN.Seek(0, soFromBeginning);
olecontainer1.LoadFromStream(memstrIN);
finally
memstrIN.Free;
end;
الإستدعاء
كود :
var memstrOut:TMemoryStream;
begin
memstrOut :=TMemoryStream.Create;
try
olecontainer1.SaveToStream(memstrOut);
memstrOut.Seek(0, soFromBeginning);
ADODataSet1.Edit ;
TBlobField(ADODataSet1.FieldByName('d')).LoadFromStream(memstrOut);
ADODataSet1.post ;
finally
memstrOut.Free;
end;
بالتوفيق
سأقوم الان بتجريب الاقتراح
بالنسبة للاقتراح الاول الملف غير موجود في file بل في قاعدة بيانات
تقريبا نفس الكود الذي استعمله و يعطي نفس الخطأ عند التنفيذ .
اذا كنت تقصد بالاستدعاء التخزين في قاعدة المعطيات فليس عندي مشكل في هذا.
السلام عليكم
لايبدو لي انك قرأت الرد جيدا ،
إقتباس :بالنسبة للاقتراح الاول الملف غير موجود في file بل في قاعدة بيانات
نعم و أنا قلت إستخرج محتوى الحقل إلى ملف خارجي (لا أذكر أي موضوع كتبتها وكانت رد سؤال لك على ما اذكر ) ومن ثم
كود :
OleContainer1.CreateObjectFromFile('x');
إقتباس :تقريبا نفس الكود الذي استعمله و يعطي نفس الخطأ عند التنفيذ .
يعطيك الخطأ لنفس التعليل السابق تابع التالي
إقتباس :اذا كنت تقصد بالاستدعاء التخزين في قاعدة المعطيات فليس عندي مشكل في هذا.
هذا هو المشكل إذا لم تحفظ قيمة الحقل من olecontainer فستواجه مشكل عند محاولة الإستخراج
أعيدها لك
" TOleContainer يستخدم تنسيق خاص في الـ stream لذا لا يمكن إستعمال LoadFromStream ما لم يستخدم SaveToStream الخاص بـ TOleContainer "
( جربته و على ما يبدو معه حق

)
بالتوفيق
Lam.Abdeldjalil كتب :" TOleContainer يستخدم تنسيق خاص في الـ stream لذا لا يمكن إستعمال LoadFromStream ما لم يستخدم SaveToStream الخاص بـ TOleContainer "
يبدو أني لم أفهم عليك ،يعني أستعمل الكود الخاص ب savetostream ثم الكود الخاص ب loadfromstream بهذا الترتيب أم ماذا !

السلام عليكم
* أدخل كائن الـ OLE (ـ word في حالتك ) بـ TOleContainer إحفظه في الـ stream بإستخدام SaveToStream ضع القيمة الموجودة في الـ stream في الحقل
* الإسترجاع الذي تعرفه
أي الحقول التي تحمل قيم مدخلة سابقا دون إستعمال الطريقة المذكورة لا يمكن فتحها ، هل إتضحت الآن ؟
بالتوفيق
Lam.Abdeldjalil كتب :* أدخل كائن الـ OLE (ـ word في حالتك ) بـ TOleContainer إحفظه في الـ stream بإستخدام SaveToStream
يعني هكذا ؟؟؟؟؟
كود :
; (TBlobField(table1.FieldByName('doc')).SaveToStream(memstream)
Lam.Abdeldjalil كتب :ضع القيمة الموجودة في الـ stream في الحقل
لماذا أضعها في الحقل و هي أصلا كانت في الحقل و انا استخرجتها من الحقل الى ال stream يعني في الكود الذي كتبته لك فوق اقوم باستخراج محتوى حقل 'doc من قاعدة المعطيات و اضعه في ال stream يعني لماذا اقوم بالعملية العكسية و ارجعه الى الحقل
Lam.Abdeldjalil كتب :* الإسترجاع الذي تعرفه
أي الحقول التي تحمل قيم مدخلة سابقا دون إستعمال الطريقة المذكورة لا يمكن فتحها ، هل إتضحت الآن ؟
بالتوفيق
اخي جزاك الله خيرا ضع لي كود كامل حتى افهم ،فانا كلما اضع ترتيب معين يظهر لي خطأ ،اذا وضعت olecontainer1.SaveToStream(memstream); في الاول يظظهر لي خطأ " operation not allowed on an empty ole container "
و اذا وضعت OleContainer1.LoadFromStream(memstream); في الاول يظهر الخطا السابق" 1 % " أنا افهم فكرتك جيدا لكن لم استطع تطبيقها .
شكرا أخ Lam.Abdeldjalil
لقد حل المشكل باستعمال الاقتراح الاول مع اني كنت افضل استعمال ال streams