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

[ تمت الإجابة ]ماهي طريقة جمع او دمج محتويات مجموعة جداول من نفس النوع في جدول واحد

بدأه jmjms في 30 مايو 2014 · 16 رد · 1,175 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

من حيث الاعمدة ونوعها ولكن تختلف بالاسم

دمجها في ملف بدون استدعائها بالاسم بغض النظرعن  عدد الملفات

مثلا هذه الطريقة ولكن لم تنجح

USE TABLE1.dbf

APPEND FROM jmjms\*.dbf

حيث ان jmjms هو اسم الملف الذي يحتوي جميع الجداول

ملاحظة : استدعاء الجداول جدول جدول معروفة وحسب الاسم  ....المطلوب استدعاء كل الجداول دفعه واحدة وبدون الاسم وبغض النظر عن العدد

تم تعديل هذه المشاركة بواسطة jmjms في 30 مايو 2014 في 17:12

#2

السلام عليكم

جرب استخدام الأمر UNION

شريطة تطابق عدد ونوع الحقول بغض النظر عن مسمى الحقل

CLEAR
CLOSE DATABASES ALL
IF NOT FILE('A_Table.dbf')
	CREATE TABLE A_Table (a_name c(10) , a_value N(10))
	INSERT INTO A_Table VALUES("A1", 1)
	INSERT INTO A_Table VALUES("A2", 1)
	INSERT INTO A_Table VALUES("A3", 1)

	CREATE TABLE B_Table (B_name c(10) , B_value N(10))
	INSERT INTO B_Table VALUES("B1", 1)
	INSERT INTO B_Table VALUES("B2", 1)
	INSERT INTO B_Table VALUES("B3", 1)

	CREATE TABLE C_Table (C_name c(10) , C_value N(10))
	INSERT INTO C_Table VALUES("C1", 1)
	INSERT INTO C_Table VALUES("C2", 1)
	INSERT INTO C_Table VALUES("C3", 1)
ENDIF


*SET DEFAULT TO YourTablesPath

m.nFiles=ADIR(arFiles,"*.DBF")
IF m.nFiles < 1
	RETURN .F.
ENDIF

lcSelect = ''
FOR i = 1 TO m.nFiles
	m.lcTable=arFiles(i,1)
	IF NOT USED( m.lcTable )
		USE ( m.lcTable ) SHARED IN 0
	ENDIF

	TEXT TO lcSelect TEXTMERGE NOSHOW PRETEXT 15 ADDITIVE
	SELECT * FROM <<JUSTSTEM(m.lcTable)>>
	<<IIF(i<m.nFiles, " Union ", "")>>
	ENDTEXT

ENDFOR
MESSAGEBOX(lcSelect)
&lcSelect

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

#3

اولا انا سعيد جدا بان يكون الرد من قبل الاخ shadowz

وانا من المعجبين بافكار الاخ شادو

سوف اجرب الكود وان شاء الله ينجح

#4
jmjms كتب:

اولا انا سعيد جدا بان يكون الرد من قبل الاخ shadowz

وانا من المعجبين بافكار الاخ شادو

سوف اجرب الكود وان شاء الله ينجح

هذا من لطفك أخي الكريم

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

#5

شكرا اخي شادو

نعم هي نفس العملية ولكن هناك اضافة على السؤال

1-ان تكون هذه الجداول داخل ملف في المشروع او البرنامج

2- ان يتم تحويل الناتج الى جدول موجود ضمن ملفات البرنامج مثلاjmjms.dbf  وليس العرض فقط

ملاحظة- ممكن ان يكون عدد الجداول داخل الملف كثير هل تتم عملية ايضا بنجاح

اذا امكن اخي شادو واكون ممنون لك

تم تعديل هذه المشاركة بواسطة jmjms في 31 مايو 2014 في 00:45

#6

العفو عزيزي

1- وضعت بالمثال أعلاه أمر

SET DEFAULT TO YourTablesPath

حيث تعوض YourTablesPath بالمسار الفعلي للجداول حسب تصميم البرنامج لديك

 

2- للحفظ في جدول : قد تضيف سطر جديد بعد EndFor على النحو التالي

lcSelect = lcSelect + " into Table NewTable "

وطبعا تحتاج للتأكد من عدم وجوده ( الجدول الجديد ) قبل بدء العملية، أو حفظه في مسار آخر حتى لا يصبح ضمن الجداول الاساسية الخاصة بالبرنامج،

 

3- بالنسبة لعدد الملفات / جربت لغاية 259 جدول بدون مشاكل / وطبعا هذا الرقم ليس قاعدة لان المهم في الموضوع هو طول الأمر المخزن في المتغير lcSelect

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

 

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

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

#7

شكرا اخي العزيز شادو على سرعة الاجابة وطول صبرك معي

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

