ارجوا من الاخوة المبرمجين بان لا يبخلوا على بشرح الملفات العشوائية بالتفصيل حيث اننى مبتدأ
واريد ان افهم عمل تلك الملفات وكيفية البحث عن السجلات داخلها حيث ان حجم ها اصغر بكثير من قاعدة البيانات ولكم جزيل الشكر والتقدير
ارجوا من الاخوة المبرمجين بان لا يبخلوا على بشرح الملفات العشوائية بالتفصيل حيث اننى مبتدأ
واريد ان افهم عمل تلك الملفات وكيفية البحث عن السجلات داخلها حيث ان حجم ها اصغر بكثير من قاعدة البيانات ولكم جزيل الشكر والتقدير
تم تعديل هذه المشاركة بواسطة HnHn في 29 مارس 2007 في 08:41
اتمنى منك ان تكتب العنوان في المرة المقبله بالصيغة التي قمت بتعديلها لك وذلك ليساعدنا في عملية البحث للرجوع للموضوع في المستقبل
ماالذي تقصده بالملفات العشوائيه ...
تم تعديل هذه المشاركة بواسطة HnHn في 29 مارس 2007 في 08:46
شكرا اخى الكريم واتمنى من سيادتكم المساعددة
الأخ 'هشام سوبر'
الملفات العشوائية عبارة عن ملفات عادية جدا بيتم وضع فيها بيانات نصية String ، وسميت بالعشوائية نظرا لأن البيانات بتكون متراكمة ورا بعضها بشكل عشوائى ، وكنا قديما بنستعملها مع كويك بيزك مثلا لتخزين البيانات فيها كقواعد بيانات مثل الأكسيس حاليا، واحيانا مع فيجوال بيزك اذا اقتضت الحاجة،
وعلشان تقدر تنشأ ملف عشوائى أول بيتوجب عليك انشاء Type فى الذاكرة ، وهوا أشبة بالمصفوفة ، وبتقوم بتقسيمها للحقول اللى انت عايزها ،
وبعد كدة بتقوم بعملية فتح الملف العشوائى نفسة من خلال أمر Open وبتحدد فية مجموعة من المعاملات مثل اسم الملف و رقم قناة الأتصال المراد فتح الملف عليها (نظرا لأنة يمكنك فتح اكتر من ملف على اكثر من قناة اتصال) ، وقناة الأتصال اشبة بالقناة اللى بتمشى فيها البيانات ما بين الـType المفتوح فى الذاكرة وبين الملف العشوائى اللى حضرتك بتخزن فية البيانات
وتسجيل البيانات فى الملف العشوائى بيكون شبية بالسجلات الموجودة فى الأكسيس مثلا ولكن بتكون متراكمة ورا بعضها ، على سبيل المثال لو عملت حقل طولة 10 حروف وحفظت فية 3 حروف فقط ، هيحفظ ال3 حروف ويكملك باقى ال10 حروف مسافات فاضية ، وبعدها مباشرة تلاقى السجل التانى المحفوظ جنبا الى جنب مع الأول
ولهذا صعب جدا انك تفرق البيانات من بعضها عن طريق فتح الملفات دى فى اى برنامج يعرض النصوص ، لكن يمكنك التعامل معاها بسهولة باستخدام Type الموجود فى الذاكرة
دى فكرة مبسطة عن الملفات العشوائية ، وفى انواع اخرى على فكرة مثل الملفات التتابعية والملفات الثنائية
انتظر المشاركة القادمة بالأكواد ...
تم تعديل هذه المشاركة بواسطة pro_sam في 29 مارس 2007 في 09:43
الاخ الكريم pro_sam شكرا جزيلا لك على اهتمامك بالموضوع ويا ريت تكمل جميلك
وتشرحلى تللك الملفات بالتفصيل الممل لانى محتاجها جدا وقراءت عنها كتير ومش عارف افهمها
وكيف يتم البحث فيها منتظر من كرمك المزيد
الملفات العشوائية من الحاجات اللى بحبها جدا ومن الحاجات اللى كنت بحب اشرحها زمان فى البرمجة لأنها بتعتمد على اللوجيك فى برمجتها زى معظم برامج زمان ايام Dos
عملت لحضرتك مثال عليها تقدر تحملة من المرفقات
والمشاركة القادمة شرح مبسط للأكواد ، لأن شرحها نظرى مش هيكون واضح قوى لكن ان شاء الله تفيدك
بسم الله الرحمن الرحيم
أولا أخى كود الموديول Module
Type prosam N As String * 30 p As String * 10 End Type
والكود دة بيعمل لحضرتك تقريبا زى سجل فى الذاكرة بيتكون من حقلين حقل N طولة 30 حرف ، وحقل P طولة 10 حروف
وافترض انى سميت السجل دة فى الميمورى prosam
واول خطوة بعد كدة انك بتاخد نسخة من التايب دة زى ما بتعمل مع Recordset مثلا فى Dao ودة بالأمر التالى
Global AGCIT As prosam
وعملت النسخة منة اسمها agcit
وطبعا النسخة هيكون بداخلها نفس الحقول الموجودة فى السجل الأصلى ، وتقدر تتعامل معاها
يعنى مثلا لو عايز احط قيمة داخل الحقل N هقولة
agcit.n="www.agcit.com"
وكل التعامل هيكون مع السجل agcit دة
نيجى لكود فتح الملف
Open App.Path & "\AGCIT.TXT" For Random As #1 Len = Len(AGCIT)
طبعا بالترتيب بيتم تحديد :
اسم الملف ومسارة
نوع الفتح وهوا Random
رقم قناة الأتصال وهى رقم 1
طول السجل المراد حفظة فى كل مرة يتم فيها الحفظ
وتلاحظ هنا انى قلتلة خد الطول بتاع السجل اللى انا عملتة اللى اسمة agcit
وكان من الممكن انى اكتب رقم مباشرة مثلا بدل ما اقولة خد طول السجل ، لكن كدة افضل بحيث لو غيرت فى التقسيمة متضطرش تعدل الكود
بالنسبة لكود الحفظ
اولا احب اوضح ليك الأمر LOF باختصار ، وهوا أمر شبية بالأمر Len
لكن الأمر LOF اختصار لـ Len Of File
اى انة بيجيب عدد الحروف الموجودة داخل الملف
وما الفائدة من عدد الحروف
مشكلة الملفات العشوائية انك علشان تضيف سجل جديد لازم تقولة السجل الى يحفظ علية يكون رقمة كام
يعنى لو قلتلة احفظ اول مرة فى السجل رقم 1 ، تانى مرة هقولة برضو احفظ فى رقم 1 ، وبالتالى هيمسح اول سجل ويحط التانى علية
اية الحل ؟
الحل انك تعرف عدد السجلات وبعدين تضيف السجل الجديد فى عدد السجلات القديمة + 1
بمعنى ان لو فى 5 سجلات فى الجدول هيكون السجل الجديد رقمة 5+1
وهكذا المرة التالية 6+1
طيب هتعرف عدد السجلات ازاى ؟ الأمر LOF بيديلك عدد الحروف فى الملف كلة
وبقسمة عدد الحروف كلها على طول السجل الواحد يطلع لحضرتك عدد السجلات
بفرض مثلا ان السجل بتاعى فية 40 حرف
لو انا حفظت 3 سجلات ، اصبح الملف فية 120 حرف
طيب لو انا جيبت الحروف كلها اللى هيا 120 وعملتلها قسمة على طول السجل الواحد اللى هوا 40 ، اصبح
عندى عدد السجلات اللى هيا 3
أرجو تكون واضحة
وطبعا لما بتستخدم الدالة LOF بتذكر بين اقواس رقم قناة الأتصال اللى انت عايز تجيب رقم الملف بتاعها ،
يعنى LOF(1)
x = LOF(1) / Len(AGCIT)
بعد كدة بتحط البيانات داخل السجل الموجود فى الذاكرة
AGCIT.N = Text1 AGCIT.p = Text2
وبعدين بتقوم بعملية الحفظ نفسها باستخدام الأمر PUT وبياخد اولا رقم الملف ، ثانيا رقم السجل واحنا جبنا
عدد السجلات فى المتغير x وبالتالى هقولة x+1 ، وثانيا السجل اللى عايز احفظة فى الملف وهوا agcit
Put #1, x + 1, AGCIT
وبعد كدة رسالة بأنة تم الحفظ وبعدين بمسح التكستات
MsgBox "Data Saved", , "Done" Text1 = "": Text2 = ""
اتمنى يكون الموضوع واضح
لأنك لو حبيت تستخدمها فعلا هتقدر تعمل بيها حاجات كتير ، لأنك لو اتمكنت منها هتقدر تعمل حاجة أشبة بالـRecordSet مثلا ، وكل جدول هيكون فى ملف وحجمة لانهائى ، ويكفى انك تقدر تشغل البرنامج بتاعك على اى جهاز حتى لو كانت بنتيوم 1 ونظام تشغيل دوس
مع العلم انك ممكن تصدر التقارير بتاعتك بأشكال مختلفة زى مثلا HTML وتستخدمة فى التنسيق والطباعة
لكن دة يتطلب منك تمكن شوية طبعا
المشاركة القادمة كود البحث ان شاء الله
أولا تعريف متغير ولازم يكون طولة بنفس طول الحقل اللى انت هتستدعى بدلالتة ، بمعنى ان الحقل agcit.n طولة 30 يبقى المتغير دة كمان لازم يكون طولة 30 ، ولو معملتوش بنفس الطول هتضطر تستخدم الأمر Trim لإزالة المسافات عند الأستدعاء
Dim z As String * 30
z = InputBox("Enter Name")تانى حاجة هتعمل عداد يعدى على كل السجلات يبتدى من 1 لحد عدد السجلات كلها
وزى ما قلنا فى الحفظ هتجيب عدد السجلات بنفس الطريقة السابقة
For x = 1 To LOF(1) / Len(AGCIT)
الأمر اللى بيقوم باستدعاء السجل الى الذاكرة
وبيطلب منك رقم الملف ، رقم السجل اللى عايز تجيبة ، السجل فى الذاكرة اللى عايز تستقبل فية البيانات اللى جاية من الملف العشوائى
Get #1, x, AGCIT
وبعد كدة بتعمل مقارنة بين الحقل اللى تم استدعاءة فى السجل داخل الذاكرة وبين القيمة اللى عايز تستدعيها ، واذا كانو متساويين طبعا بتحط البيانات فى التكست بوكس
If AGCIT.N = z Then Text1 = AGCIT.N Text2 = AGCIT.p MsgBox "Done" Exit Sub End If
وبعدين تقفل العداد
Next
ولو الجهاز جة هنا طبعا معناها انة لم يجد السجل اللى بيبحث عنة ، لأن لو وجدة كان نفذ الأمر exit sub ومكانش هييجى هنا
اذا هتمسح التكستات وتقولة انة مش موجود
Text1 = "": Text2 = "" MsgBox "Name Not Found"
وبكدة تبقى قدرت تفتح ملف وتحفظ وتستدعى
والأفكار بالنسبة للنوعية دى من الملفات أو الملفات التتابعية او الثنائية لا تنتهى زى ما قلتلك قبل كدة مثلا فى موضوع التقارير بHTML
وزى مثلا لو عندك ملف حجمة كبير جدا ازاى تقدر تعمل البحث بطريقة اسرع بحيث انك تستدعى السجلات من اكتر من اتجاة فى نفس الوقت
حقيقة انا استمتعت بكتابة الكلام دة ، لأنك رجعتنى لأيام البرمجة الشيقة وابتكار الأفكار ...
أتمنى اكون أفدتك
مشكور اخى الكريم على الشرح الرائع وياريت حد يقولى كيفية البحث عن السجلات
HnHn كتب:برافو اخ pro_sam ... الآن فهمت ما الذي كان يريد الاستفسار عنه الاخ هشام .. واعتقد انك كفيت ووفيت بشرح الله يعطيك عافيه
الله يكرمك ، من بعض ما عندكم
اقتباسمشكور اخى الكريم على الشرح الرائع وياريت حد يقولى كيفية البحث عن السجلات
أتمنى انك تقرا اللى انا كتبتة
بصراحة انا مش عارف اشكرك ازى
ولكن اقدر اقولك
ربنا يوفقك
ويعينك على مساعدة الناس
جعله الله فى ميزان حسناتك
كيف اتنقل بين السجلات
استطعت و الحمد لله عمل ازرار التنقل بين السجلات ولكنن الان يتبقى كيفية حذف سجل ما
الأخ الفاضل ... راجع: كيف افتح عدة مسارات في نفس الوقت
Nothing is impossible, the word impossible itself says that: I M - Possible
هذا الموضوع مغلق.