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

التعامل مع Mysql من خلال Vfp

بدأه Shadowz في 3 نوفمبر 2009 · 26 رد · 4,894 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

مثال على التعامل مع قواعد بيانات MySql

سيكون على أجزاء ان شاء الله.... وهذا أهمها حيث أن الاتصال بقاعدة اليبانات يعد شيئا أساسيا لاستكمال الموضوع

قبل أن نبدأ بالتفاصيل لا بد من توضيح عدة نقاط :

أولا : هذه المثال حي ومتصل بقاعدة بيانات مجهزة على موقع www.db4free.org ( أي أنه لا بد من الاتصال بالانترنت أثناء التنفيذ )

ثانيا : للتعامل مع أي قاعدة بيانات أخرى من خلال الفوكس برو، لا بد من تجهيز معرف الاتصال الخاص بتلك القاعدة، وكون أننا سنتعامل مع MySql فلا بد من تنصيب MySql Connector – ODBC 5.1

وتستطيع تحميله من هنــــــــــــــا

ثالثا : وللعلم فطرق الاتصال المتاحة من خلال الفوكس برو هي :

- Remote Views

- Cursor Adapter

- SQL Pass Through

الاولى والثانية تعطينا امكانية التعامل مع الجداول بصورة مرئية وكأننا نستخدم جداول فوكس برو عادية

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

رابعا : طريقة العمل هنا ستكون ببساطة مجرد أوامر Sql عادية كالتي نستخدمها في الفوكس برو، مع قليل من الاضافات، والمراعاة لما تقبل به MySql من أوامر

خامسا : عند نجاح الاتصال يتم التعامل مع قاعدة البيانات من خلال ما يسمى Connection Handle وهو عبارة عن رقم نستفيد منه كمرجع رئيسي للاتصال الذي تم

سادسا : طريقة التأكد من تنفيذ أوامر SQL Pass Through تكون بفحص النتيجة المعادة فاذا كانت صفرا فهذا يعني فشل الامر لأحد الأسباب، أما اذا كانت أكبر من صفر فذلك يعد نجاحا للأمر المنفذ.

لنبدأ الأن على بركة الله،

على الموقع المذكور أعلاه تم تجهيز قاعد بيانات سميت FoxDatabase تحتوي على جدول واحد اسمه Contacts يتكون من أربعة حقول هي الرقم والاسم ورقم الهاتف والمدينة، وتم فيه تخزين 500 سجل مختلف كما يظهر جزء منها في الصورة

post-113506-1257212920_thumb.jpg

جرب المثال المرفق، اذا نجح فأنت في الاتجاه الصحيح

set talk off

 nConn = متغير يحتوي على رقم الاتصال الذي تم مع السيرفر والذي  سنستخدمه في كافة العمليات
public nConn
nConn=0

 عند محاولة الاتصال MySql يستخدم هذه الامر لمنع ظهور شاشة بيانات

=sqlsetprop(0,"DispLogin" , 3 )


 الخاص به IP Address نقوم الأن بتجهيز أمر الاتصال بالسيرفر والذي سيحتوي على اسم السيرفر او
 بالاضافة لتعريف اسم قاعدة البيانات واسم وكلمة مرور المستخدم

lcSqlstringconnect=;
	[Driver={MySQL ODBC 5.1 Driver};Port=3306;]+;
	[Server=www.db4free.net;] +;
	[STMT=set NAMES cp1256;]  +;
	[Database=foxdatabase;]   +;
	[Uid=sh;]+;
	[Pwd=sh;]+;
	[.t.]

 sqlstringconnect محاولة الاتصال بقواعد البيانات باستخدام الامر

nConn=sqlstringconnect(lcSqlstringconnect)
if nConn > 0
	messagebox([تم الاتصال بقواعد البيانات])
else
	messagebox([غير قادر على التواصل مع السيرفر])
	return .f.
endif

