PDA

View Full Version : خطای زمان اجرا



minoo_f19
چهارشنبه 28 تیر 1391, 10:47 صبح
سلام
برنامه من هنگام اجرا خطای زیر رو میده( با دلفی 7 و SQL2000) نوشتم.ویندوز سون هم استفاده می کنم.

تیبل های دیتابیس رو هم خالی کردم ولی بازهم ERRORمیده

89921

Felony
چهارشنبه 28 تیر 1391, 10:55 صبح
برنامه رو با F8 اجرا کن و خط به خط بررسی کن ببین کجا خطا میده ؛ جایی موقع اجرای برنامه تبدیل تاریخ انجام میدید ؟

minoo_f19
چهارشنبه 28 تیر 1391, 11:26 صبح
ممنون از توجهتون
بله در قسمتی از برنامه تاریخ میلادی به شمسی تبدیل میشه.با F8 اجرا کردم اجرا در پایان کد تبدیل متوقف میشه.درست جایی که تاریخ شمسی حاصل جهت نمایش داخل یک EDITریخته میشه

SayeyeZohor
چهارشنبه 28 تیر 1391, 11:29 صبح
يك جايي در تبديل تاريخ ميلادي به شمسي يا ... شما تاريخ رو جدا مي كنين و به عدد تبديلش مي كنين
كدتون رو بذارين تا بگيم كجاست

minoo_f19
چهارشنبه 28 تیر 1391, 11:50 صبح
کد تبدیل تاریخ


var
Farsi_day,Farsi_date: string;

begin
FRKH.ShowModal;
end;
var
deference,pdom,temp1,temp2,temp3 : longint;
remain_fday,total_fday : longint;
Day_Month_Year : string[20];
D_Week,year,month,day,fyear,fmonth,fday : integer;
procedure TFMAIN.FormCreate(Sender: TObject);
begin
pdom:=0;
Day_Month_Year:=DatetoStr(Date);
month:=strtoint(day_Month_Year[6]+Day_Month_Year[7]);
year:=strtoint(day_Month_Year[1]+Day_Month_Year[2]+day_Month_Year[3]+Day_Month_Year[4]);
day:=strtoint(day_Month_Year[9]+Day_Month_Year[10]);
D_Week:=DayofWeek(Date);
case D_Week of
1 : Farsi_Day:=farsi_days_name[6];
2 : Farsi_Day:=farsi_days_name[5];
3 : Farsi_Day:=farsi_days_name[4];
4 : Farsi_Day:=farsi_days_name[3];
5 : Farsi_Day:=farsi_days_name[2];
6 : farsi_Day:=farsi_days_name[1];
7 : Farsi_Day:=farsi_days_name[0];
end;
case month of
1 : pdom := 0;
2 : pdom := 31;
3 : pdom := 59;
4 : pdom := 90;
5 : pdom := 120;
6 : pdom := 151;
7 : pdom := 181;
8 : pdom := 212;
9 : pdom := 243;
10 : pdom := 273;
11 : pdom := 304;
12 : pdom := 334;
end; // case
if(year mod 4 = 0) and (month = 3) and (day < 21) then
deference := 158
else
deference := 157;
total_fday := (trunc(year-1) * 365 ) + pdom + day - 226900 + deference;
if ((deference = 157) and (trunc(total_fday) mod 365 <> 0)) or
((deference = 158) and (month =3 ) and (day < 191)) then
fyear := trunc(total_fday / 365) + 1
else
fyear := trunc(total_fday / 365);
if remain_fday = 366 then
BEGIN
remain_fday := trunc(total_fday - ((fyear - 1) * 366));
temp1 := 365 ;
END
else
BEGIN
remain_fday := trunc(total_fday - ((fyear - 1) * 365));
temp1 := remain_fday;
END;

