PDA

View Full Version : چرا گاهی DBComboBox اطلاعاتش به قول کاربرانم می پرد!



ali_abbasi22145
سه شنبه 20 فروردین 1387, 12:23 عصر
سلام
چرا گاهی DBComboBox من استفاده می کنم که جنسیت زن و مرد را با آن انتخاب شود اطلاعات آن را با DBNavigator تیک می زنم که Post شود اطلاعات به قول کاربرانم می پرد! (حدودا در 10 درصد موارد)
یعنی یا ذخیره نمی کند یا کاربرانم می گویند مرد انتخاب می کنند و زن ذخیره می شود!

Amir_Safideh
سه شنبه 20 فروردین 1387, 13:56 عصر
منظورتون DBComboBox هستش یا DBLookUpComboBox . چرا از DBComboBox استفاده میکنید ؟

اطلاعات آن را با DBNavigator تیک می زنم که Post شود اطلاعات به قول کاربرانم می پرد! (حدودا در 10 درصد موارد)

منظورتون اینه که با استفاده از DBNavigator عمل Insert و Post رو انجام میدید ؟
بهتره که یه کم بیشتر توضیح بدید که برای ذخیره کردن اطلاعات کد خاصی نوشته اید یا نه .
از چه بانکی استفاده میکنید و از چه ابزاری برای ارتباط با بانک استفاده میکنید ؟
--------------
موفق باشید .

SYNDROME
سه شنبه 20 فروردین 1387, 16:33 عصر
سلام
چرا گاهی DBComboBox من استفاده می کنم که جنسیت زن و مرد را با آن انتخاب شود اطلاعات آن را با DBNavigator تیک می زنم که Post شود اطلاعات به قول کاربرانم می پرد! (حدودا در 10 درصد موارد)
یعنی یا ذخیره نمی کند یا کاربرانم می گویند مرد انتخاب می کنند و زن ذخیره می شود!
فکر نکنم کلمه "پریدن" کلمه درستی باشد.
دوماً دوست عزیز حتماً در برنامه شما نقطه ضعفی وجود دارد که کاربران عمداً یا سهواً با زدن یک کلیدو... موجب اجرای کد فوق می شوند که موجب بروز خطا می شود.
مثلا خاصیتهایی مانند AfterScroll و یا BeforeScroll خیلی از این مشکلات را به وجود می آورد.
موفق باشید

Tasnim
سه شنبه 20 فروردین 1387, 17:25 عصر
احتمالا دیتا سورسی که آن را به dbcom... وصل کرده اید بسته میشود

ali_abbasi22145
چهارشنبه 21 فروردین 1387, 09:35 صبح
سلام و تشکر از توجه آقای SYNDROME و دیگر دوستان

>> از چه بانکی استفاده میکنید و از چه ابزاری برای ارتباط با بانک استفاده میکنید ؟
از دلفی 7 با ADO دلفی وصل می شوم به بانک SQL SERVER 2000.

>> منظورتون DBComboBox هستش یا DBLookUpComboBox . چرا از DBComboBox استفاده میکنید ؟
در ضمن گفتم که از DBComboBox استفاده می کنم نه DBLookUpComboBox.

>> منظورتون اینه که با استفاده از DBNavigator عمل Insert و Post رو انجام میدید ؟
بله

>> بهتره که یه کم بیشتر توضیح بدید که برای ذخیره کردن اطلاعات کد خاصی نوشته اید یا نه .
نه برای ذخیره از DBNavigator استفاده می کنم.

>> احتمالا دیتا سورسی که آن را به dbcom... وصل کرده اید بسته میش
من فقط در حالت خروج از برنامه جدولهایم را Close می کنم.

//////////////////////////////////////////////////

این کد ADOTable1AfterScroll من است://
if ADOTable1siCard.AsInteger<=0 then
begin
MainForm.ImageEnDBView1.Blank;
DynamicForm.ImageEnDBView1.Blank;
Exit;
end;

if DataSource1.DataSet.RecNo > 0 then
Record_No.Text:= IntToStr(DataSource1.DataSet.RecNo);

spGetCardPicture.Close;
spGetCardPicture.Parameters.ParamByName('@siCard') .Value:= ADOTable1siCard.AsInteger;
spGetCardPicture.Open;

//////////////////////////////////////

کد AfterInsert//
MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('creation_date').As DateTime:=Now;

///////////////////////////////////////

AfterOpen //
MainForm.ADOTable1.Active := True;
MainForm.ADOTable1.Properties['Update Criteria'].Value := adCriteriaKey; // Add to uses ADOInt

//////////////////////////////////////////////

BeforeInsert////
MainForm.ImageEnDBView1.Clear;
DynamicForm.ImageEnDBView1.Clear;

////////////////////////////////////////////////////////////

BeforePost//
این کد با توجه به شرط آن در 99% درصد موارد استفاده نمی شود و این خطا با توجه به اجرا نبودن این کد می دهد!//

if MainForm.ADOTable1.Modified then
begin // for ADOTable1.Modified
if not( Confirm_Save_Record = 'with_confirm_save' ) then
begin
MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('last_modified').As DateTime:=Now ;
end
else
If Application.MessageBox('ÂíÇ ãÇíá Èå ÐÎíÑå ÑßæÑÏ åÓÊíÏ¿','Warring',MB_YESNO)= IDNO then
begin
MainForm.ADOTable1.Cancel;
Abort ;
end
else
begin
MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('last_modified').As DateTime:=Now ;
end;

end;// for ADOTable1.Modified

/////////////////////////