اذا وصلنا لهذه النقطة فهذا  يعني أنه تم الاتصال ونستطيع المتابعة

الأن سنحدد طريقة حفظ التغييرات التي تتم على البيانات حيث سنجعلها بناءاً على رغبتنا وعند طلبنا 
=sqlsetprop(nConn,"Transactions", 2)

والان وبعد نجاح محاولة الاتصال سنقوم بسحب سجلات الجدول الرئيسي لجدول فوكس برو مؤقت
cCommand = "Select * from Contacts"
nResult  = sqlexec(nConn, cCommand , "Contacts")
if nResult > 0
	select Contacts
	browse
else
	messagebox([Opsssss....])
	return .f.
endif

main.rar

يتبع ان شاء الله..

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

#2

بسم الله الرحمن الرحيم

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

#3

عاشت الايادي وتم الاتصال بقواعد البيانات وتم عرض قواعد البيانات 100 %

ننتظر الدرس الثاني

#4

أهلا أخي جواد....واعذرني على التأخر في تنفيذ وعدي،

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

وقبل أن نبدأ بالخطوة الثانية أود أن أوضح شيء مهم،

عند التعامل مع جداول الفوكس برو فان كافة السجلات تكون متاحة لنا بشكل مباشر واجباري، أي انك عندما تقول Use Table أو Select From Table أوUse View يكون لك مطلق الحرية للوصول لأي سجل، هذا جميل من ناحية البساطة، ولكنه مكلف من ناحية السرعة واستخدام المصادر الخاصة بالأجهزة خاصة وأن عمليات الفرز وخلافها تكون على جهاز المستخدم وليس على السيرفر، بينما ولدى التعامل مع قواعد بيانات MySql فان الجدول يكون هنــــــــــــــــــاك على السيرفر، وسندعه مكانه وسنحاول عدم جلب أي سجل زيادة عن حاجتنا.

أي أننا سنحضر سجل أو اثنين أو حسب الحاجة من جدول كبير الحجم، نضعها في Cursor وسنعالجها بالشكل المطلوب على جهازنا، ونعيدها جاهزة للسيرفر

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

حسناً

سنعتمد بشكل رئيسي في عملنا على الأمر SqlExec وصيغته هي :

AnyThing = SQLEXEC(nStatementHandle [, cSQLCommand [, cCursorName[, aCountInfo]]])

nStatementHandle

هو معامل الاتصال الذي ذكرته سابقا وهو هنا nConn

cSQLCommand

هو الامر الذي سنرسله للسيرفر وسنقوم بتعريفه دائما قبل تنفيذ الأمر، وسنستخدم له المتغير cCommand

cCursorName

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

aCountInfo

عبارة عن مصفوفة Array تزودنا بمعلومتين عن الجدول المؤقت الذي تم انشاؤه، وهما اسم الجدول ان لم نحدد اسما له، وعدد السجلات في هذا الجدول

AnyThing

متغير نتأكد من خلاله من نتيجة الأمر فاذا كانت نتيجته

1 فهذا يعني نجاح تنفيذ الأمر

-1 فشل تنفيذ الأمر

0 فيعني ان الأمر لا يزال قيد التنفيذ

ماذا سنفعل الان بعد أن أجرينا الاتصال،

- انشاء نموذج

- تصفح السجلات

- اضافة سجل جديد

- تعديل سجل

- حذف سجل

- البحث عن سجل

- طباعة تقرير

سنبدأ بها الواحدة تلو الأخرى:

انشاء النموذج :

- تم تجهيز الـ Textbox فيه على اعتبار أن الـ Record Source لها هي حقول الجدول المؤقت Contacts

- تم اضافة الاومر التالية لاستدعاء أخر سجل في الجدول من السيرفر في اجراء Load

cCommand = "Select MAX(cID) cID from Contacts"
nResult  = sqlexec(nConn, cCommand , "crsJunk")
if nResult < 1
	return .f.
endif