1- بالنسبة لمسار الملف اصبح واضح وتمت العملية بنجاح

2- الملف المضافة اليه محتويات الجداول هو من الملفات الاساسية للبرنامج وليس ملف جديد وهو موجود ضمن ملفات البرنامج قبل العملية وهو خارج الملف الذي يحتوي الملفات .اي ضمن ملفات البرنامج

3-سطر الحفظ لم يعطني اي نتيجه ولم يضف اي جدول جديد حتى يتم التعديل عليه

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

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

وشكرا لك اخي شادو على تعاونك معي

تم تعديل هذه المشاركة بواسطة jmjms في 31 مايو 2014 في 10:46

#8

طالما ان الجدول المراد حفظ النتائج فيه خارج مجلد الجداول

فجرب التالي

m.nFiles=ADIR(arFiles,"*.DBF")
IF m.nFiles < 1
	RETURN .F.
ENDIF

lcSelect = ''
FOR i = 1 TO m.nFiles

	m.lcTable=arFiles(i,1)
	IF NOT USED( m.lcTable )
		USE ( m.lcTable ) SHARED IN 0
	ENDIF

	TEXT TO lcSelect TEXTMERGE NOSHOW PRETEXT 15 ADDITIVE
			SELECT * FROM <<JUSTSTEM(m.lcTable)>>
			<<IIF(i<m.nFiles, " Union ", " into cursor crsJunk ")>>
	ENDTEXT

ENDFOR
&lcSelect

IF USED('crsJunk')
    m.lcTragetTable="NEWTABLE"
    IF NOT USED( JUSTSTEM(m.lcTragetTable) )
        USE ( m.lcTragetTable ) SHARED IN 0
    ENDIF
    SELECT ( JUSTSTEM( m.lcTragetTable ) )
    DELETE ALL
    APPEND FROM DBF('crsJunk')
    BROWSE
ENDIF

m.lcTragetTable يمثل اسم ومسار الجدول المراد تخزين النتائج فيه

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

#9

السلام عليكم اخوتي الاعزاء اعذروني لتاخري بالتردد على المنتدى بسبب الامتحانات النهائي لي

وبارك الله فيكم ولكل من يتابع في المنتدى الجميل

 

اخي العزيز لا اضيف على الاخ المبدع شياً 

وهنالك موضوع قديم  من احد الاخوة هو عن تصفير تلقائي /index.php/topic/258235-%D8%A7%D8%B1%D8%AC%D9%88-%D8%AF%D8%AE%D9%88%D9%84-%D9%85%D9%86-%D8%A7%D9%84%D8%AE%D8%A8%D8%B1%D8%A7%D8%A1-%D8%B1%D8%AC%D8%A7-%D8%AA%D8%B5%D9%81%D9%8A%D8%B1-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA/?hl=+%D8%AA%D8%B5%D9%81%D9%8A%D8%B1

 

هو مشابه لموضوعك ارفق لك نفس الافكار ولكن بمعالج يمكن استدعاءه من خلال اي تطبيق  او  

ويمكن عمل به باستقلالية عن طريق الايعاز التالي

do append_auto.app

علماً يجب توفر المجلد المرفق للمثال 

وطريقة عمله هو بداية التشغيل يطلب منك تحديد الجدول المراد التجميع فيه

وبعدها يطلب مكان توفر الجداول المراد تجميعها 

 

وتحياتي لكم

Desktop.rar

#10

شكرا لك اخي شادو وايضا اخي فراس نجح الكود الاخير معي للاخ شادو ولكن مشكلة بسيط هي

1- وهي المشكلة المهمة انه عند تكرار الامر والنافذة مفتوحه تظهر بعض الاخطاء الا غلق الفورم بالكامل واعادة من جديد

2- وايضا تظهر عند استخدام ازرار اخرى في الفورم

3- عدم تكرار القيد اذا كان متشابه في جدولين او اكثر ... انظر الى الاسم رياض في الجدول 3و4

وهذا مثال بسيط عن الموضوع

tt.7z

#11

 اخي العزيز  جاسم 

اولاً بالنسبة للمعالج الذي ارفقته ُ هل جربته لانه بصورة عامة يفيد اي تجميع للجداول لانه غير محدد 

 

اما بالنسبة للاشكال لديك مع ايعاز الاخ شادو هو تثبيت مسار افتراضي والبقاء عليه 

اليك تعديل بسيط او اضافه  لغرض تفادي الاشكال والرجوع للمسار الاول قبل الاضافه اذا سمح الاخ شادو 

LOCAL cpathold
cpathold=CURDIR()
IF MESSAGEBOX("åá ãÊÇßÏ ãä ÏãÌ ÇáãáÝ ", 36, "ÊÍÐíÑ")=6
********************************
CLOSE ALL
  If !Used('jms')
	Use jms Shared In 0
