PDA

View Full Version : اشکال در کار با ado



northkh_rah
شنبه 05 اسفند 1385, 10:37 صبح
سلام من یه برنامه دارم دیتا بیسش اکسس و با adotable کار کردم چند تا اشکال دارم ممنون میشم راهنمایی کنید

1-تو یه فرم یه dbedit داره محل خدمت را میگیرد و در جدول اضافه میکند .اول از dbnavigator استفاده کرده بودم بعد دیدم اگر کاربر دکمه insert را بزند که رکورد جدید اضافه شود ولی چیزی در dbedit تایپ نکند و دکمه post رابزند دلفی error میدهد که نمیتواند یک رکورد خالی ذخیره کند .توی اکسس یفالد ولیو فیلدم نامشخص تعریف کردم که اگه چیزی وارد نکرد اینو بنویسه ولی درست نشد واسه همین دو تا button گذاشتم واسه اضافه و ذخیره و برای ذخیره نوشتم adotable1.Edit;
if dbedit1.Text='' then
showmessage('رکورد خالی است')
else
adotable1.Post;

درست شده ولی یک رکورد را که قبلا اضافه شده راانتخاب میکنیم و مقدار ان فیلد درون dbedit نوشته میشود اگر ان را پاک کنیم و ذخیره رابزنیم طبق شرط بالا نباید چیزی را postکند ولی خالی جایگزین میشود
2-بعد از اضافه کردن رکورد ها اگر بخواهیم در فرم گزارش گیری که به dbgride دارد محتویات جدول راببینیم انچه تازه اضافه کردیم رانشان نمیدهد و باید یک بار برنامه را بندیم و دو باره اجرا کنیم

V60
شنبه 05 اسفند 1385, 23:05 عصر
سلام
ورودتان را تبریک می گویم
برای سوال اول: فکر کنم به صورت کلی اگر از کامپوننت dbanavigator استفاده نکنید ، برنامه قشنگ تر است ، ولی کدی که نوشته اید اگر بعد از if علاوه بر نشان دادن رکورد را کنسل کنید هیچ تغییری اتفاق نمی افتد و شما می توانید کاربر را مجبور به نوشتن در همان dbedit بکنید
به این صورت


if dbedit1.text='' then
begin
showmessage('رکورد خالی است');
adotable1.cancel;
dbedit1.setfocuse;
end
else
adotable1.post;

جواب دوم: برای گزارشگیری از چی استفاده می کنی، فکر کنم اگر قبل از چاپ و یا نمایش جدول مربوطه را یک بار بسته و دوباره باز کنی مشکل حل می شود.


adotable1.close;
adotable1.open;


باز هم موردی بود بنویسید
امیدوارم اینها مشکل را حل کرده باشد

mahdi bg
یک شنبه 06 اسفند 1385, 06:27 صبح
سلام
در مورد سوال اولت این کار رو بکن
[If Trim (dbedit1.Text) ='' then
تابعTrim تمامSpace ها (فضای خالی ها) رو بر می داره
چون موقع Insert،dbedit1 خالی اما
در حالت Updatedbedit1دارایSpace
در مورد سوال دوم
اگه از ADOTable استفاده می کنی
قبلش این کد رو بنویس
ADOTAble1.Active:=False
ADOTAble1.Active:=True;
اگر هم از ADOQuery استفاده می کنی
ADOTAble1.Clos
ADOTAble1.Open;

اگه مشکلی داشتی بتونم درخدمتم

mahdi bg
یک شنبه 06 اسفند 1385, 06:39 صبح
البته روش V60 هم جالبه

vcldeveloper
دوشنبه 07 اسفند 1385, 01:56 صبح
-تو یه فرم یه dbedit داره محل خدمت را میگیرد و در جدول اضافه میکند .اول از dbnavigator استفاده کرده بودم بعد دیدم اگر کاربر دکمه insert را بزند که رکورد جدید اضافه شود ولی چیزی در dbedit تایپ نکند و دکمه post رابزند دلفی error میدهد که نمیتواند یک رکورد خالی ذخیره کند .توی اکسس یفالد ولیو فیلدم نامشخص تعریف کردم که اگه چیزی وارد نکرد اینو بنویسه ولی درست نشد واسه همین دو تا button گذاشتم واسه اضافه و ذخیره و برای ذخیره نوشتمبرای چک کردن مقادیر وارد شده توسط کاربر، بهتره از رویداد OnBeforePost مربوط به AdoTable استفاده کنید. اگر شرط مربوطه برقرار بود که هیچ، اما اگر برقرار نبود، تابع Abort را فراخوانی کنید تا عملیات Post انجام نشود. در صورت استفاده از OnBeforePost دیگه فرقی نمی کنه از DBNavigator استفاده کنید یا خودتان دکمه تعریف کنید. هر زمانی، به هر طریقی تغییری در داده ها داده بشه و متد Post برای ذخیره تغییرات فراخوانی بشه (چه مستقیما توسط شما، چه بطور غیرمستقیم توسط برخی از کنترل ها مثل DBGrid) ، کد مربوط به OnBeforePost اجرا میشه.