select crsJunk
nGetThisRecord=nvl(crsJunk.cID,0)
use in crsJunk
cCommand = "Select * from Contacts where cID = " + alltrim(str(nGetThisRecord))
nResult  = sqlexec(nConn, cCommand , "Contacts")
if nResult < 1
	return .f.
endif
select Contacts
اذا وصلنا لهنا فهذا يعني أن الأمور تسير بشكل جيد ونستطيع الاستمرار
select Contacts

ملاحظة : عند الخروج من النموذج وعلى اعتبار أنه النموذج الوحيد هنا سنقوم باغلاق الاتصال مع السيرفر

بواسطة الأمر

=SQLDISCONNECT(0)

والذي سنضعه في الاجراء Unload

MySqlSample.rar

مع التحية، ويتبع ان شاء الله

تم تعديل هذه المشاركة بواسطة Shadowz في 5 نوفمبر 2009 في 00:52

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

#5

بسم الله الرحمن الرحيم

السلام عليكم ... اخي عبد الله العمل ناجح جدا جدا ... ولكن يوجد هنا شي كل الاوامر مفهومه جدا وهي تقريبا نفس الاوامر التي تم تامين الاتصال مع قواعد بيانات الاكسس اذا تذكرت ذلك الموضوع ولكن هنا يتم جلب قيد واحد في الفورم واعتقد انت اشرت الى ذلك فاذا كنت تتفق معي ان في الفورم جاء قيد واحد اين الامر الذي حدد ذلك القيد لانني حاولت ان اضيف على الفورم اوامر السابق والتالي وجد ان الفورم ياخذ قيد ؟؟؟؟؟اعتقد ان مستعجل في ذلك واسف واننا بانتظار الدرس الاخر

#6

اخي العزيز جواد،

نعم صحيح ان معظم ما ينطبق على MySql ينطبق على Access أو Ms Sql مع مراعاة الاختلافات فيما بينها

بالنسبة لاستدعاء آخر سجل عند فتح النموذج راجع اجراء الـ Load في النموذج ستجد فيه أمر احضار رقم آخر سجل، ومن ثم احضار بيانات ذلك السجل بناء عليه ( أي الرقم ) ، علما بأنني عدلت الاجراء ( حيث وجدت خطأً فيه عن طريق السهو )

على كل....

ستكون فكرة تصفح السجلات على النحو التالي :

نرسل أمرا لاحضار رقم السجل الأخير ( أو السجل الأول )

وبعد ذلك نرسل أمرا آخرا لاحضار ذلك السجل

وبطبيعة الحال في ان رقم السجل سيظهر بشكل مباشر في Thisform.CID.TextBox

وبالاعتماد على هذا الرقم نرسل أمر احضار أكبر رقم يسبقه في حالة تصفح ما هو سابق

أو احضار أصغر رقم يليه في حالة تصفح ما هو لاحق

وبعد تحديد الرقم نرسل أمرا آخرا لاحضار ذلك السجل بناءاً عليه

مرفق المثال بعد الاضافات ( وبشكل مبسط للدراسة )

مع العلم بأني في المرة القادمة ان شاء الله سأدمج جميع اجراءات التصفح في اجراء واحد

بالاضافة الى أنه تم رفع عدد السجلات في الجدول الى 10000 سجل لغايات تجربة السرعة

post-113506-1257392365_thumb.jpg

مع التحية

MySqlSample.rar

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

#7

السلام عليكــم ورحمـة الله وبركاتــه ،،

شكراً لك اخي الكريم

#8

بسم الله الرحمن الرحيم

درس فوق الممتاز :wub: وياريت الاخوان يستفادون من هذه التقنية :angry:

اكمل يا اخي فنحن في لهفة من هذا الدرس

#9

شكرا لمتابعتكما اخواني علاء وجواد، وان شاء الله تجدان ما يفيدكم في هذا الموضوع

