PDA

View Full Version : مشکل با onchange در DBEdit



echoes
چهارشنبه 24 بهمن 1386, 01:56 صبح
من وقتی روی ایونت onchane یک DBEdit یک مقدار کد نوشتم، بعد از کار کردن باهاش فهمیدم که کدها با توجه به شرطم یک مرحله قبل رو انجام می دهند، به طور واضح تر بگم یعنی این عمل رو باید توی تغییر قبلی انجام می دادند ولی در تمام مراحل همین مشکل ادامه داشت، حتی وقتی فیلد رو بر روی کلید قرار دادم تا مطمئن شم حتما مقدار تغییر می کنه و باید عمل انجام بشه یک مرحله عقب تر رو انجام می داد؟ چیکارش کنم؟!:عصبانی++:

Aidin
چهارشنبه 24 بهمن 1386, 02:20 صبح
بعد از 2-3 بار خواندن :

منظورت اینه که روی رکورد قبلیت عمل رو انجام میده ؟؟

echoes
چهارشنبه 24 بهمن 1386, 02:42 صبح
تازه کلی زور زدم اینجوری نوشتم
من یک DBGrid دارم و چندتا DBEdit و چندتا Edit دارم بعد روی onchange یکی از DBEdit ام کدی نوشتم که بعد ازچک کردن یک شرط و مقایسه اون با یک DBEdit دیگه اطلاعات Dbedit ها رو توی Editها بریزه حالا وقتی روی گریدم حرکت می کنم دستوراتی رو اجرا می کنه که شرطش یک مرحله قبل برقرار بوده،
امیدوارم منظورم رو رسونده باشم

SYNDROME
چهارشنبه 24 بهمن 1386, 05:58 صبح
آیا کامپونت DBEdit شما همان کامپونت پیش فرض خود دلفی است یا نه کمی دستکاری شده است؟
در رویداد OnKeyPress هم چک کنید ببینید این شمل را باز هم دارید؟
موفق باشید

dkhatibi
چهارشنبه 24 بهمن 1386, 07:24 صبح
به جای چک با dbedit از متد FieldByName فیلد متناظر با dbedit هم استفاده نمایید ببیدنید مشکلی دارید؟

echoes
سه شنبه 30 بهمن 1386, 14:12 عصر
onkeypress هم جواب نداد، مشکل برقراره ضمنا من از همون کامپوننتهای دلفی بدون هیچ تغییری استفاده کردم. متوجه منظور DKKhatibi نشدم؟

dkhatibi
سه شنبه 30 بهمن 1386, 16:37 عصر
dbedit شما به یک فیلد متناظز است. با متد fieldbyname('fieldName) می تونید مقدار یک فیلد را بخوانید و ببنویسید. حالا شما مقایسه تان را با این مقدار انجام دهید.

Mo1659
چهارشنبه 01 اسفند 1386, 00:59 صبح
من این مشکل رو قبلا داشتم توی رویداد Onkeyup بنویسید مشکل حل میشه.

Amir_Safideh
چهارشنبه 01 اسفند 1386, 10:37 صبح
خوب من فکر میکنم این کد رو امتحان کنی بد نباشه :

with ADOTable1 do
Edit1.Text := FieldByName('Field1').AsString + ' '+FieldByName('Field2').AsString;

خوب فقط حالا یه چیزی رو خدمتت عرض کنم که اگر شما ADOTable رو روی همین فرم (فرمی که DBGrid در اون قرار داره) قرار دادی بهتره که این کد رو در رویداد AfterScroll مربوط به ADOTable قرار بدی و در غیراینصورت اگر شما برای پیمایش روی رکوردها از DBNavigator استفاده میکنید این کد رو در رویداد OnClick مربوط به DBNavigator و همچنین در رویداد OnClick مربوط به DBGrid بنویسید تا با هر بار حرکت در بین رکوردها این کد اعمال شود.
موفق باشید.

echoes
سه شنبه 21 اسفند 1386, 14:44 عصر
من از DBGrid استفاده کردم!!

Amir_Safideh
چهارشنبه 22 اسفند 1386, 11:06 صبح
خوب دوست عزیز شما از DBGrid استفاده کردید ولی خوب این DBGrid شما در اصل به یک DataSource ارتباط داره خوب شما این کد رو اگر به این صورت بنویسی دیگه مقدار رو مستقیم از DataSource میگیره نه از DBGrid .
---------
موفق باشید.

ParsaNM
شنبه 25 اسفند 1386, 14:54 عصر
من پیشنهاد میکنم از Field.SetText , Field.GetText استفاده کنی خیلی کاربردی تره ...
فیلدی رو که به DBEDit یا DBGRID متصل کردی این دو تا رویداد رو داره ...
OnGetText وقتی که مقدار فیلد داره لود میشه میتوان با تغییر مقدار Text هر چی میخوای جای مقدار نمایش بدی
OnSetText وقتی Text پر شد تو می تونی به مقداری که دوست داری تو فیلد ذهیرش کنی..

مثال کاربردیشم وقتیه که تو دیتابیس 1یا0 ذخیره میکنی ولی میخوای بله و خیر رو نمایش بدی یا حتی کاربر بلی یا خیر رو تایپ کنه ...

tefos666
شنبه 25 اسفند 1386, 15:20 عصر
سلام دوست عزیز اگر من درست مشکل شما رو متوجه شده باشم باید بگم که مشخصه که همچین مشکلی پیش میاد چون کار شما از لحاظ منطقی اشتباه هستش

برای اینطور مشکلات خود دلفی یه راه حل ساده گذاشته و اون هم استفاده از فیلدهای محاسباتی هستش - طریقه استفادش هم خیلی بیشتر از اونی که فکر میکنی ساده هستش
کافی روی table خودت دوبار کلیک کنی و روی اون راست کلیک کنی و یک new field بسازی
نوع اون رو calculated انتخاب کن و یک اسم بهش بده و بگو مثلا integer باشه اگر حالا نمیخوای اونو نشون بدی (توی DBGRID) میتونی VISIBLE اون رو false کنی و جای اون edit که مقدارها رو
توش میریختی کافیه یک dbedit دیگه رو فرم بزاری و اون رو به فیلد جدیدی که ساختی متصل کنی
برای انجام کار رو اون فیلد هم روی table یک بار کلیک کن و در قسمت oncalculatedfiled و یا oncalcfield کدت رو بنویس و مقدارت رو بهش اینطوری نسبت بده مثلا میخوای حاصل ضرب 2 تا فیلدت (dbedit1.dbedit2) تو اون ریخته شه و یا هرچیز دیگری

table1.datasource.dataset['newcalcfield']:=table1.datasource.dataset['a']*table1.datasource.dataset['b']
0
اگر بازم مشکلی بود در خدمتیم !!! :خجالت:

success is doing , not wishing :عصبانی++:

SYNDROME
شنبه 25 اسفند 1386, 16:56 عصر
می توان ار فیلد Cal استفاده کرد ولی مشکلی که این نوع فیلدها رادر شما نمی توانید جستجو روی آن انجام دهید.
اگر بانکتان SQL و . . . است می توانید با دستور Case عمل کنید.


(Case Kind
When 1 Then 'فعال'
When 2 Then 'غیر فعال' End)As SKind

موفق باشید

ParsaNM
یک شنبه 26 اسفند 1386, 13:29 عصر
دوستان عزیز اشتباه نکنید روی فیلد calc هم می شود جستجو کرد به شرطها و شروطها...
اول : از تکنولوژی Midas استفاده کنید.
دوم: نوع فیلد میبایست Internal Calc باشد.