p_ooya
سه شنبه 23 خرداد 1391, 00:17 صبح
سلام به همه.
من یه مشکل خیلی جدی دارم که زندگیم رو غم انگیز کرده (!) و امیدوارم دوستان با تجربهتر بتونند به من کنند.
من یه برنامه با دلفی ۷ نوشتم که از SQL Server 2000 استفاده میکنه. در این بانک یک جدول داریم برای ثبت تماسها. مشکل اینجاست که بعضی از تماسها بدون دلیل مفقود میشن! یعنی کاربر دکمه ثبت تماس رو میزنه و بدون اینکه خطا یا اروری پیش بیاد. بعداً موقع تهیه گزارش مشخص میشه که رکوردی موجود نیست!
کد مربوط در دلفی (برای اطمینان خیلی زیاد، من کد رو عیناً اینجا کپی میکنم)
time:=DateTimeToUnix(now);
DataModule1.ADOQueryMultiPurpose.Close;
DataModule1.ADOQueryMultiPurpose.SQL.Clear;
DataModule1.ADOQueryMultiPurpose.SQL.Text:='INSERT INTO Calls values ('+edit17.Text+','''+SolarDatePicker4.Text+' '+TimeToStr(DateTimePicker2.Time)+''','''+Memo5.Te xt+''','''+ComboBox5.Text+''','''+ComboBox6.Text+' '','+IntToStr(time)+')';
DataModule1.ADOQueryMultiPurpose.ExecSQL;
بعد از اینکه این مشکل شروع شد، برای اطمینان از اینکه ثبت انجام میشه یا نه، بعد از هر ثبت کنترل میکنم که آیا رکوردی وارد بانک شده یا خیر:
DataModule1.ADOQuerySuccessTest.Close;
DataModule1.ADOQuerySuccessTest.SQL.Clear;
DataModule1.ADOQuerySuccessTest.SQL.Text:='select * from calls where id='+Edit17.Text+' and unix_date='+IntToStr(time);
DataModule1.ADOQuerySuccessTest.Open;
if (DataModule1.ADOQuerySuccessTest.RecordCount=1) then
begin
پیام موفقیت تماس
UpdateLog('insert call',StrToInt(Edit17.Text),MidStr(memo5.Text,0,50 ));
SolarDatePicker4.ShowDefaultDate:=false;
SolarDatePicker4.Clear;
SolarDatePicker4.ShowDefaultDate:=true;
DateTimePicker2.Time:=Now;
Memo5.Clear;
ComboBox5.SetFocus;
end
else
begin
نمایش خطا
end;
من یه جدول کوچیک درست کردم که به عنوان log ثبت تماس عمل میکنه. جالبترین قسمت ماجرا اینجاست که هنگام ثبت پیام موفقت تماس مشاهده میشه (یعنی رکورد در بانک هست!)، در log هم ثبت میشه. اما بعد از مدتی از جدول تماسها مفقود/گم/پاک میشه.
به نظر شما دلیلش چیه؟ راهکارش چیه؟
پیشاپیش ممنون.
من یه مشکل خیلی جدی دارم که زندگیم رو غم انگیز کرده (!) و امیدوارم دوستان با تجربهتر بتونند به من کنند.
من یه برنامه با دلفی ۷ نوشتم که از SQL Server 2000 استفاده میکنه. در این بانک یک جدول داریم برای ثبت تماسها. مشکل اینجاست که بعضی از تماسها بدون دلیل مفقود میشن! یعنی کاربر دکمه ثبت تماس رو میزنه و بدون اینکه خطا یا اروری پیش بیاد. بعداً موقع تهیه گزارش مشخص میشه که رکوردی موجود نیست!
کد مربوط در دلفی (برای اطمینان خیلی زیاد، من کد رو عیناً اینجا کپی میکنم)
time:=DateTimeToUnix(now);
DataModule1.ADOQueryMultiPurpose.Close;
DataModule1.ADOQueryMultiPurpose.SQL.Clear;
DataModule1.ADOQueryMultiPurpose.SQL.Text:='INSERT INTO Calls values ('+edit17.Text+','''+SolarDatePicker4.Text+' '+TimeToStr(DateTimePicker2.Time)+''','''+Memo5.Te xt+''','''+ComboBox5.Text+''','''+ComboBox6.Text+' '','+IntToStr(time)+')';
DataModule1.ADOQueryMultiPurpose.ExecSQL;
بعد از اینکه این مشکل شروع شد، برای اطمینان از اینکه ثبت انجام میشه یا نه، بعد از هر ثبت کنترل میکنم که آیا رکوردی وارد بانک شده یا خیر:
DataModule1.ADOQuerySuccessTest.Close;
DataModule1.ADOQuerySuccessTest.SQL.Clear;
DataModule1.ADOQuerySuccessTest.SQL.Text:='select * from calls where id='+Edit17.Text+' and unix_date='+IntToStr(time);
DataModule1.ADOQuerySuccessTest.Open;
if (DataModule1.ADOQuerySuccessTest.RecordCount=1) then
begin
پیام موفقیت تماس
UpdateLog('insert call',StrToInt(Edit17.Text),MidStr(memo5.Text,0,50 ));
SolarDatePicker4.ShowDefaultDate:=false;
SolarDatePicker4.Clear;
SolarDatePicker4.ShowDefaultDate:=true;
DateTimePicker2.Time:=Now;
Memo5.Clear;
ComboBox5.SetFocus;
end
else
begin
نمایش خطا
end;
من یه جدول کوچیک درست کردم که به عنوان log ثبت تماس عمل میکنه. جالبترین قسمت ماجرا اینجاست که هنگام ثبت پیام موفقت تماس مشاهده میشه (یعنی رکورد در بانک هست!)، در log هم ثبت میشه. اما بعد از مدتی از جدول تماسها مفقود/گم/پاک میشه.
به نظر شما دلیلش چیه؟ راهکارش چیه؟
پیشاپیش ممنون.