اعتقد بأن اوامر التصفح واضحة، سنحاول الان جمعها ودمجها كلها في اجراء واحد لنريح رأسنا من أين ولماذا وعدل هنا وهناك.... علما بأننا سنجمع معها أيضا ما جاء في اجراء Load والخاص باحضار آخر سجل فقط

سنبدأ باضافة اجراء جديد للنموذج نسميه GetRecord ( سندمج فيه أوامر التصفح ) وباضافة خاصية جديدة نسميها RecordNumber ( سنخزن فيها رقم السجل بدلا من اسناده لـ TextBox )

الاجراء GetRecord مهيأ ليستقبل قيمتين هما lcNavigate , lnRecNumber

سنستخدم الآن فقط المتغير lcNavigate

وستكون صيغة الاجراء كالتالي

lparameters lcNavigate, lnRecNumber
* اختيار الاتجاه بناء على القيمة المرسلة من زر التصفح
do case
case lcNavigate = "TOP"
	cCommand = " Select Min(cID) cID from Contacts "
case lcNavigate = "PREVIOUS"
	cCommand = " Select Max(cID) as cID from Contacts where cid< ?thisform.RecordNumber "
case lcNavigate = "NEXT"
	cCommand = " Select Min(cID) as cID from Contacts where cid> ?thisform.RecordNumber "
case lcNavigate = "BOTTOM"
	cCommand = " Select Max(cID) as cID from Contacts "
endcase
* محاولة تنفيذ الأمر والعودة في حالة فشله لأي سبب كان
nResult  = sqlexec(nConn, cCommand , "crsJunk")
if nResult < 1
	return .f.
endif
*تخزين قيمة السجل لمتغير مع  التأكد من تحويل القيمة المطلقة لصفر 

select crsJunk
local lnNumber
lnNumber=nvl(crsJunk.cID,0)

* والعودة اذا كانت قيمته صفرا
if lnNumber = 0
	return .t.
endif

* تثبيت قيمته كمفتاح جديد للتسلسل
thisform.RecordNumber = lnNumber

* وأخيرا تنفيذ أمر احضار السجل 
cCommand = "Select * from Contacts where cID = " + alltrim(str(thisform.RecordNumber))

nResult  = sqlexec(nConn, cCommand , "Contacts")
if nResult < 1
	return .f.
endif

وفي أوامر التصفح سنرسل قيمة واحدة فقط وهي قيمة lcNavigate حيث ستكون احدى أربع وهي Top, Previous, Next, Bottom

وسيكون الامر على النحو التالي

thisform.GetRecord("PREVIOUS")

هكذا أنهينا موضوع التنقل بين السجلات مبدئيا، واختصرنا 5 اجراءات في اجراء واحد

ملاحظة : تم رفع عدد السجلات في الجدول الى 20000 سجل لغايات تجربة السرعة

MySql.rar

MySqlSample.rar

تم تعديل هذه المشاركة بواسطة Shadowz في 6 نوفمبر 2009 في 06:28

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

#10

لطيف جدا دمج الاوامر جميعها مفهومة :lol:

#11

لطيف جدا دمج الاوامر جميعها مفهومة :lol:

طبعا بالمناسبة قبل بدء الدرس الثالث انا كنت اتصفح على اساس رقم الموظف ممكن تغير الامر بحيث يذهب الى القيد التي تريده وهذا امر طبيعي واني اعد form وسوف ارسله لتبدي لنا رايك .

نحن بانتظار البقية.....

#12

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

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

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

الفكرة ببساطة

تحديد الحقول التي نريد البحث فيها عن طريق تعبئة عناصرها المرتبطة أو تركها فارغة، وتصفيتها وتشكيل جملة شرطية واحدة لارسالها للسيرفر

اختيار احدى السجلات في حال وجود نتيجة للبحث

العودة للنموذج الرئيسي ( وفيه لن نعيد احضار السجل من السيرفر انما من الجدول المؤقت الذي نتج أثناء البحث )