Amir_Safideh
چهارشنبه 21 فروردین 1387, 11:03 صبح
و کدهایی هم برای AfterInsert و AfterOpen وBeforeInsert و BeforePost دارم و مجبورم استفاده کنم. من خودم شخصا برای Insert و Save از DBNavigator استفاده نمیکنم فقط برای پیمایش بین رکوردها به کاربر اجازه میدم که از اون استفاده کنه و دکمه های Insert و Save رو خودم طراحی میکنم و در ضمن زمانی که کاربر رکورد جدیدی رو ایجاد میکنه یا رکوردی رو ویرایش میکنه با کنترلهائی که انجام میدم Enabled مربوط به Navigator رو False میکنم تا زمانی که کاربر تغییرات رو ذخیره یا لغو نکرده باشه اجازه پیمایش بین رکوردها رو نخواهد داشت . البته من اینها رو گفتم که شاید ایده ای به ذهن شما برسه . ولی در کل برای رسیدن به پاسخ مشکلتون بهتره که کدهای AfterInsert و AfterOpen وBeforeInsert و BeforePost رو هم اینجا بزارید تا بهتر متوجه بشیم .
-------------------
موفق باشید .

ali_abbasi22145
چهارشنبه 21 فروردین 1387, 15:39 عصر
من خودم شخصا برای Insert و Save از DBNavigator استفاده نمیکنم فقط برای پیمایش بین رکوردها به کاربر اجازه میدم که از اون استفاده کنه و دکمه های Insert و Save رو خودم طراحی میکنم و در ضمن زمانی که کاربر رکورد جدیدی رو ایجاد میکنه یا رکوردی رو ویرایش میکنه با کنترلهائی که انجام میدم Enabled مربوط به Navigator رو False میکنم تا زمانی که کاربر تغییرات رو ذخیره یا لغو نکرده باشه اجازه پیمایش بین رکوردها رو نخواهد داشت . البته من اینها رو گفتم که شاید ایده ای به ذهن شما برسه . ولی در کل برای رسیدن به پاسخ مشکلتون بهتره که کدهای AfterInsert و AfterOpen وBeforeInsert و BeforePost رو هم اینجا بزارید تا بهتر متوجه بشیم .
-------------------
موفق باشید .

سلام
کدها را کامل در بالا با ویرایش مجدد تاپیک آوردم.

Amir_Safideh
چهارشنبه 21 فروردین 1387, 16:56 عصر
BeforePost//
این کد با توجه به شرط آن در 99% درصد موارد استفاده نمی شود و این خطا با توجه به اجرا نبودن این کد می دهد!//
چرا فکر میکنید که در بیشتر مواقع این کد استفاده نمیشه ؟ اتفاقا در بیشتر مواقع استفاده میشه . شما نوشتید که اگر جدول من Modified شده بود این دستورات رو اجرا کن خوب من فکر میکنم که جداول شما در بیشتر مواقع Modified شدن که حالا میخواهید تغییرات را ذخیره کنید .

MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('last_modified').As DateTime:=Now
این کدی هم جزو کدهائیه که در BeforPost نوشتید . لزومی نداره که شما جدول رو دوباره در حالت ویرایش قرار بدید چون جدول شما در حال ویرایش بوده چون شرط Modified در موردش صادق بوده . کدهای BeforPost رو دوباره چک کنید و اون خط کد که جدول شماره یک رو در حالت ویرایش میبره خذف کنید و دوباره تست کنید . البته من مشکل خاصی نمیبینم در این کدهای شما . پیشنهادی هم که میتونم بهتون بدم اینه که خودتون بشینید و چندتا ثبت تستی بزنید و ببینید که دقیقا این مشکل کی پیش میاد . زودتر به جواب خواهید رسید .
-------------
موفق باشید .

ali_abbasi22145
پنج شنبه 22 فروردین 1387, 09:48 صبح
چرا فکر میکنید که در بیشتر مواقع این کد استفاده نمیشه ؟ اتفاقا در بیشتر مواقع استفاده میشه . شما نوشتید که اگر جدول من Modified شده بود این دستورات رو اجرا کن خوب من فکر میکنم که جداول شما در بیشتر مواقع Modified شدن که حالا میخواهید تغییرات را ذخیره کنید .

MainForm.ADOTable1.Edit;
MainForm.ADOTable1.FieldByName('last_modified').As DateTime:=Now
این کدی هم جزو کدهائیه که در BeforPost نوشتید . لزومی نداره که شما جدول رو دوباره در حالت ویرایش قرار بدید چون جدول شما در حال ویرایش بوده چون شرط Modified در موردش صادق بوده . کدهای BeforPost رو دوباره چک کنید و اون خط کد که جدول شماره یک رو در حالت ویرایش میبره خذف کنید و دوباره تست کنید . البته من مشکل خاصی نمیبینم در این کدهای شما . پیشنهادی هم که میتونم بهتون بدم اینه که خودتون بشینید و چندتا ثبت تستی بزنید و ببینید که دقیقا این مشکل کی پیش میاد . زودتر به جواب خواهید رسید .
-------------
موفق باشید .

سلام
من در یک فایل متنی امکانی گذاشتم که با انتخاب آن کاربر هر بار moddify کرد ، تایید ذخیره می خواهد.
ضمنا من Trace کردم مطمئنم و بحث در مورد این نکنیم.
و در 1% مواقع این است که کاربر از برنامه را تنظیم می کند که moddify با تایید خود باشد دقیقا کد شماست و 99% مواقع کاربر از برنامه را تنظیم نمی کند که moddify با تایید خود باشد!