Endif
USE jms EXCLUSIVE 
SET safety OFF
SELECT  jms
ZAP
cLOSE ALL 
**********************
SET SAFETY OFF
CLOSE all
If !Used('jms')
	Use jms Shared In 0
ENDIF

**************************
SET DEFAULT TO  "ãÌáÏ ÇáÏãÌ"
m.nFiles=ADIR(arFiles,"*.DBF")
IF m.nFiles < 1
	RETURN .F.
ENDIF
lcSelect = '' 
FOR i = 1 TO m.nFiles
	m.lcTable=arFiles(i,1)
	IF NOT USED( m.lcTable )
		USE ( m.lcTable ) SHARED IN 0
	ENDIF
	TEXT TO lcSelect TEXTMERGE NOSHOW PRETEXT 15 ADDITIVE
			SELECT * FROM <<JUSTSTEM(m.lcTable)>>
			<<IIF(i<m.nFiles, " Union ", " into cursor crsJunk ")>>
	ENDTEXT
ENDFOR
&lcSelect
If !Used('jms')
	Use jms Shared In 0
Endif
IF USED('crsJunk') 
    m.lcTragetTable="jms.dbf"  
    IF NOT USED( JUSTSTEM( m.lcTragetTable) )
      USE (  m.lcTragetTable ) SHARED IN 0
    ENDIF
    SELECT ( JUSTSTEM(  m.lcTragetTable ) )
    APPEND FROM DBF('crsJunk')
ENDIF
*****************************
SELECT jms
GO top
DO WHILE !EOF()
replace no WITH RECNO() 
skip
ENDDO 
messagebox(" ÊãÊ ÚãáíÉ ÇáÏãÌ ÈäÌÇÍ  ",0+6,"")
ENDIF
SELECT jms
BROWSE   
CLOSE ALL
SET DEFAULT TO (cpathold)

في الايعاز نص الرسالة بالعربي هو نفسة والاضافة هو اول سطر واخر سطر حدث الايعاز للزر في النموذج 

 

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

#12

لقد نسيت سوالك عن عدم التكرار 

الامر في ايعاز الاخ شادو لعدم التكرار هو كلمة  UNION 

اما اذا اردت جميع بيانات الجداول وان تكررت اضف  كلمة كل all 

ليصبح الايعاز او الجملة UNION ALL فقط

تحياتي

#13

عاشت يدك اخي فراس على الاضافة  للمعالج نعم نجح العمل بالكامل

وايضا الشكر الكثير للاستاذ العزيز شادو وانا جدا سعيد بعودة الى المنتدى

اخواني انا اعمل على مشروع وممكن احتاجكم هذه الفترة

بارك الله بكم جميعا وكثر الله من امثالكم

#14

جرب التالي في النموذج الخاص بك

IF MESSAGEBOX("your text.... ", 36, "Warning")<>6
	RETURN .F.
ENDIF
lcDir=SET('directory')
CLOSE DATABASES ALL

USE JMS EXCLUSIVE IN 0
SELECT JMS
SET SAFETY OFF
ZAP IN JMS
SET SAFETY ON


SET DEFAULT TO dbFiles
m.nFiles=ADIR(arFiles,"*.DBF")
IF m.nFiles < 1
	SET DEFAULT TO (lcDir)
	RETURN .F.
ENDIF

lcSelect = ''
FOR i = 1 TO m.nFiles
	m.lcTable=arFiles(i,1)
	IF NOT USED( m.lcTable )
		USE ( m.lcTable ) SHARED IN 0
	ENDIF
	TEXT TO lcSelect TEXTMERGE NOSHOW PRETEXT 15 ADDITIVE
			SELECT * FROM <<JUSTSTEM(m.lcTable)>>
			<<IIF(i<m.nFiles, " Union ALL ", " into cursor crsJunk ")>>
	ENDTEXT
ENDFOR
&lcSelect
SET DEFAULT TO (lcDir)
SELECT JMS
IF _TALLY > 0
	APPEND FROM DBF('crsJunk')
	REPLACE No WITH RECNO() ALL
ENDIF
BROWSE

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

#15

جميل جدا اخي شادو ايضا هذا المعالح يعمل بشكل جيد

وخصوصا التعديل على عملية تصفير الملف وايضا اعادة ترتييب التسلسل  .. وانا اكره اللوبي بسب البطئ

بارك الله بك اخ شادو

وايضا الاخ فراس

#16

 الحمد لله 

وتحياتي لك اخي جاسم وللاخ عبدالله (شادو) للمتابعه الموضوع وهو ليس جديد عليه المتابعه معنا علماً انهً اقدم مني وكدها وكدود في البرمجة تحية خاصة لهُ

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

#17

الله يسعدك فراس انت الخير والبركة

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…