والقليل من الكود لاظهار السجل المختار بدل السجل الحالي.

قد نوظف هنا أوامر مثل الـ Fetching / SqlPrepare / CreateProcedure تفيدنا في السرعة ولكن قد نتطرق لها في وقت آخر

MySqlSample.rar

post-113506-1257566946_thumb.jpg

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

#13

هذه آخر اضافة للبرنامج، تم فيها تجهيز :

الاضافة، التعديل، الحذف

مع ملاحظة أنه تم الاعتماد على الــ Buffering الخاص بالجدول واستخدام الاوامر التالية

Tableupdate

Tablerevert

GetFldState

لمتابعة التغيرات على البيانات بدلا من الاعتماد على عناصر النموذج

وأتمنى أن يكون ما يتبقى من جديد في البرنامج سهل وواضح، فجميعها أوامر فوكس برو قابلة للتغيير والتعديل للأفضل، مع العذر على عدم الشرح التفصيلي،

وارجو عدم التردد في طرح أي استفسار

بانتظار تجربتك أخي جواد،

وأتمنى أن أكون قد وفيت، مع تمنياتي بالفائدة للجميع

ومع التحية.

MySqlSample.rar

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

#14

بسم الله الرحمن الرحيم

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

#15

شكرا على هذه المعلومات

اثناء تنفيذ اضافة سجل بياناته بالعربية عند استدعاء هذا السجل تصبح الكلمات بهذا الشكل ????? وكان قواعد البيانات MySql لاتتعامل مع اللغة العربية

ارجوا الافادة بسرعة

وشكرا مرة اخرى على هذا البرنامج

#16
jawadfrhad كتب:
بسم الله الرحمن الرحيم

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

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

أخي nowfal_yassin_saif

عذرا على التأخر في الرد... بطبيعة الحال فان MySql تدعم اللغة العربية

وقد حاولت كثيرا أن أسترجع البيانات باللغة العربية كما يتم ادخالها... الا أنني لم أصل لنتيجة

الا بتغيير الـ ODBC من 5.1 الى 3.51 والذي تستطيع تحميله من هــــنا

وكل ما عليك هو تغيير أول سطر في المتغير lcSqlstringconnect في برنامج Main الـى

	[Driver={MySQL ODBC 3.51 Driver};Port=3306;]+;

حل مؤقت لغاية القراءة جيدا حول الـ ODBC5.1

مع التحية

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

#17

شكراً اخي على سرعة الرد

واتمنى لك المزيد من التوفيق

#18

مرحبا Shadowz

لقد قمت بعمل رائع والطريقة تدل على انك محترف VFP

لقد واجهت المشاكل في الماضي لاستعمالي 5.1 ولقد حللت هذا الامر من زمن

وحيث اني توقفت عن العمل في vfp واتجهت ال vb.net اذا وجدت الطريقة سارسلها ال هنا.

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

تابع العمل الجيد.

موفق إن شاء الله

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

#19

اويد كلام الاخ سمير فيما يتعلق بطريقة شرح الاخ Shadowz

ومن حيث اهمية الموضوع الذي طرحة

واتمنى عرض موضيع مهمة مثل هذه

واجهت نفس المشكلة السابقة من قبل في برنامج Appserv السيرفر الشخصي اي عندما اقوم بكتابة بيانات بالعربية في الجداول عندما استدعيها

الى الموقع تصبح على هذا الشكل "؟؟؟؟؟؟" ولم اجد اي رد شافي على مشكلتي وكل من رد كان يدور حول الحمى ولا تعطى اجابة دقيقة لمشكلتي.

وبصراحة لم اكن اتوقع اجابة شافية على مشكلتي منك وبصراحة فوجئت بالاجابة

تم تعديل هذه المشاركة بواسطة nowfal_yassin_saif في 16 نوفمبر 2009 في 20:26

#20

اهلا بالاخوة سمير ونوفل، وشكرا لكم على هذا الاطراء الجميل،

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

