الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إستيراد ملف txt ووضعه في جدول

مغلق
بدأه Mohamed Galal في 4 نوفمبر 2005 · 11 رد · 5,683 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

جميع الأساتذة الكرام

عيد سعيد عليكم جميعاً - والسلام عليكم ورحمة الله وبركاته

الفكرة تعتمد علي إدراج ملف نصي داخل قاعدة البيانات في جدول

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

السؤال

كيف أجل هذا بزر أمر لكي يتسني جعله في برنامج التشغيل التلقائي

لأن هذا يجعلني أفك البرنامج او أجعل البرنامج مفتوح بصفة مستمرة

ولكم مني جزيل الشكر

م / محمد جلال

#2

اخي الكريم

السلام عليكم ورحمة الله وبركاته

هل الملف النصي عباره عن كلمات مكتوبه اي جملة واحدة في النص مثل

اخواني الاعزاء

السلام عليكم ورحمة الله وبركاته

كل عام وانتم بخير

ارغب في جعل هذا النص يكون في جدول

ام مثل هذا

الاسم : ..................

الرقم : ...................

الوظيفة : ................

وهكذا

بمعنى على شكل حقول توضع في الجدول

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

اذا كان هناك امكانية في ادراج ملف او مثال يكون افضل

#3

الأستاذة الفاضلة / زهرة

بعد السلام عليكم ورحمة الله وبركاته

شكراً علي تفضلك الكريم بالإجابة

ومرسل ملف البرنامج وملف txt

أخيكم

محمد جلال

txtmdb.rar

م / محمد جلال

#4

الأستاذة الفاضلة / زهرة

لقد أرسلت لحضرتك الملف المطلوب وجزء من البرنامج وبداخله الملف الذي يتم إدراج البيانات به

فأرجو توضيح كيفية الإدراج بزر أمر

وهذا الملف txt بداخله أرقام مع توضيح مثال آخر بكيفية الأدراج بملف كلمات

ولكي مني ومن الأخوة كل تحية وسلام

أخوكم

محمد جلال

م / محمد جلال

#5

اخي الكريم محمد جلال

وبقية الاعضاء الكرام

السلام عليكم ورحمة الله وبركاته

من اجل انشاء زر امر يقوم بإستيراد الملف النصي فلابد ان يمر الامر على كثير من المراحل المعقده بعض الشيء ولا تعتقد انه بكل بساطه

انشاء زر امر يقوم بالاستيراد فقط ولكن اليك الطريقه بالتفصيل لك ولبقية الاعضاء وآمل من الله ان يستفيدوا منها في برامجهم .

اولا : ترتيب الاحداث

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

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

مثال :

الجدول التالي SysInfo يحتوي على الحقول التالية

حقل TheDate .......................... نوع البيانات تاريخ/وقت

حقل TheStringTime .............. نوع البيانات تاريخ/وقت

حقل PinCode ......................... نوع البيانات نص

حقل datafile ........................... نوع البيانات نص

حقل Status .............................. نوع البيانات نص

الان نقوم بعمل جدول SysInfoBack بالكود مشابه تماما لهذه المواصفات مع اختلاف الاسماء ( حتى لا يتم التعارض اثناء عملية الالحاق ) لنرى هذا الكود .

DoCmd.RunSQL "CREATE TABLE SysInfoBack ([F1]date,[F2]date,[F3]text,[F4] text,[F5] text);"

نلاحظ من خلال الكود انه تم استدعاء الامر RunSQL التي سوف تقوم بإنشاء الجدول المؤقت SysInfoBack حسب الحقول ونوع البيانات التالية :

حقل F1 ......................... نوع البيانات تاريخ/وقت

حقل F2 ......................... نوع البيانات تاريخ/وقت

حقل F3 ......................... نوع البيانات نص

حقل F4 ......................... نوع البيانات نص

حقل F5 ......................... نوع البيانات نص

مشابه للجدول السابق مع اختلاف اسماء الحقول اذن هذه اولى الخطوات تم الانتهاء منها بسلام وبإمكانك التأكد منذلك بوضع هذا الكود في زر امر وفي حدث عند النقر سيتم انشاء الجدول بكل سهوله .

2. الملف النصي

كما يعلم الجميع ان الملف النصي لا يتقيد بتنسيق معين ولا يوجد له رؤوس اعمده او حقول ثابته يمكن الاستناد اليها لهذا نلجأ الى فكرة

الاستيراد المباشر من خلال الامر التالي ووضعه في الجدول المؤقت SysInfoBack لحين الانتهاء من عملية الحاق البيانات في الجدول الرئيسي ومن ثم حذفه لنرى هذا الكود .

DoCmd.TransferText acImportDelim, "", "SysInfoBack", "C:\txtmdb\Tt102005.txt", False, "", 
51256

كما نلاحظ هنا انه تم استدعاء الدالة الخاصه بإستيراد الملفات النصيه وهي TransferText acImport الى الجدول المؤقت

SysInfoBack الذي قمنا بإنشاؤه سابقا من الملف النصي Tt102005.txt الموجود على محرك الاقراص C والموجود في المجلد txtmdb وسيكون بهذه الصيغة C:\txtmdb\Tt102005.txt ونجد ايضا كلمة False وهي تخبرنا ان الملف النصي لا يوجد به رؤوس اعمده او حقول كما في ملفات الوورد ولكن اذا وجد ان هناك رؤوس اعمده يتم استخدام الدالة True واخيرا وهذا المهم حيث يخطأ الكثير وتظهر اخطاء دائما في عمليات التصدير والاستيراد في اخر الكود حيث يعبر الرقم التالي 51256 الى مخطط الشيفره وهي العربية من خلال الرقم 1256 والرقم 5 هو التحديد التلقائي وتستطيع استخدام الرقم 1256 بدون التحديد التلقائي ولكن يفضل طالما انك ستعمل على نسخة عربية اما الانجليزيه فهي 1254 . اذن انتهينا من كود استيراد بيانات ملف نصي الى جدول مؤقت وبإمكانك التجربه من خلال انشاء زر امر استيراد ووضع هذا الكود به لتراه يعمل بكل سهوله طالما انه مستوفي للشروط من وضع الملف النصي في مكانه الصحيح واسم الجدول الصحيح .

3. الحاق البيانات من الجدول المؤقت الى الجدول الرئيسي

دعونا نتأمل هذا الكود وطريقة الحاق البيانات برمجيا

DoCmd.RunSQL "INSERT INTO SysInfo ( TheDate, TheStringTime, PinCode, datafile, Status ) 
SELECT SysInfoBack.F1, SysInfoBack.F2, SysInfoBack.F3, SysInfoBack.F4, SysInfoBack.F5 
FROM SysInfoBack;"

كما نلاحظ هنا من خلال استدعاء دالة RunSQL التي سوف تقوم بإلحاق البيانات من الجدول المؤقت SysInfoBack الى الجدول الرئيسي SysInfo من خلال دالة الاستعلام INSERT INTO SELECT FROM ويمكن عمل هذا يدويا من خلال

الاستعلام ولكن يتوجب عليك نقل الكود من حقل SQL الى VBA ( محرر الفيجول بيسك للتطبيقات ) الان انتهينا من عملية صنع الكود

وبإمكانك تجربة الكود في وضعه في زر امر ليقوم بعملية الحاق مباشرة بدون انشاء استعلام وهذه النقطة بالذات تفيد لمن يريد حماية برامجه بدلا من انشاء استعلامات بل يتم وضعها في كود كامل ومن ثم حمايتها ويعتبر هذا احد انواع حمايات الاستعلام ( حماية الاستعلام بالكود ) .

4. حذف الجدول المؤقت

طالما اننا قمنا بهذه الخطوات السابقة وكانت الامور على مايرام فلم يعد يلزمنا الجدول المؤقت SysInfoBack ولا البايانت التي بداخله فقد تم الحاقها الى الجدول الرئيسي SysInfo لهذا سنضع هذا الكود في اخر الاوامر السابقة .

DoCmd.DeleteObject acTable, "SysInfoBack"

ماذا يعني هذا الكود ؟ يعني بكل بساطة استدعاء الدالة الخاصة بحذف احد مكونات قاعدة البيانات وهي هنا الجدول المؤقت SysInfoBack بإمكانك تجربة هذا الكود على جداول تقوم بإنشاءها للفحص Test وتتدرب على هذه الدوال .

الان تقريبا انتهينا من العمل الرئيسي والمهم وباقي لدينا بعض الخطوات .

كلنا يعلم انه عند تشغيل اي استعلام تظهر لنا رسائل مزعجه وتنبيهات وتحذيرات مثل :

" سيتم الحاق عدد من السجلات هل ترغب في ذلك " .......... نعم ارغب في ذلك اذن اضغط لو سمحت على رز الامر موافق .

" حاسب حاسب سيتم حذف عدد من السجلات هل ترغب في ذلك " .......... نعم ارغب في ذلك اذن اضغط لو سمحت على رز الامر موافق .

" سيتم تشغيل استعلام انشاء جدول هل ترغب في ذلك " .......... نعم ارغب في ذلك اذن اضغط لو سمحت على رز الامر موافق .

وبعدين مع هذه الرسائل المزعجه ........ اذن الحل الوحيد هو وضع كود يقوم بالقضاء عليها جميعا لفترة مؤقته ثم نعيد تشغيل الرسائل لانها تفيدنا في اماكن اخرى .

يوضع هذا الكود في بداية الدالة مباشرة في الجزء العلوي الكود التالي ليقوم بإيقاف اي رسالة تحذير تظهر .

DoCmd.SetWarnings False

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

DoCmd.SetWarnings True

نقوم الان بتجميل الكود بوضع رساله تفيد بإتمام عملية ونجاح استيراد البيانات كاالتالي

MsgBox "مبروك تم استيراد البيانات بنجاح", vbOKOnly

اذن اصبح شكل الكود كاملا نستطيع وضع جميع هذه الاكواد في زر امر,وليكن اسمه مثلا Import وسيتم التنفيذ دفعة واحده كالتالي

Private Sub Import_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "CREATE TABLE SysInfoBack ([F1]date,[F2]date,[F3]text,[F4] text,[F5] text);"
DoCmd.TransferText acImportDelim, "", "SysInfoBack", "C:\txtmdb\Tt102005.txt", False, "", 
51256
DoCmd.RunSQL "INSERT INTO SysInfo ( TheDate, TheStringTime, PinCode, datafile, Status ) 
SELECT SysInfoBack.F1, SysInfoBack.F2, SysInfoBack.F3, SysInfoBack.F4, SysInfoBack.F5 
FROM SysInfoBack;<span style='color:red'>" DoCmd.DeleteObject acTable, "SysInfoBack"
DoCmd.SetWarnings True
MsgBox "مبروك تم استيراد البيانات بنجاح", vbOKOnly
End Sub

بسم الله ما شاء الله ولا قوة الا بالله العين تحرسك وبرشا برشا

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

حسنا كل ما هنالك ان نضع هذا الكود لمشاهدة الجدول المستورد

Private Sub ViewTable_Click()
DoCmd.OpenTable "SysInfo", acViewPreview
End Sub

حيث ان ViewTable هو اسم زر الامر

الله الله ايه الحلاوة دي بصراحة ربنا اول مره اشوف جدول زي ده هو تقرير والا جدول .

لا يا ابني هذا جدول ولكن تم استخدام الدالة acViewPreview بدلا من الدالة acViewNormal

وماذا بعد ؟

اخر خطوة في هذا العمل نضع زر امر للخروج من البرنامج

Private Sub END2_Click()
MsgBox " شكرا لإستخدامك  " & vbCrLf & vbCrLf & _
" هذا البرنامج " & vbCrLf & vbCrLf & _
" مع السلامة " & vbCrLf & vbCrLf & _
" أختكم زهره ", vbOKOnly + vbMsgBoxRight + vbExclamation
DoCmd.Quit
End Sub

وهذا ملف مرفق به كل الخطوات

txtmdb.rar

اختكم

زهره

تم تعديل هذه المشاركة بواسطة zahrah في 13 نوفمبر 2005 في 19:32

1
#6

اختي الفاضلة زهرة

السلام عليكم ورحمة الله وبركاته

اسأل الله الحي القيوم ذا الجلال والإكرام أن يجزيك عنا خير الجزاء وأن يجعل ماتقدمينه من علم نافع في ميزان حسناتك وأن يحرم يديك التي كتبت ذلك على النار وأن يثبتنا وإياك ووالدينا وجميع المسلمين بالقول الثابت في الحياة الدنيا وفي الآخرة

#7

الأستاذة الفاضلة / زهرة

السلام عليكم ورحمة الله وبركاته - جزاك الله عنا خير جزاء وألف ألف شكر علي ما تقدمينه من خير

انا جربت البرنامج ووجدته تمام - ولكني عندما قمت بحذف البيانات من الجدول ثم أعدت التجربة وجدته لا يضع أي بيانات علي الرغم من تحميل عدد الصفوف - خرجت جربت البرنامج تاني من جديد وجدت أنه يحمل إلي يوم 11/10/2005 فقط والباقي فاضي صفوف فقمت بتجربة أن الملف يكون نفس الإتجاه tehdate يكون قصادها f1 وهكذا ولكن دون جدوي - جربت شهر جديد وجدته يضيفه علي القديم فاضي ايضاً والنسخة التي أتعامل بها offise xp يمكن تكون هي المشكلة فيها عموماً أنا بحاول أعرف المشكلة ولنا والحمد لله عرفت فكرة الكود المرسل من سيادتك ويا ريت حضرتك تشوفي ما هي المشكلة فلا بد من حذف الشهر القديم كي يتسني وضع الشهر الجديد وعدم ظهور الصفوف خالية من البيانات ............................. ولك ولكل الأخوة الأفاضل .......... ألف سلام،،

أخيكم

محمد جلال

م / محمد جلال

#8

السلام عليكم ورحمه الله وبركاته ،،،

كل عام وأنتم بخير .... أحببت أن أضع طريقة ثانية لاستيراد الملفات بصيغة التكست بعد إذن المشرفة المبدعة الأخت / زهرة.

فتوجد لدى طريقة إخرى إن شاء الله تفيد وما إكتسبناها إلا بفضل الله ثم بفضل المشرفين المـوقرين في هذا المنتدي الرائـع .

وسوف أحـاول بقدر الأمكـان أخي / محمد جلال توضيح الطريقة وهي كالتالي :-

1- نقوم بوضع المجلد الذى يحتوى على ملفات بصيغة تكست فايل في السواقة سـي .

2- نقوم بفتح ملف الأكسس ونقوم بعمل إستيراد ونطلب الملف المراد استيراد البيانات منـه .

3- سوف تظهر شاشة المعالج نختار منها محدد ثم نقوم بالضغط على التالي .

4- نقوم باختيار ( فاصلة ) ونقوم بعدها بالضغط على التالي .

5- نختار جدول جديد ونقوم بالضغط على التالي .

6- نقوم الأن بالضغط على خيارات متقدمة .

7- سوف نرى محتويات الملف نقوم بتسمية الحقول حسب ما نريدها أن تظهر لنا بالجدول + إختيار نوع البيانات (نص )

ونتركه غير مفرس اي نختار كلمة ( لا ) والحقل الزائد

الذى يظهر ولا نريده نكتفي بوضع علامـة ( صح ) أمـام في عمـود تخطي .

9- نقوم الان باختيار اللغة العربية ومخطط الشفرة العربية .

10- نقوم بحفظ المواصفة وذلك بالضغط على حفظ باسم .

11- نقوم بتسمية المواصفة والأفضل أن تكون بنفس اسم الجدول Tt102005 .

12- نقوم بالضغط على التالي ومن ثم التالي ونتركه ( بلا مفتاح أساسي ) وبعد ذلك إنهـاء .

13- نقوم الأن بفتح قاعدة البيانات و نختار وحدات المـاكرو .

14 - نقوم بانشاء ماكرو جديد مواصفاته كالتالي :

في الاجراء نختار ( DeleteObject )

في نوع الكائن نختار ( جدول )

