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

[ تمت الإجابة ]الـ INDEX العجيب

بدأه barcaman17 في 27 يناير 2012 · 6 رد · 996 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

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

وهذا البرنامج ايضا/ارجو الافادة مع الشكر الجزيل

CLOSE TABLES

SET SAFETY OFF

SET TALK OFF

SET DATE BRITISH

SET CENTURY ON

SELECT 1

USE MASTER

INDEX ON M_STFNO TAG A

SELECT 2

USE CALC_F

INDEX ON H_STFNO TAG B

SELECT 3

USE CALC_RTRDED

ZAP

APPEND FROM CALC_F

INDEX ON H_STFNO TAG C

SELECT 4

USE MONTHNM

INDEX ON M_NO TAG D

MON=MONTH(DATE())

SELECT 4

SEEK MON

IF FOUND()

SELECT 3

REPLACE ALL M_MON WITH D.M_NAME

ENDIF

**********************************

SELECT 3

GO TOP

DO WHILE !EOF()

SELECT 1

SEEK C.H_stfno

?C.H_STFNO

IF FOUND() &&AND M_STATUS<>'C' AND M_PACD<>'Z'

SELECT 3

REPLACE DEPT WITH A.DEPT

REPLACE LCD WITH A.LCD

*SKIP

*LOOP

ELSE

SELECT 1

INDEX ON M_STFNOOLD TAG A

SEEK C.H_stfno

IF FOUND()

SELECT 3

REPLACE NOTE WITH 'ÇáÑÞã ÇáÞÏíã'

REPLACE DEPT WITH A.DEPT

REPLACE LCD WITH A.LCD

ELSE

SELECT 3

REPLACE NOTE WITH 'ÇáÑÞã ÛíÑ ãæÌæÏ'

ENDIF

ENDIF

SELECT 1

INDEX ON M_STFNO TAG A

SEEK C.H_stfno

IF FOUND() AND M_STATUS='C'

SELECT 3

REPLACE M_C WITH A.M_STATUS

REPLACE NOTE WITH 'ãÛáÞ'

*SKIP

*LOOP

ENDIF

SELECT 1

SEEK C.H_stfno

IF FOUND() AND M_PACD='Z' AND M_STATUS<>'C'

SELECT 3

REPLACE M_Z WITH A.M_PACD

REPLACE NOTE WITH 'ãÚáÞ ãÇáíÇ'

*SKIP

*LOOP

ENDIF

SELECT 1

SELECT 3

SKIP

ENDDO

نسيت انوه عن الملف الي يتضخم به حجم الا ندكس وهو الماستر MASTER

#2

الرجاء الى الخبراء هل من مجيب

#3

مبدئيا يصعب افادتك بهكذا موضوع دون وجود الجداول.

وبغض النظر عن الجداول وحجمها

فأنت تقوم بعمل Index جديد للجدول المسمى Master في اللوب ( DO WHILE )

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

جرب التالي :

قم بعمل الـ Index مرة واحدة فقط عند استخدام الجداول لكافة الحقول المراد البحث فيها ويستحسن تسمية الـ Tag بنفس اسم الحقل

Select Master
INDEX ON M_STFNO TAG M_STFNO
INDEX ON M_STFNOOLD TAG M_STFNOOLD

ثم قم باستدعاء الفهرس المطلوب بواسطة الأمر Set Order To YourFeild

SELECT MASTER
Set Order To  M_STFNO
Seek....
أو 
Set Order To  M_STFNOOLD
Seek....
1

أستغفر الله العظيم و أتوب إليه

#4
Shadowz كتب:

مبدئيا يصعب افادتك بهكذا موضوع دون وجود الجداول.

وبغض النظر عن الجداول وحجمها

فأنت تقوم بعمل Index جديد للجدول المسمى Master في اللوب ( DO WHILE )

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

جرب التالي :

قم بعمل الـ Index مرة واحدة فقط عند استخدام الجداول لكافة الحقول المراد البحث فيها ويستحسن تسمية الـ Tag بنفس اسم الحقل

Select Master
INDEX ON M_STFNO TAG M_STFNO
INDEX ON M_STFNOOLD TAG M_STFNOOLD

ثم قم باستدعاء الفهرس المطلوب بواسطة الأمر Set Order To YourFeild

SELECT MASTER
Set Order To  M_STFNO
Seek....
أو 
Set Order To  M_STFNOOLD
Seek....

السلام عليكم

اخي العزيز الاخ شادو له الاجابة الكامله

واضيف سبب التعطيل الثاني هو حجم الجدول بطبيعة الحال

وعند عمل فهرسة للجدول (index) بهدف عمل بحث لهُ

نقوم بعدها بتجهيز الحقل المراد البحث عنة ونعمل له عند الطلب (set order to )

وبعدها نعمل بحث للحقل المفهرس او ما يمثل قيمته مثلا في تكست او input او متغير (seek text)

وبعدها ياتي الشرط او اي طريقة تعتمدها

لاحظ في موضوع سابق في المنتدى حول seek

تحياتي للجميع

1
#5

المنتدى لهو شمعتا هما

شادو وليون

ادامك الله لنا

#6

السلام عليكم

الاخوة الخبراء

شكرا جزيلا لكم على المعلومات المهمة

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