1. طرح السؤال
في مشروع حديث، واجهت مشكلة في تشغيل ASP لجداول مكتبة FoxPro (*.DBF). في الواقع، هناك بالفعل العديد من البرامج التطبيقية التي تستخدم جداول DBF، وقد تركت كيفية استخدام هذه البيانات في بيئة الشبكة العديد من الأصدقاء في حيرة من أمرهم.
لقد قمت أيضًا بفحص الكثير من المعلومات ولم أجد شرحًا تفصيليًا للحل. بعد الاختبار، قمت بحل هذه المشكلة في البداية وسوف أشاركها مع الجميع.
تحاول هذه المقالة حل المشكلات التالية:
1. ينضم ASP إلى الجدول المجاني (ملف *.dbf) الذي تم إنشاؤه بواسطة FoxPro
2. قم بتخزين أنواع متعددة من ملفات البيانات والرسومات في جدول dbf في نفس الوقت
(يتوفر نموذج البرنامج من Set conn = Server.CreateObject("ADODB.Connection")
connstr = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;"&_
"SourceDB =" & Server.MapPath(db) &";Exclusive=No"
conn.Open connstr
في الكود أعلاه، البيانات هي المسار النسبي حيث يوجد ملف DBF الخاص بي (بالنسبة للملف الذي يوجد به هذا الرمز)، ويتم تحويله إلى مسار مطلق من خلال Server.MapPath(db).
يوفر http://www.connectionstrings.com سلاسل اتصال للعديد من أنواع ملفات جدول المكتبة، بالنسبة لملفات DBF، فإن سلاسل الاتصال المقدمة هي:
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:mydbpath;"
لم أقم بالاتصال بنجاح باستخدام سلسلة الاتصال هذه ولم أجري المزيد من الاختبارات. يمكن للأصدقاء المهتمين تجربة السلسلة المذكورة أعلاه.
www.downcodes.com
2. قم بتعريف اسم الجدول في عبارة SQL
يمكنك الإعلان عن اسم الجدول الذي سيتم تشغيله في عبارة SQL على شكل [اسم الجدول] أو [اسم الجدول.امتداد]. على سبيل المثال، اسم ملف الجدول هو t1.dbf، وعبارة SQL هي:
حدد * من [t1] أو حدد * من [t1.dbf]
3. عمليات تخزين أنواع مختلفة من البيانات
لا يدعم DBF العديد من أنواع البيانات، ومن بينها تجدر الإشارة إلى التاريخ (نوع التاريخ)، والمذكرة (نوع الملاحظة)، والعامة (النوع العام). نركز هنا على بيانات نوع البيانات، ويتم استخدام أنواع Memo وGen عند تخزين ملفات الرسومات، وهو ما سيتم شرحه لاحقًا.
بشكل عام، أستخدم طريقتين لكتابة عمليات قاعدة البيانات، إحداهما هي استخدام عبارة الإدراج، والأخرى هي استخدام طريقة addnew، بالنسبة لجداول DBF، تختلف هاتان الطريقتان قليلاً.
عند استخدام عبارة الإدراج، يرجى ملاحظة أن تنسيق كتابة بيانات نوع التاريخ هو {^yyyy-mm-dd}، وأن المحدد يختلف عن # في Access وSQL Server's'. عبارة SQL المحددة هي:
أدخل في قيم [t1.dbf] (الاسم، عيد الميلاد) ('MyName'، {^1970-1-1})
عند استخدام طريقة addnew، كان الكود الذي استخدمته في الأصل هو:
rst.open "[t1]"،conn,0,3
rst.addnew
rst(0).القيمة = "اسمي"
أول (1).القيمة = {^1970-1-1}
rst.update
rst.إغلاق
لا توجد مشكلة عند تشغيل SQL Server وAccess، ولكن توجد مشكلة عند تشغيل ملفات DBF. وبعد التجربة وجدت الطريقة الصحيحة:
SQL = "اختر * من t1"
rst.open sql,conn,0,3
rst.addnew
rst(0).القيمة = "اسمي"
أول (1).القيمة = {^1970-1-1}
rst.update
rst. Close
يرجى ملاحظة أن الفرق بين جزأين التعليمات البرمجية أعلاه موجود بشكل أساسي في عبارة SQL. كما ذكرنا من قبل، في عبارات SQL، يمكنك الإعلان عن ملفات الجدول في شكل [اسم الجدول] أو [اسم الجدول.dbf]، ولكن عند استخدام طريقة addnew، لا يمكن أن يكون لاسم الجدول امتداد ولا يمكن إضافة أقواس مربعة، وإلا فإنه سيطالبك "ليس اسم جدول بسيط، لا يمكن تحديثه".
4. تخزين الملفات الرسومية
في جدول DBF، يمكن استخدام كل من المذكرة والحقول العامة لتخزين الرسومات والصوت والفيديو والنصوص والملفات الأخرى (يرجى الرجوع إلى http://www.chinadesign.com.cn/NewsContents1.asp?id=2663 ). هنا، قمنا بتعيين نوع الحقل إلى مذكرة (ثنائية) (نوع التحضير الثنائي)، واستخدم طريقة rst(n).AppendChunk() لكتابة البيانات الثنائية للصورة الناتجة، واستخدم طريقة Response.BinaryWrite() لاستعادة الملف الثنائي البيانات إلى الصورة. هناك العديد من المقالات المتعلقة بتخزين الصور، لذا لن أخوض في التفاصيل هنا.
أما بالنسبة لاستخدام الحقل العام لتخزين الصور فقد جربته ولم ينجح فلم أعد المحاولة مرة أخرى.
5. حذف البيانات
يمكنك استخدام عبارة الحذف لحذف البيانات، ولكن عند فتح ملف الجدول بعد الحذف، تجد أن البيانات تم وضع علامة عليها للحذف فقط ولم يتم حذفها فعليًا من الجدول. في Foxpro، استخدم أمر الحزمة لحذف البيانات نهائيًا. بعد التحقق من بعض المعلومات، قيل أن VB لا يمكنه تنفيذ عملية الحزمة، وبالطبع لا يستطيع VBS تنفيذها. الحل العام هو استيراد البيانات الموجودة في الجدول (بدون علامة الحذف بالطبع) إلى جدول جديد بين الحين والآخر، وحذف الجدول الأصلي، ثم إعادة تسمية الجدول الجديد إلى اسم الجدول الأصلي.
6. يتم تخزين البيانات والصور في قاعدة البيانات في نفس الوقت
وهذه المشكلة ليست ضمن نطاق هذا المقال، فهناك العديد من المقالات على الإنترنت التي تقدم الحلول سأذكرها هنا بالمناسبة.
لقد قمت بتنفيذ هذه الوظيفة باستخدام برنامج التحميل بدون مكونات "Huajing". قد يتساءل بعض الأصدقاء عما إذا كان تحميل "Huajing" مكتوبًا كملف ولا توجد طريقة لتخزينه في قاعدة البيانات. ليس سيئًا، ولكن مع تغيير بسيط، يمكنك الحصول على البيانات الثنائية للصورة ثم تخزينها في قاعدة البيانات. في المثال الخاص بي، تم التعليق على التغييرات في برنامج البيئة، يرجى الرجوع إليها.
4. الاستنتاج
تتناول هذه المقالة بشكل أساسي تشغيل ASP لجداول DBF المجانية. إذا كانت مكتبة DBC، فسيتم تقديم سلسلة الاتصال المقابلة في inc/conn.asp في المثال.
في هذه المرحلة، أعتقد أن الأصدقاء لديهم فهم عام لتشغيل جداول DBF، بالإضافة إلى الأمثلة التي قدمتها، أعتقد أنه يمكنك تطوير المزيد من الوظائف.
حظ سعيد!