الانتقال إلى المحتوى

خطوات ربط ملف Word بجدول ثم عرضه من الفورم


khaled

Recommended Posts

السلام عليكم ورحمة الله وبركاتة .
هذا مثال مبسط عن كيفية استخدام الـbfile datatype لخزن رابط الملف ولذي سوف يتم عرضه عن طريق الدفلوبر .

الخطوات :
1- انشاء جدول يحوي BFILE Column

create table my_doc (no number , my_doc bfile);


2- تعريف virtual directory للـ physical directory

Create directory 'my_doc' as 'd:\temp';


لاحظ انك قمت بتعريف virtual directory باسم my_doc يشير الى الـphysical directory المسمى d:\temp
على اعتبار ان الملفات الي سوف يتم ربطها بالسجل موجوده في المسار d:\temp
3- الان نقوم بإضافة سجلين للجدول

insert into my_doc values (1,bfilename('my_doc','w1.doc'));
insert into my_doc values (2,bfilename('my_doc','w2.doc'));


وفي المثالين السابقين قمنا بربط ملفي وورد
ملاحظة
سوف يتم خزن مسار واسم الملف فقط وليس الملف , وهذه طريقة افضل من عملية خزن الملف في الجدول لانه سوف يؤثر على اداء البرنامج .
4- الان نصمم function في الداتابيز لاسترجاع اسم الملف مع الـمسار

create or replace function get_name_path(p_no number) return varchar2 
is
  Result varchar2(2000);
  Lob_loc         BFILE;
  DirAlias_name   VARCHAR2(200);
  File_name       VARCHAR2(200);
  P_d             VARCHAR2(200);
BEGIN
  SELECT my_doc INTO Lob_loc 
  FROM my_doc 
  WHERE no = p_no;
  DBMS_LOB.FILEGETNAME(Lob_loc, DirAlias_name, File_name);
  Select directory_path into p_d
 from all_directories
 where upper(directory_name)=upper(DirAlias_name);
  result:=P_d ||'\'||file_name;
  return(Result);
exception 
         when no_data_found then 
              return null;   
end get_name_path;



5- الان انشاء block لهذا الجدول مع الاخذ بعين الاعتبار ان نوع الحقل للـcolumn BFILE هو text item
في الtrigger المسمى when-new-record-instance ضع الكود التالي

:my_doc.my_doc:=GET_NAME_PATH(:MY_DOC.NO);


6- في الـtrigger المسمى WHEN-MOUSE-DOUBLECLICK ضع الكود التالي

DECLARE
 ConvID  PLS_INTEGER;
BEGIN
  ConvID := DDE.App_Begin('D:\Program Files\Microsoft Office2000\Office\WINWORD.exe '|| Get_name_path(:my_doc.no),DDE.APP_MODE_MAXIMIZED	);
END;



ملاحظة
غير المسار التالي

D:\Program Files\Microsoft Office2000\Office\WINWORD.exe 


بمسار برنامج الوورد في جهازك حتى يعمل بشكل صحيح .
وهذا ملف مرفق

BFILE_EXAMPLE.zip

رابط هذا التعليق
شارك

  • الردود 25
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • alsaedi

    2

  • Essam

    1

  • arab20002000

    1

  • khaled

    1

أكثر المشاركين في هذا الموضوع

  • بعد 8 شهور...

الأخ العزيز/خالد
- ذكرت أن الحقل من النوع Bfile سيستخدم في حفظ مسار الصورة فقط الا يكفى استخدام حقل من النوع Varchar2 لهذا الغرض وتصبح العملية أسهل بكثير؟
- هل هذا كل صفات الحقل من النوع Bfile في التعامل مع الملفات الثنائية.
- كيف يمكن وضع المستندات المراد الإتصال بها وهي موجودة بأماكن مختلفة على الجهاز في الدليل الذي حددته (copy_file).
وشكرا لكم

رابط هذا التعليق
شارك

  • بعد 3 أسابيع...

شكراً على هذا البرنامج

ولكن عندي سؤال اريد ان اخزن على السيرفر كل الملفات الوورد او اي ملفات مثل
FMX لكي يتسنى لكل مستخدمين البرنامج تنزيل آخر تحديث ل FMX

يعني اريد ان اتخلص من SHARING

رابط هذا التعليق
شارك

  • بعد 2 سنة...
  • بعد 3 أسابيع...

شكرا لك أخ أمجد
تم تحميل الملف في المشاركة الأصلية مرة أخري
و ارجو من جميع الأعضاء الذين قاموا بتحميل الملفات المفقودة من بعض المواضيع
إعادة تحميلها مرة أخري
و سيتم تحميلها في المشاركة الأصلية
بالتوفيق

رابط هذا التعليق
شارك

  • بعد 4 شهور...

جزاك الله خيرا ................
جزاك الله خيرا ................
جزاك الله خيرا ................
جزاك الله خيرا ................
جزاك الله خيرا ................
جزاك الله خيرا ................
جزاك الله خيرا ................
جزاك الله خيرا ................

رابط هذا التعليق
شارك

  • بعد 7 شهور...

هنالك طريقة سهلة لربط ملف وورد من خارج الداتا بيز
وانا كنت بفكر فيها الى ان وجد الحل

اولا الخطوة الاولى انشاء عمود فى الجدول المراد عرض الوورد فيه
مثلا جدول الموظفين بفرض ان لكل موظف ملف وورد خاص به يحمل معلومات عن الموظف
انشاء حقل فقط للمسار
بفرض ان رقم الموظف هو رقم الملف فى المسار المعين
كتابة تريقر فقط لادراج المسار فى الحقل
:item.file_name:=GET_FILE_NAME(File_Filter=>'all(*.*)|*.*|');
وكتابة تريقر اخر لعرض ملف الوورد

when_butoum_pressed
Declare
filename varchar2(30);
Begin if :my_block.my_item  is not null then
host('d:\Program Files\Microsoft Office\Office11\winword.exe '
||:my_block.my_item);
else message('áÇ ÊæÌÏ ØÑíÞÉ ÊÍáíá ááãÓÊÍÖÑ');
	message ('áÇ ÊæÌÏ ØÑíÞÉ ÊÍáíá ááãÓÊÍÖÑ');
	end if;
end;

رابط هذا التعليق
شارك

  • بعد 8 شهور...
  • بعد 8 شهور...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل

×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية