View Full Version : Value یا ControlSourced یا ...
IC_prog
دوشنبه 19 شهریور 1386, 13:32 عصر
کدام یک صحیح تر است ===>>
replace ccode with thisform.c1
replace ccode with thisform.text1.value
replace ccode with thisform.text.controlsourc
farhad_shiri_ex
دوشنبه 19 شهریور 1386, 13:53 عصر
اولین خط دستورتان اگر C1 یک شی است از چه نوعی است!چون این دستور خطا است .
دومین دستور درست است ولی سعی کنید از یک متغیر برای انتقال داده استفاده نمایید.
سومین دستور هم که مشخص نیست شما چه کاری می خواهید انجام دهید چون با این دستور که هم از نظر شکل دستوری مشکل دارد هم از نظر منطقی نشدنی است بهتر این کار اینست که مشخص نمایید چه کاری می خواهید انجام دهید!
IC_prog
دوشنبه 19 شهریور 1386, 14:08 عصر
c1 یک متغیر است که با new property تعریف شده. و ورودی را از text1 میگیرد حال میخواهیم ورودی را به بانک اطلاعاتی اضافه کنیم.
mehran_337
دوشنبه 19 شهریور 1386, 16:44 عصر
ایکاش این پروپرتی را به فرم اضافه نمی کردید و در ابتدای دکمه save این دستور را اضافه می کردید :
c1 = thisform.objectname.value
replace fieldName with c1
rahro
سه شنبه 20 شهریور 1386, 06:33 صبح
ایکاش این پروپرتی را به فرم اضافه نمی کردید و در ابتدای دکمه save این دستور را اضافه می کردید :
c1 = thisform.objectname.value
replace fieldName with c1
من این رو پیشنهاد میکنم البته تمام راه ها صحیح و موردی ندارد
Replace table1.name with Thisform.objectname.value
kia1349
سه شنبه 20 شهریور 1386, 07:18 صبح
هر دو درسته
استفاده از متغیر واسطه اگر اورهد به سیستم تحمیل نکنه بهتره
rezaTavak
سه شنبه 20 شهریور 1386, 09:22 صبح
اما یک نکته این است که این کارها در کند کردن فرایند خطایابی برنامه شما تاثیر میگذارد.
چرا از راه استاندارد استفاده نمیکنید؟
rahro
سه شنبه 20 شهریور 1386, 09:45 صبح
اما یک نکته این است که این کارها در کند کردن فرایند خطایابی برنامه شما تاثیر میگذارد.
چرا از راه استاندارد استفاده نمیکنید؟
و اما راه استاندارد؟؟؟
IC_prog
سه شنبه 20 شهریور 1386, 12:54 عصر
ایکاش این پروپرتی را به فرم اضافه نمی کردید و در ابتدای دکمه save این دستور را اضافه می کردید :
c1 = thisform.objectname.value
replace fieldName with c1
با تشکر از کلیه اساتید .
آقا مهران اساتید معتقدند که باید متغییر به پروپرتی اضافه شود تا تداخل و ... با دیگر فرمها نداشته باشد نظر شما چیست ؟
البته من یک کاری کردم :
ابتدا new property یک متغیر به نام c1 تعریف کردم سپس در control source آن مقدار
thisform.c1 را قرار دادم
و بعد replace ccode with thisform.c1
چطوره ؟
البته در فرم مورد نظر ممکن است c1 از جایی غیر از textbox نیز مقدار دریافت کند.:کف:
mehran_337
سه شنبه 20 شهریور 1386, 13:19 عصر
ببینید اینکه تداخل ایجاد نشود خب متغیر c1 وقتی در یک متد تعریف می شود تا پابلیک نباشد حتی در متد دیگر نیز قابل استفاده نیست.
و اما در مورد چرا متغیر ؟؟؟
در فرمهای دیتااینتری من به شخصه این مراحل را دارم.
- حذف فضای خالی محتوای تکست باکس
- مقایسه اینکه آیا مقدار صحیح وارد شده است یا نه (مثلا رنج یک عدد که نباید بزرگتر از فلان مقدار باشد)
- بررسی اینکه اگر مقدار خالی بود و باید تکمیل شود پیغامی مبنی بر اینکه مقدار تکمیل شود صادر شود
و ...
پس با این اوصاف تکرار عبارت thisform.text1.value خسته کننده است و به راحتی بجای این ، عبارت c1 بکار برده می شود.
rezaTavak
سه شنبه 20 شهریور 1386, 13:40 عصر
راه استاندارد controlsource است.
IC_prog
سه شنبه 20 شهریور 1386, 15:28 عصر
البته من یک کاری کردم :
ابتدا new property یک متغیر به نام c1 تعریف کردم سپس در control source آن مقدار
thisform.c1 را قرار دادم
و بعد replace ccode with thisform.c1
چطوره ؟
البته در فرم مورد نظر ممکن است c1 از جایی غیر از textbox نیز مقدار دریافت کند.:کف:[/quote]
لطفا در مورد کاری که کردم نظر بدید. آیا درسته ؟ :ناراحت:
rahro
سه شنبه 20 شهریور 1386, 18:06 عصر
راه استاندارد controlsource است.
زمانی که حقیر تحت داس کار میکردم همیشه از این روش انتقاد میشد ویکی از مهمترین اشکالتش هم این بود که کاربر حتی برای یک عملیاتی که در آخر منجر به درج یک رکورد هم نمیشد میبایست در اول کار یک رکورد اضافه کنه و درانتها حذف کنه حال چه امکانات جالبی اضافه شده که دوستان پیشنهاد این روش رو میکنن , هنوز ما از بی نصیبیم و مشتاق شنیدن. خواهشا یکی یک توضیح با مثال بده ثواب داره :خجالت::خجالت:
rezaTavak
چهارشنبه 21 شهریور 1386, 07:53 صبح
این controlsource به این صورت کار می کند:
هنگام refresh مقدار متناظر در فیلد خوانده میشود.
هنگامی که به رکورد بعدی میروید مقدار در فیلد ثبت می شود.
البته من همیشه اینکار را با کلاس txtbtn انجام می دهم.
rahro
چهارشنبه 21 شهریور 1386, 08:56 صبح
این controlsource به این صورت کار می کند:
هنگام refresh مقدار متناظر در فیلد خوانده میشود.
هنگامی که به رکورد بعدی میروید مقدار در فیلد ثبت می شود.
البته من همیشه اینکار را با کلاس txtbtn انجام می دهم.
جناب توکل:
هنوز این موضوع برای حقیر نامفهومه که هنگام تشکیل رکورد جدید , در بدو شروع , textbox ما به کدام رکورد اتصال داره!؟؟ آیا یک رکورد ایجاد میشه یا نه ؟؟ نمیشه یه مثال کوچلو بگذارید؟!
IC_prog
چهارشنبه 21 شهریور 1386, 09:15 صبح
لطفا جواب منو هم بدید!
rezaTavak
چهارشنبه 21 شهریور 1386, 10:05 صبح
پست شماره ۱۲:
چرا متغیر تغریف کردید؟ به جای اینکه متغیر c1 را دستکاری کنید مقدار textbox را عوض کنید و دیگر نیازی به replace نیست. (البته اگر از کلاس txtbtn استفاده کرده باشید.) گرچه کار شما درست است اما از لحاظ منطقی برنامه تا آنجا که ممکن است باید در پروسه کمتری اجرا شود.
پست شماره ۱۵:
بستگی دارد از کلاس txtbtn استفاده کرده اید یا خیر. اگر استفاده کرده باشید به آخرین رکورد یعنی رکورد اضافه شده. البته شماره رکورد منهای یک است( ۱- ) بعد از ذخیره شماره رکورد درست خواهد شد.
اما اگر غیر از این باشد و append blank کنید به آن رکورد .
شما در یک جدول اطلاعاتی در این حالات هستید:
۱ - یک رکورد واقعی با شماره ای بین یک تا بزرگترین رکورد.
۲ - ابتدای جدول با کد BOF() مشخص می شود
۳ - انتهای جدول با کد EOF مشخص می شود.
در مورد ۲ توضیح اینکه اگر در اولین رکورد باشید skip -1 شما را به این رکورد مجازی می برد. در مورد ۳ هم اگر در آخرین رکورد باشید skip +1 یا شرطی که صادق نباشد یا locate for که یافت نشده باشد یا...
اگر حالت یک باشید controlsource به همان شماره رکورد
اگر حالت ۲ و ۳ باشید خطا روی میدهد.
تذکر رکورد جدید شماره -۱ دارد.
rahro
چهارشنبه 21 شهریور 1386, 11:14 صبح
ببخشید. عذر میخوام توضیحات شما خوب و عالیه ولی خواهشا یک مثال کوچلو آپلود کنید .!:بوس::افسرده::افسرده:
IC_prog
چهارشنبه 21 شهریور 1386, 12:08 عصر
پست شماره ۱۲:
چرا متغیر تغریف کردید؟ به جای اینکه متغیر c1 را دستکاری کنید مقدار textbox را عوض کنید و دیگر نیازی به replace نیست..
ببخشید من متوجه نشدم . در کاری که من کردم کدوم روش درستتره :
replace ccode with thisform.c1
-----------------------------------
replace ccode with thisform.text1.value
:اشتباه:
rezaTavak
چهارشنبه 21 شهریور 1386, 13:08 عصر
مثال: یک جدول بسازید. یک فرم با wizard فاکس پرو بسازید که این جدول را بتوانید کنترل و ویرایش کنید. بهمین سادگی.
شاید شما از این wizard فرم ساز استفاده نمی کنید؟
در واقع شما نباید از replace استفاده کنید. چراکه وقتی یک کنترل برای تغییر از طرف خود فاکس هست چرا دیگر اضافه کاری؟؟؟ هر دو اینکارها باعث این میشوند که شما برنامه غیر منعطف داشته باشید.
اما از لحاظ اصولی دستور ۲ نسبت به دستور ۱ ارجحیت دارد و آن این است که بعدها که فرمتان را باز کنید لااقل می فهیمید که این فیلد از کجا تغذیه می شود.
کارشما از لحاظ syntax مشکل ندارد از لحاظ اینکه بعدها به مشکل می خورید مشکل ساز است. مثل متغیر public یا دستور goto در زبانهای غیر ساختیافته. یا نبود Object در زبانهای غیر شی گرا.
rahro
پنج شنبه 22 شهریور 1386, 06:26 صبح
سلام
میدانید مشکل در چیه؟ مشکل در دید هستش. من میتونم درک کنم شما در خصوص یک فرم ساده چی می گوئید ولی فرض کنیم فرم شما فرم ثبت فاکتور فروشه که از textbox و کرسری که محتوای فاکتور شما رو نگه داری میکنه درست شده پس شما در فرمتان مجبورید اطلاعات یک فاکتور رو به یک کرسر بریزید وبعد آنرا به جدول اصلی خود منتقل کنید . میتونم درک کنم شما در خصوص textbox های فرم چی میگید ولی شما چطور در این روش محتوای کرسر رو به جدول انتقال میدید؟!!!
rezaTavak
پنج شنبه 22 شهریور 1386, 07:39 صبح
من یا با جداول فاکس کار میکنم یا remote view در هر دو صورت کار را به فاکس میسپارم و درست جواب میگیرم بدون کار اضافه.
البته txtbtn با برخی کلاسها مشکل دارد! دلیلش این است که فرض می کند در فرم شما فقط کلاس ساده وجود دارد.
rahro
پنج شنبه 22 شهریور 1386, 08:36 صبح
من یا با جداول فاکس کار میکنم یا remote view در هر دو صورت کار را به فاکس میسپارم و درست جواب میگیرم بدون کار اضافه.
البته txtbtn با برخی کلاسها مشکل دارد! دلیلش این است که فرض می کند در فرم شما فقط کلاس ساده وجود دارد.
نه نه مطمئنا من نتوانستم منظورم رو درست برسانم
ببنید در فرم ثبت فاکتور شما هم textbox دارید هم remote view. حداقل اینکه تصور من روی این فرمه . چون اطلاعات رو توسط textbox از کاربر میگیرم و در grid در معرض دید کاربر قرار میدم . حقیر منظورش این بود که من در این فرم در هنگام استفاده از remote view که نام فایل اون هم به صورت تصادفی به وجود میاد چطور میتونم از این روش استفاده کنم چون یک واسطه اینجا بین textbox و جدول اصلی قرار داره که اون remote view است .
امیدوارم منظورم رو رسانده باشم .
rezaTavak
پنج شنبه 22 شهریور 1386, 12:00 عصر
remote view در داخل بانک اطلاعاتی شما نیست؟
اگر باشد فاکس مانند یک جدول معمولی خودش با آن رفتار میکند. (البته به شرطی که تمام چیزهایی که در رابطه با mysql گفته ام رعایت کنید.)
واسطه مهم نیست اسم آنرا را ذکر کنید. (البته باید خودتان remote view را با اسم با معنی بسازید.)
اگر هم اسمش را نمی دانید به آن alias بدهید که خودتان آنرا میدانید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.