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

استخدام ايعاز ALTER TABLE بطريقة المعالج للاضافة

بدأه lion iraq في 28 نوفمبر 2012 · 7 رد · 1,186 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

اعتقد ان غاية الموضوع مهمة في اضافة حقل او عمود على جدول موجود سابقاً باستخدام دالة الاستعلام ALTER TABLE

وصيغتها هي

ALTER TABLE TableName1 ADD | ALTER [COLUMN] FieldName1 		FieldType [( nFieldWidth [, nPrecision])] [NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]]      [AUTOINC [NEXTVALUE NextValue [STEP StepValue]]] [DEFAULT eExpression1]      [PRIMARY KEY | UNIQUE [COLLATE cCollateSequence]]      [REFERENCES TableName2 [TAG TagName1]] [NOCPTRANS] [NOVALIDATE]

ALTER TABLE TableName1 ALTER [COLUMN] FieldName2 [NULL | NOT NULL] [SET DEFAULT eExpression2]      [SET CHECK lExpression2 [ERROR cMessageText2]] [ DROP DEFAULT ] [ DROP CHECK ] [ NOVALIDATE ]

ALTER TABLE TableName1 [DROP [COLUMN] FieldName3]      [SET CHECK lExpression3 [ERRORcMessageText3]] [DROP CHECK]      [ADD PRIMARY KEY eExpression3 [FOR lExpression4] TAG TagName2 	[COLLATE cCollateSequence]] [DROP PRIMARY KEY]      [ADD UNIQUE eExpression4 [[FOR lExpression5] TAG TagName3 		[COLLATE cCollateSequence]]] [DROP UNIQUE TAG TagName4]      [ADD FOREIGN KEY [eExpression5] [FOR lExpression6] TAG TagName4 		REFERENCES TableName4 [TAG TagName4][COLLATE cCollateSequence]        REFERENCES TableName2 [TAG TagName5]]      [DROP FOREIGN KEY TAG TagName6 [SAVE]]      [RENAME COLUMN FieldName4 TO FieldName5] [NOVALIDATE]

والاستخدامها الاكثر شيوعا هو لاضافة حقول او حقل جديد الى جدول موجود سابقاً

وكما تستخدم غالباً ولاكثر المبرمجين يستخدمها مع الثوابت

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

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

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

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

CLOSE DATABASES ALL 
LOCAL cFname,cTable,cTYpe,cname
cTable=ALLTRIM(GETFILE("dbf"))
cname=ALLTRIM(INPUTBOX("اسم الحقل","",""))
cTYpe=ALLTRIM(INPUTBOX("نوع الحق (عرض الحقل)","",""))
cFname=cname + " " + cTYpe
	USE (cTable) EXCLUSIVE 
IF FSIZE(LEFT(cname,AT(" ",cname)))=0
        	ALTER TABLE (ctable) ADD COLUMN &cFname
  MESSAGEBOX("Update Successful!","done")
  BROWSE 
  USE 
  ENDIF

CLOSE DATABASES ALL 
LOCAL cFname,cTable,cTYpe,cname
cTable=ALLTRIM(GETFILE("dbf"))
cname=ALLTRIM(INPUTBOX("اسم الحقل","",""))
cTYpe=ALLTRIM(INPUTBOX("نوع الحق (عرض الحقل)","",""))
cFname=cname + " " + cTYpe
   USE (cTable) EXCLUSIVE 
  AFIELDS(cFields)
IF ASCAN(cFields,cname) > 0
	USE
   ELSE
	ALTER TABLE (cTable) ADD COLUMN &cFname
   MESSAGEBOX("Update Successful! ","done")
	BROWSE 
  USE 
 ENDIF

اتمنى الاستفاد منها

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

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

تم تعديل هذه المشاركة بواسطة lion iraq في 28 نوفمبر 2012 في 21:04

#2

عااااااااااااااشت الايادي

فكرة و طريقة روووووعة

#3

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

#4
barcaman17 كتب:

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

اخي العزيز اعتقد اني ذكرت في الموضوع للاضافة وليس للاستبدال

ولكن لايهمك

انظر الايعاز