المنتدى مليء بالشروحات من الاخوة الافاضل الذين سبقوني ولا أدري أي اختفوا :hmm:

سمير، يؤسفني سماع تحولك عن الفوكس برو...وقد تكون الأسباب معروفة

ولعلها نفسها التي تجعلني حالياً أفكر باختيار لغة اضافية (وليس بديلة)

وكون أنك عملت بالفوكس برو، فهل لك ان تتكرم باخبارنا عن Vb.net، لماذا كانت اختيارك الثاني؟ بعض مزاياها؟ أوجه الاختلاف بينها وبين الفوكس؟

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

نوفل.. الحمد لله الذي حلت المشكلة لديك،

ولا تترد في طرح أي استفسار

مع التحية

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

#21

مرحبا Shadowz

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

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

اقتباس
المنتدى مليء بالشروحات من الاخوة الافاضل الذين سبقوني ولا أدري أي اختفوا :hmm:

اني لا اقصد هذا المنتدي. اني اتكلم غن المنتديات الاجنبية التي كنت اشرك بها. ان هذا المنتدى يفاجئني دائما بالشرح المقصل للمواضيع على اختلاف انواعها.

اقتباس
ولعلها نفسها التي تجعلني حالياً أفكر باختيار لغة اضافية (وليس بديلة)

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

ما اعنيه بالتدريجي هو ان تحاول ان تغير مشروع من VFP الى VB.Net وتحاول ان تعرف ما معنى كل امر في VFP الى ما يعادله في vb.net

اقتباس
وكون أنك عملت بالفوكس برو، فهل لك ان تتكرم باخبارنا عن Vb.net، لماذا كانت اختيارك الثاني؟

لقد كان اختياري الثاني لان خبرتي في مجال البرمجة هي 14 سنة قي VFP و 3 سنوات في vb6 والقليل من ++c

ال syntax في vfp قريب من vb اما لغة C# or ++c فهي تحتوي على {} التي لا احبها

لذلك وجدت ان افرب لغة استطيع استعمالها هي vb.net وحيث ان لدي خبرة في vb6 فلقد رايته الاختيار الافضل لي

الافضل لي قد لا يكون الافضل لك هناك الكثير من المبرمجين الذين اختارو تعلم c# وهو امر ليس خطئا حيث ان لا قرق بين c# وال vb.net الا في syntax ولا فرق في السرعة

انني اتعلم الغة التي اعرف انها ستفيدني في صناعة business application وهذه الغات حسب رايي هي#C vfp access vb6 vb.net c# اما delphi ++C فاني اراها لغات لصناعة Windows application and games

لقد اصبحت لدي خبرة كبيرة في vfp ولقد قررت ان انشا framework عن طريق vfp الخاصة بي لاستعمالها في مشاريعي وبالفعل بدات في صناعتها حيث كنت اريد ان اصل الى مرحلة استطيع من خلالها كتابة ما يلي على سبيل المثال


lcFolderName = Folder.GetFolder_StyleVFP()

DEFINE CLASS Folder as Session OLEPUBLIC
Folder = Null

Procedure Init
This.Folder = CreateObject('Scripting.FileSystemObject')
EndProc

FUNCTION Create(FolderName) as Boolean
*fso = createobject('Scripting.FileSystemObject')
oFolder = fso.CreateFolder(FolderName)
ENDFUNC
FUNCTION Delete(FolderName) as Boolean
*fso = createobject('Scripting.FileSystemObject')
oFolder = fso.DeleteFolder(FolderName)
Return 1
ENDFUNC
FUNCTION Exist(FolderName as String) as Boolean
fso =createobject('Scripting.FileSystemObject')
RETURN fso.FolderExists(FolderName)
EndFunc
Function CD(Folder as String) as Boolean
Cd (Folder)
EndFunc
Function GetFolder_StyleVFP()
Return GetDir()
EndFunc
FUNCTION IsDirectoryExist (Directory as String) as Boolean
RETURN Directory(Directory) = .T.
EndFunc
Enddefine
Folder = CreateObject("Folder")

