View Full Version : من روی فرمم چتد تا ادیت دارم و یک dbnavigator
hamidehsadat
پنج شنبه 10 خرداد 1386, 09:19 صبح
من روی فرمم چتد تا ادیت دارم و یک dbnavigator .و در ادیت کاربر یک کد را وارد می کند و ممکن است از ان کد چند تایی داشته باشم حالا میخواهم با dbnavigator رکوردهای جدولم را براساس ان کد را پیمایش کنم .مثلا وقتی dbedit روی فرم داریم و یک dbnavigator و بخواهیم رکوردهای جدو ل را پیمایش کنیم روی یکی از باتن های dbnavigator کلیک میکنیم و رکوردهای جدول پیمایش می شوند حالا من به جای دبی ادیت ،ادیت روی فرم دارم و می خواهم وقتی کاربر روی باتن های dbnavigator کلیک کرد رکوردهای جدولم بر اساس ان کدی که در یکی از ادیت هام وارد کرده است پیمایش شود چگونه؟
ممنون
Mahyaa
پنج شنبه 10 خرداد 1386, 09:58 صبح
اگر سوالت رو درست فهمیده باشم میخواهی دیتا یک دیتاست رو در کنترلهای غیر Data aware نمایش بدی . برای این کار باید اونها رو دستی در کنترلها نشون بدی یعنی در رویداد OnDataChange دیتا سورسی که به DBNavigator وصله فیلدها رو بخونی و در Edit ها نمایش بدی .
ealvandi
پنج شنبه 10 خرداد 1386, 20:30 عصر
خوب من کاملا فهمیدم که چی میخواهید.
شما باید برای نمایش اطلاعات بانک در edit معمولی به ازای حرکت در رکوردهای بانک اطلاعات رو داخل edit بریزی .
حالا چگونگی این کار در استفاده از dbnavigator :
اول یک تابع بنویس که در اون اطلاعات فیلدهایی رو که میخوای در edit ها یا هر کنترل دیگه ای بریزی مثل
edit1.text := adotable1['name'];
بعد در رویداد onclick کنترل dbnavigator تابعی رو که نوشتی صدا بزرن.
نتیجه گیری : شما در ازای حرکت در روی رکوردها اطلاعات فیلدهاتون توسط dbnavigator تو edit های مورد نظرتون خواهید دید.
موفق باشید.
SYNDROME
پنج شنبه 10 خرداد 1386, 21:03 عصر
با سلام
خوب من کاملا فهمیدم که چی میخواهید.
شما باید برای نمایش اطلاعات بانک در edit معمولی به ازای حرکت در رکوردهای بانک اطلاعات رو داخل edit بریزی .
حالا چگونگی این کار در استفاده از dbnavigator :
اول یک تابع بنویس که در اون اطلاعات فیلدهایی رو که میخوای در edit ها یا هر کنترل دیگه ای بریزی مثل
edit1.text := adotable1['name'];
بعد در رویداد onclick کنترل dbnavigator تابعی رو که نوشتی صدا بزرن.
نتیجه گیری : شما در ازای حرکت در روی رکوردها اطلاعات فیلدهاتون توسط dbnavigator تو edit های مورد نظرتون خواهید دید.
موفق باشید.
بهتر نیست در رویداد AfterScroll مربوط به ADO بنویسی.
Mahyaa
پنج شنبه 10 خرداد 1386, 21:22 عصر
خوب من کاملا فهمیدم که چی میخواهید.
شما باید برای نمایش اطلاعات بانک در edit معمولی به ازای حرکت در رکوردهای بانک اطلاعات رو داخل edit بریزی .
حالا چگونگی این کار در استفاده از dbnavigator :
اول یک تابع بنویس که در اون اطلاعات فیلدهایی رو که میخوای در edit ها یا هر کنترل دیگه ای بریزی مثل
edit1.text := adotable1['name'];بعد در رویداد onclick کنترل dbnavigator تابعی رو که نوشتی صدا بزرن.
نتیجه گیری : شما در ازای حرکت در روی رکوردها اطلاعات فیلدهاتون توسط dbnavigator تو edit های مورد نظرتون خواهید دید.
موفق باشید.
با سلام
بهتر نیست در رویداد AfterScroll مربوط به ADO بنویسی.
همونطوری که فبلا گفتم بهترین رویداد برای این که دیتا رو در کنترلهای غیر Data_aware نشون بدید ، همون OnDataChange برای DataSource هستش . این به صراحت توی Help دلفی هم گفته شده :
OnDataChange is especially useful in applications that must synchronize data display in controls that are not data-aware.
hamidehsadat
شنبه 12 خرداد 1386, 15:01 عصر
اگر سوالت رو درست فهمیده باشم میخواهی دیتا یک دیتاست رو در کنترلهای غیر Data aware نمایش بدی . برای این کار باید اونها رو دستی در کنترلها نشون بدی یعنی در رویداد OnDataChange دیتا سورسی که به DBNavigator وصله فیلدها رو بخونی و در Edit ها نمایش بدی .ممنون mahyaa جان.این کاری که شما گفتید انجام دادم و رکوردهایی که میخواستم در ادیت ها نمایش داده میشد ولی یک مشکلی که داشت وقتی می خواستم رکوردها را ویرایش کنم داده ها ویرایش نمیشد.کد مربوط به دیتا سورسی که DBNavigator وصله
edit1.Text := table6.Fields[1].AsString;
edit5.Text := table6.Fields[2].AsString;
edit2.Text := table6.Fields[4].AsString;
edit3.Text := table6.Fields[3].AsString;
edit4.Text := table6.Fields[5].AsString;
کد ویرایش:
if (table6.Fields[1].AsString=edit1.Text)
then begin
ret:=messagedlg('ÇíÇ ÔãÇ ãØãíä åÓÊíÏ ßå Çíä ÏÇäÔÌæ ÐÎíÑå ÔæÏ',mtinformation,mbyesnocancel,0);
if (ret=idyes) then begin
table6.Edit;
table6.Fields[1].AsString:=edit1.Text ;
table6.Fields[2].AsString:=edit5.Text ;
table6.Fields[4].AsString:= edit2.Text ;
table6.Fields[3].AsString:= edit3.Text ;
table6.Fields[5].AsString:=edit4.Text ;
table6.Post;
end;
end;
مثلا وقتی به قسمت table6.Fields[1].AsString:=edit1.Text میرسید به event on data change میرفت و رکورد قبلی را در بانک سیو میشد و رکوردی که من میخواستم ویرایش نمی شدو همان داده قبلیش را داشت.
hamidehsadat
شنبه 12 خرداد 1386, 15:01 عصر
خوب من کاملا فهمیدم که چی میخواهید.
شما باید برای نمایش اطلاعات بانک در edit معمولی به ازای حرکت در رکوردهای بانک اطلاعات رو داخل edit بریزی .
حالا چگونگی این کار در استفاده از dbnavigator :
اول یک تابع بنویس که در اون اطلاعات فیلدهایی رو که میخوای در edit ها یا هر کنترل دیگه ای بریزی مثل
edit1.text := adotable1['name'];
بعد در رویداد onclick کنترل dbnavigator تابعی رو که نوشتی صدا بزرن.
نتیجه گیری : شما در ازای حرکت در روی رکوردها اطلاعات فیلدهاتون توسط dbnavigator تو edit های مورد نظرتون خواهید دید.
موفق باشید.ممنونehsan-alvandiجان کاریکه شما گفتید انجام دادم و مشکلی که در تاپیکmahyaa توضیح دادم ندارم و رکوردهام ویرایش میشوند.
Mahyaa
یک شنبه 13 خرداد 1386, 21:06 عصر
مثلا وقتی به قسمت table6.Fields[1].AsString:=edit1.Text میرسید به event on data change میرفت و رکورد قبلی را در بانک سیو میشد و رکوردی که من میخواستم ویرایش نمی شدو همان داده قبلیش را داشت.
خوب طبیعیه رویداد DataChange هستش دیگه !
فبل از قطعه کدی که برای نمایش فیلدها نوشتی این شرط رو بزار که اگر دیتاست در حالت Browse هست ، فیلدها رو نمایش بده وگرنه از Procedure خارج بشه .
if MyTable.State = dsBrowse then
begin
//--> your code to display data
end;
SYNDROME
دوشنبه 14 خرداد 1386, 05:07 صبح
با سلام
edit1.Text := table6.Fields[1].AsString;
edit5.Text := table6.Fields[2].AsString;
چرا از متدد FieldByName استفاده نمی کند.
اگر ترتیب فیلدها عوض شود کل برنامه بهم می ریزد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.