ALTER TABLE (name_table) RENAME COLUMN (old_field) TO (new_field)

ويمكن استخدامه بالمعالج ايضا مع مراعاة التغييرات

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

#5

شكرا لك اخي العزيز فراس

وهذه مثال حسب فهمي للموضوع ولك التجربة وابداء الراي

1- التاكد من وجود الجدول من عدمه

2- اذا كان غير موجود يتم تنفيذ الامر

3- فتح الجدول

4- الخطوة التالية اضافة عمود للجدول هو او غيره

5- التاكد من ان الجدول غير مستخدم اذا كان غير مستخدم يتم تنفيذ الامر والعكس صحيح

6- يتم التاكد من وجود العمود اذا كان موجود لم يتم الامر

7- اذا كان غير موجود يتم تحديد رقم العمود من ثم تفيذ الامر ( وهذه فكرة الاخ فراس في موضوع اخر)

8-فتح الجدول

 
SET SAFETY OFF
If !File("JMJMS.DBF") 
Create table JMJMS  (jm1 n(6), jm2 n(6),jm3 n(6)) 
ENDIF
USE  jmjms
BROWSE LAST 
USE   
***************
nf= FOPEN("JMJMS.DBF",1)
IF nf>0
=FCLOSE(nf)
USE JMJMS.dbf EXCLUSIVE  
FOR i =4 TO 4 
FIELD(i)  
IF !FIELD(i)= "JM4"     
ALTER TABLE JMJMS ADD COLUMN jm4 N (6)
ELSE 
ENDIF
ENDFOR
ENDIF
***********
BROWSE 
CLOSE ALL

JMJMS2.rar

تم تعديل هذه المشاركة بواسطة jmjms في 2 ديسمبر 2012 في 16:42

#6

الاخ العزيز jmjms

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

وبخصوص الايعاز الذي يغلق الجدول اذا كان مفتوح حبيت ان اضيف ايعاز يمكنك اسنخدامهُ وهو

SET SAFETY OFF
If !File("JMJMS.DBF") 
Create table JMJMS  (jm1 n(6), jm2 n(6),jm3 n(6)) 
ELSE 
*USE  jmjms
*BROWSE LAST 
*USE   
***************
*nf= FOPEN("JMJMS.DBF",1)
*IF nf>0
*=FCLOSE(nf)
*USE JMJMS.dbf EXCLUSIVE  
IF USED("JMJMS.DBF")
SELECT jmjms
USE
ENDIF 
USE jmjms 
FOR i =4 TO 4 
FIELD(i)
IF !FIELD(i)= "JM4" 	
ALTER TABLE JMJMS ADD COLUMN jm4 N (6)
ELSE 
ENDIF
ENDFOR
***********
BROWSE 
CLOSE ALL
ENDIF

اما للاخ barcaman17

حبيت ان اضيف طريقة لتغيير حقل بكامل هيكلتهُ من اسم ونوع واستيعاب

لنفترض ان الحقل الموجود هو

 lion n(3)

واردنا تغييره لحقل باسم lioniraq

ونوع جديد هو C "20

يكون على مرحلتين اولاًتغيير الاسم ومن ثم التعديل عليه ويجب ان يكون في بيئه استخدام الجدول بشكل حصري مثل الايعاز pack

اولاً

ALTER TABLE (mytable) RENAME COLUMN (lion) TO (lioniraq)

ثانياً

ALTER TABLE (mytable) ALTER COLUMN lioniraq c(20)

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

#7

شكرا لك اخي نعم يتم اغلاق الجدول

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

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

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

وهذا مثال على عملية الكود للمبتدئيين مثلي

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

58196678.png

jmjm3.rar

تم تعديل هذه المشاركة بواسطة jmjms في 2 ديسمبر 2012 في 19:45

#8
jmjms كتب:

شكرا لك اخي نعم يتم اغلاق الجدول

اخي العزيز

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

وفكرتك جميلة جدا

وانما كانت الغاية من الايعاز هو يمكنك استخدام ايعاز اضافي لغلاق الجداول او جدول معين

اتمنى انك عرفت قصدي

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

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

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

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

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

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