if remain_fday > 186 then
temp2 := 6
else
temp2 := 0;
if remain_fday > 186 then
temp3 := 30
else
temp3 := 31;
fmonth := trunc((temp1 - temp2) / temp3 + 1);
if fmonth > 6 then
fday := remain_fday - ((fmonth - 1) * 30) - 6
else
fday := remain_fday - ((fmonth - 1) * 30) - (fmonth - 1);
if fday = 0 then
fmonth := fmonth - 1;
if fmonth < 7 then
temp1 := 31
else
temp1 := 30;
if fday = 0 then
fday := temp1;
if (length(inttostr(fmonth))=1) and (length(inttostr(fday))=1) then
farsi_date:=inttostr(fyear)+'/0'+inttostr(fmonth)+'/0'+inttostr(fday)
else if (length(inttostr(fmonth))=1) and (length(inttostr(fday))=2) then
farsi_date:=inttostr(fyear)+'/0'+inttostr(fmonth)+'/'+inttostr(fday)
else if (length(inttostr(fmonth))=2) and (length(inttostr(fday))=1) then
farsi_date:=inttostr(fyear)+'/'+inttostr(fmonth)+'/0'+inttostr(fday)
else
farsi_date:=inttostr(fyear)+'/'+inttostr(fmonth)+'/'+inttostr(fday);
Edit2.Text:=farsi_date;

minoo_f19
چهارشنبه 28 تیر 1391, 11:57 صبح
نکته دیگه اینکه برنامه در ویندوز XP نوشته شده و اونجا مشکلی در اجرا نداره.فقط روی ویندوز سون این ERROR رو میده!

کامروا
چهارشنبه 28 تیر 1391, 12:17 عصر
بنظرم این خطا مربوط میشه به قسمت Regional And Language Option توی کنترل پنل.

برید اونجا و جای سال و روز رو عوض کنید.

به این شکل در بیاد yyyy/dd/MM

Felony
چهارشنبه 28 تیر 1391, 12:58 عصر
به نظر مشکل از این قسمت باشه :


[month:=strtoint(day_Month_Year[6]+Day_Month_Year[7);
year:=strtoint(day_Month_Year[1]+Day_Month_Year[2]+day_Month_Year[3]+Day_Month_Year[4]);
day:=strtoint(day_Month_Year[9]+Day_Month_Year[10]);

بدون اینکه بررسی کنید تاریخ امروز تک رقمی هست یا دو رقمی برداشتید دو کاراکترش رو جدا کردید و سعی در تبدیلش به عدد دارید در صورتی که اگر تاریخ تک رقمی باشه اون دو کاراکتر یکی عدد هست و دیگیری / که جدا کننده تاریخ هست و مشکل ایجاد میکنه .

به جای اونها کافی بود بنویسید :

DecodeDate(Date, year, month, day);


نظرم این خطا مربوط میشه به قسمت Regional And Language Option توی کنترل پنل.

برید اونجا و جای سال و روز رو عوض کنید.

به این شکل در بیاد yyyy/dd/MM
حتی اگر مشکل از این موردی که شما گفتی باشه ( که نیست ) این وظیفه برنامه نویس هست که این موارد رو کنترل و درست پردازش کنه ، نه اینکه به کاربر بگه برو تنضیمات ویندوزت رو عوض کن .

minoo_f19
یک شنبه 01 مرداد 1391, 08:59 صبح
به نظر مشکل از این قسمت باشه :


[month:=strtoint(day_Month_Year[6]+Day_Month_Year[7);
year:=strtoint(day_Month_Year[1]+Day_Month_Year[2]+day_Month_Year[3]+Day_Month_Year[4]);
day:=strtoint(day_Month_Year[9]+Day_Month_Year[10]);

بدون اینکه بررسی کنید تاریخ امروز تک رقمی هست یا دو رقمی برداشتید دو کاراکترش رو جدا کردید و سعی در تبدیلش به عدد دارید در صورتی که اگر تاریخ تک رقمی باشه اون دو کاراکتر یکی عدد هست و دیگیری / که جدا کننده تاریخ هست و مشکل ایجاد میکنه .

به جای اونها کافی بود بنویسید :

DecodeDate(Date, year, month, day);


حتی اگر مشکل از این موردی که شما گفتی باشه ( که نیست ) این وظیفه برنامه نویس هست که این موارد رو کنترل و درست پردازش کنه ، نه اینکه به کاربر بگه برو تنضیمات ویندوزت رو عوض کن .

یه مشکل پیش اومده...
با این کد که شما گفتید برنامم اجرا شد ولی تاریخ اشتباه تبدیل میشه!(تاریخ ورودی تاریخ سیستم است)

Felony
یک شنبه 01 مرداد 1391, 09:43 صبح
مگه تو کد خودتون تاریخ ورودی چی بود ؟!

این ورودی کد شما :


Day_Month_Year:=DatetoStr(Date);

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