في اسم الكائن نختار اسم الجدول ( Tt102005 ) .

بعد ذلك نقوم بحفظ الماكرو ونسميه مثلاً DelTt102005

15-نقوم بانشاء ماكرو جديد مواصفاته كالتالي :

في الإجراء نختار (TransferText )

نوع النقل ( استيراد المحدد )

اسم المواصفة نختار ( Tt102005 )

اسم الجدول نقوم بكتابة ( Tt102005 )

اسم الملف نكتب التالي مع مراعاه كتابة الامتداد بشكل صحيح

C:\TXTMDB\Tt102005.Txt

بعد ذلك نقوم بحفظ الماكرو نسمية مثلاً RunTt102005

16- نقوم بانشاء ماكرو جديد مواصفاته كالتالي :

في الإجراء نختار ( RunMacro )

اسم الماكرو نختار ( DelTt102005 )

بعد ذلك نقوم بعمل إجراء آخر

في الإجراء نختار ( RunMacro )

اسم الماكرو نختار ( RunTt102005 )

بعد ذلك نقوم بحفظ الماكرو باسم مثلاً ( UpDa )

ملاحظة [ لابد ان يكون الماكرو الخاص بالحذف قبل الماكرو الخاص بجلب البيانات ]

وبهذا عند الضغط على الماكرو ( UpDa ) سوف يقوم بمسح جدول ( Tt102005 ) من قاعدة البيانات وسوف يقوم باحضار الجدول ( Tt102005 ) من السواقة سي

ووتحدث البيانـات .

أتمني أن يكون الشرح وافيا وآسف على الأطـالة ....

أبو نـوف

txtmdb_02.rar

#9

جزاك الله خيرا اخي ابو نوف على هذا الشرح الوافي وهذه الطريقة .

ان الاستاذ جلال يعرف هذه الطريقة اليدويه المطولة التي تنعدى خطواتها اكثر من 16 خطوه وهذه الطريقة مرهقه وهذا ما يعاني منه فعلا الاستاذ محمد جلال ولهذا اراد ان يختصر ويضع كل هذه الخطوات في زر امر واحد لا تتعدى خطواتها 4 خطوات يتم تنفيذها دفعة واحدة وكما تعلم ليس من سبيل الا عن طريق الكود والبرمجة .

لو كان الاخ محمد جلال يريد هذه الطريقة التي انت ذكرتها اخي ابو نوف لكان ابلغنا ولتم شرحها له ولكنه ارادها عن طريق الكود عموما اخي ابو نوف لا أقول الا الف شكر عل الشرح والافادة وجزاك الله خيرا على ما قدمت .

اختكم

زهره

#10

اخي الكريم محمد جلال

لقد تم تجربة الملف على عدد من الاجهزه وهو يعمل بصورة جيده وقد تم استيراد 3941 سجل من الملف النصي

من 1

01/10/2005,06:22:37,71547 ,112,1

الى 3941

31/10/2005,22:53:31,71325 ,116,1

ملاحظة : تم برمجة مسار الملف النصي C:\txtmdb\Tt102005.txt ليكون في بهذا الشكل وتستطيع تغيير المسار لو اردت .

قد يكون انك تستخدم نسخة قديمه من الملف النصي تأكد من مسار الملف النصي بشكل جيد

تم تعديل هذه المشاركة بواسطة zahrah في 15 نوفمبر 2005 في 20:43

#11

الأستاذة الفاضلة / زهرة

متشكر جداً لقد أتمت العملية بنجاح بعد التأكد من كل المسارات

ولك جزيل الشكر

ورسالة الأخ pc10001

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

ولسيادتك وله ألف شكر

علي فكرة هذا البرنامج يتم أخذ بياناته من برنامج دولفي ( برنامج بصمة للموظفين ) يتم إخراج البيانات علي هيئة ملف نصي ثم أقوم بأخذ نسخة منه فقمت بتصميم برنامج تقارير بسيط لكي يتسني طباعة البيانات

أخيكم

محمد جلال

م / محمد جلال

#12

الف شكر تحياتي

هذا الموضوع مغلق.

مواضيع مشابهة