ورود

View Full Version : سوال: کنترل مقدار قابل قبول برای فیلد عددی در Table Designer



mostafa_zamani
یک شنبه 20 بهمن 1392, 19:25 عصر
با سلام و احترام
بنده برای فیلد عددی در Table Designer در قسمت Rule عبارت ID > 0 را گذاشته ام تا جلوی ورود مقدار صفر و منفی بطور قطعی گرفته شود .
حالا در فرم ورود اطلاعات در رویداد Valid کنترل گذاشته ام که اگر کاربر مقدار صفر وارد کند به هشدار دهد .
ولی نکته اینست که دستور نوشته شده در Rule زودتر از رویداد Valid اجرا می شود ، و پنجره شامل دکمه OK , Revert است که برای کاربر چندان مناسب نیست .

چگونه مقادیر فیلدها را در Table Designer در قسمت Rule کنترل کنیم بطوریکه پیام داده شده به کاربر مناسب و مفهوم باشد ؟
با تشکر

gh_khajehzade
دوشنبه 21 بهمن 1392, 09:58 صبح
دوتاکار میتونی کنی:
1-در table designer درmassage پیام رو بذاری.
2-کلاس wizbtns رو از شاخه اصلی فاکس در پوشه برنامت کپی کنی و اونو فارسی کنی.و اصلا با table desiner کاری نداشته باشی.

mostafa_zamani
سه شنبه 22 بهمن 1392, 11:13 صبح
با سلام و تشکر خدمت جناب خواجه زاده
کنترل مقادیر فیلدها و بطور کلی مبحث جامعیت داده ها (Data integrity ) اگر در قسمت طراحی جدول انجام شود، بسیار مطمئن تر است .
در این روش کنترل فقط در یکجا انجام می شود و اگر درست عمل کند جامعیت داده ها تضمین شده است و همه جا عمل می کند .
بطور مثال اگر کاربر جدولها را مستقیما نیز باز کند باز هم این کنترل عمل می کند .
بنده ابتدا کنترل را روی تک تک فیلدها گذاشتم (در Table Designer در قسمت Rule ) و در message هم پیام گذاشتم ، ولی ویژوال فاکس پیام بنده را با دکمه OK , Revert نشان می دهد که پیام مناسبی برای کاربر نیست .
سپس در فرم در رویداد Valid نیز کنترل گذاشتم (بعنوان کنترل ثانوی) ، ولی نکته اینست که دستور نوشته شده در Rule زودتر از رویداد Valid اجرا می شود !