كان الهدف هو تحويل جميع اوامر vfp الى OOP وكان الامر ناجحا جدا معي ما عدا ان HDD قرر الانتحار و فقدت كل ما عملت لاجله مدة 6 اشهر من العمل المتواصل لذلك لا استطيع التعبير عن شعوري ف تلك اللحظة. لذلك كان القرار ان لا اعمل في vfp بعد الان وانتقلت في اليوم التالي مباشرة الى تعلم vb.net

drama :)

سوف اجاوب مرة اخرى على سؤالك عن الفرق بين vfp and vb.net (حسب معلوماتي طبعا) :)

#22

أهلا سمير

أولا لا داعي للاعتذار فللكل ظروفه...

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

حقيقة ان هذه شهادة يفخر بها كل من ساهم في هذا المنتدى.. ولعله فعلا يكون من أوائل المنتديات التي تم الحديث فيها عن الفوكس برو بشكل مفيد ومفصل ( على حد علمي الذي يكاد يصل لليقين التام )

صراحة كانت بدايتي مع الفوكس برو صعبة قليلا لاعتمادي على التعليم الذاتي من 15 سنة تقريبا وأكيد أنك عانيت أيضا من مشكلة قلة المصادر والشروحات سواء العربية أو الأجنبية في وقتها، ولكنها كانت ولا تزال كالسهل الممتنع الذي تعشقه سنة وتكرهه أسبوع، لذا لا مناص من الفوكس برو بالنسبة لي، خاصة وانه مضى على تشغيل بعض البرامج لدى بعض الزبائن أكثر من 10 سنين، بالاضافة الى أنها لغة البرمجة المعتمدة في عملي الحالي.

وفكرة اختيار لغة اضافية ليست الا كالحصول على شهادة دراسية جديدة، فالتنوع مفيد من كافة النواحي العلمية والعملية، وأعدك مهما كانت اللغة فلن أعيد تجربة التعليم الذاتي فقد تعبت من هذا الموال ( أو كبرنا شوي كتير ...وما في وقت زي زمان ) لذا سأختصر الوقت وأقصد مركزا كالمبتدئين مهما كانت اللغة التي سآخذها على الأقل لتعلم الأساسيات.. وبعدين بكمل لحالي

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

على كل بانتظار الفروقات ما بين vfp and vb.net وحسب معلوماتك، فلا أظن أن أحدا سيشرحها أكثر من شخص عمل باللغتين، وحتى لا أغلبك معي، فيكفي مجرد رؤوس أقلام

مع التحية

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

#23

الاخ / Shadowz

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

ملحوظة مرفق اليكم البرنامج........

ايضاً اريد ان اسئل هل توجد مواقع اخرى مثل موقع db4free.net

وجزاكم الله خيراً

post-149815-12603966766375_thumb.jpg

tqarer_net.rar

تم تعديل هذه المشاركة بواسطة nowfal_yassin_saif في 10 ديسمبر 2009 في 01:18

#24

اهلا اخي نوفل

يبدو ان السيرفر يتطلب أن يكون اسم الجدول بأحرف صغيرة وليس كبيرة، جرب وخبرني

للأسف لا اعرف الا db4free.net

واجمالا لو قمت بتنصيب MySql لديك والعمل عليه مباشرة فقد ذلك يكون أفضل لك

مع التحية

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

#25

الشكر لك ياخي Shadowz

ولا كن لم يفلح الامر مع العلم اني كنت استخدم سيرفر محلي AppServ 2.6 وعمل البرنامج بشكل سليم وعندما غيرت الى db4free حدثت هذه المشكلة

ثانياً:

لم افهم مغزى هذه العبارة

"واجمالا لو قمت بتنصيب MySql لديك والعمل عليه مباشرة فقد ذلك يكون أفضل لك "

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