در آخر تصمیم گرفتم که کنترل همه فیلدها را در قسمت Record Validation بگذارم بصورت زیر :
ICASE(ID<=0,.F.,EMPTY(nam),.F., LEN(ALLTRIM(cd_mli))#10,.F., LEN(ALLTRIM(cd_psti))#10,.F.,.T.)


و در قسمت Message پیام مناسبی برای همه فیلدها گذاشتم .
با این روش در فرم ها با رویداد Valid مقادیر وارد شده کاربر را کنترل می کنم ، ولی اگر چیزی از دستم در رفت ، قسمت Record Validation کنترل را انجام می دهد .
دوستان گرامی ! لطفا این روش را نقد کنید !

mostafa_zamani
سه شنبه 22 بهمن 1392, 11:16 صبح
دوتاکار میتونی کنی:
1-در table designer درmassage پیام رو بذاری.
2-کلاس wizbtns رو از شاخه اصلی فاکس در پوشه برنامت کپی کنی و اونو فارسی کنی.و اصلا با table desiner کاری نداشته باشی.

با سلام و تشکر از جنابعالی .
لطفا در مورد نحوه استفاده از کلاس فوق کمی بیشتر توضیح دهید .

yabande92
چهارشنبه 23 بهمن 1392, 07:27 صبح
-------------------------

yabande92
چهارشنبه 23 بهمن 1392, 07:33 صبح
------------------------------

yabande92
چهارشنبه 23 بهمن 1392, 07:40 صبح
با سلام و تشکر خدمت جناب خواجه زاده
کنترل مقادیر فیلدها و بطور کلی مبحث جامعیت داده ها (Data integrity ) اگر در قسمت طراحی جدول انجام شود، بسیار مطمئن تر است .
در این روش کنترل فقط در یکجا انجام می شود و اگر درست عمل کند جامعیت داده ها تضمین شده است و همه جا عمل می کند .
بطور مثال اگر کاربر جدولها را مستقیما نیز باز کند باز هم این کنترل عمل می کند .
بنده ابتدا کنترل را روی تک تک فیلدها گذاشتم (در Table Designer در قسمت Rule ) و در message هم پیام گذاشتم ، ولی ویژوال فاکس پیام بنده را با دکمه OK , Revert نشان می دهد که پیام مناسبی برای کاربر نیست .
سپس در فرم در رویداد Valid نیز کنترل گذاشتم (بعنوان کنترل ثانوی) ، ولی نکته اینست که دستور نوشته شده در Rule زودتر از رویداد Valid اجرا می شود !

در آخر تصمیم گرفتم که کنترل همه فیلدها را در قسمت Record Validation بگذارم بصورت زیر :
ICASE(ID<=0,.F.,EMPTY(nam),.F., LEN(ALLTRIM(cd_mli))#10,.F., LEN(ALLTRIM(cd_psti))#10,.F.,.T.)


و در قسمت Message پیام مناسبی برای همه فیلدها گذاشتم .
با این روش در فرم ها با رویداد Valid مقادیر وارد شده کاربر را کنترل می کنم ، ولی اگر چیزی از دستم در رفت ، قسمت Record Validation کنترل را انجام می دهد .
دوستان گرامی ! لطفا این روش را نقد کنید !

آقای mostafa_zamani با سلام
یک سئوال داشتم :
من خودم همیشه کنترل ورودی رو در فرمها انجام میدادم ولی روش شما همانطور که توضییح دادید بسیار مطمئن تر هست . بنابر این بصورت تستی یک table با field عددی ایجاد ودر Rule اون همان کار شما رو انجام دادم . حالا توی فرم وقتی میخوام یک رکورد ایجاد کنم قاعدتا پیغام خطا دریافت میکنم ! چطور باید ورودی رو دریافت و تو table ذخیره کرد. من عادت کردم که توی فرم بعد از دریافت ورودی و کنترل یک رکورد ایجاد (append balnk) و بعد مقادیر رو توی table قرار بدم (replace fieldname with thisform.textbox1.value)
لطفا راهنمایی کنید

mostafa_zamani
پنج شنبه 24 بهمن 1392, 07:53 صبح
سلام علیکم
بجای دستور append blank از دستور INSERT INTO ... استفاده کن .
موفق باشید

gh_khajehzade
شنبه 26 بهمن 1392, 14:25 عصر
لطفا در مورد نحوه استفاده از کلاس فوق کمی بیشتر توضیح دهید .
با سلام
زمانی که از ویزارد فاکس برای ساختن فرم استفاده میکنی قسمت کلیدها مربوط به کلاس wizbtn.vcx هست.برای فارسی کردنش(تا حد امکان)ابتدا از شاخه اصلي فاكس واز پوشه wizards دو فایل wizbtn.vcx و wizbtn.vct رو تو پوشه برنامت کپی کن.حالا فایل wizbtn.vcx رو باز ودر زیر عبارت class name روی txtbtns دابل کلیک کن
تا فرم txtbtns باز بشه.در خاصیت setcaption میتونی عبارات رو فارسی کنی.
همچنین پیامهایی که مثلا هنگام خروج(بعد از تغییر رکورد) میاد میتونی فارسی کنی.
در آخر کلاسwizbtn.vcx فرم رو باید cut و کلاس تغییر داده شده رو (با استفاده از form controls ) جای اون قرار بدی.البته این کارها رو فقط برای دو کلید add و edit که
caption اونا تغییر میکنه نیاز هست انجام بدی .برای سایر کلیدها از پنجره خواص فرم برنامت میتونی ای کار رو بکنی و نیازی به باز کردن کلاس نیست.

yabande92
یک شنبه 27 بهمن 1392, 21:00 عصر
با تشکر
آیا دستور INSERT INTO علاوه بر کارایی فوق ویژگی خاص دیگری دارد؟
من خودم همشیه تا به امروز جهت درج در جدول از appe blank و replace استفاده کردم . آیا دستور InSERT INTO برتری نسبت به دستور append balnk و replace داره خیر ؟