ورود

View Full Version : سوال: مشکل در تفریق فیلدها



mohsen_9642
دوشنبه 26 اسفند 1387, 16:27 عصر
سلام
هرکی میتونه راهنمایی کنه
من تو پارودوکس یه بانک ساختم که چند تا فیلد داره
فیلد اول = صورتحساب که نوع اون$ است
فیلد دوم = مبلغ پرداختی که نوع اون $ است
فیلد سوم = مبلغ بدهکاری که نوع اونم $ است
حالا میخوام فیلد سوم از رابطه (صورتحساب - مبلغ پرداختی) بدست بیاد

عید همگی مبارک

vcldeveloper
سه شنبه 27 اسفند 1387, 00:32 صبح
فیلد سوم را بصورت Calculated Field (فیلد محاسباتی) در دلفی تعریف کنید. در این مورد قبلا چند بار توضیح داده شده، همان دو عبارت فارسی و انگلیسی را در تالار دلفی جستجو کنید.

mohsen_9642
سه شنبه 27 اسفند 1387, 15:49 عصر
خسته نباشید
باور کنید هرچی جستجو کردم چیزی که بتونه مشکلم را حل کنه ندیدم
اگه میشه خودتون یه توضیح مختصری بفرمایید تا از این بلا تکلیفی در بیام.
اصلا طریقه ساختن فیل محاسباتی چطوریه:ناراحت:

vcldeveloper
سه شنبه 27 اسفند 1387, 22:01 عصر
http://www.google.com/custom?hl=en&client=google-coop&cof=AH%3Aleft%3BCX%3A%25D8%25A8%25D8%25B1%25D9%258 6%25D8%25A7%25D9%2585%25D9%2587%2520%25D9%2586%25D 9%2588%25DB%258C%25D8%25B3%3BL%3Ahttp%3A%2F%2Fwww. google.com%2Fcoop%2Fintl%2Fen-US%2Fimages%2Fcustom_search_sm.gif%3BLH%3A65%3BLP% 3A1%3BVLC%3A%23551a8b%3BGFNT%3A%23666666%3BDIV%3A% 23cccccc%3B&adkw=AELymgXG8igZTNw5Mmien8udsGvQJ1IzLBlS7PqzzEEby wZjM9bAjY2-YJmxN7eUdc0KWjAt1IG9Ug_dx8ZF-TBZ4jZTwux515ZcilKudSZdJDCLJNSxFrfCw6RluhXxp8oQCF3 JM9gK&q=calculated+field&btnG=Search&cx=010277259273172057471%3Agbud9yj2nhi

mohsen_9642
شنبه 01 فروردین 1388, 16:21 عصر
نتونستم چیز بدرد خوری پیدا کنم
بزار یه توضیح مختصر از کارها یی که انجام دادم بگم
من اول اومدم توی
database
یه بانک از نوع پارادوکس ساختم و بعد اومدم توی دلفی بوسیله
form wizard
یه فرم ساختم که توی اون یه عنصر
dbnavitor
وچند عنصر
dbedit
بود ویه
dbgrid
هم خودم اضافه کردم وبعد که برنامه رو اجرا میکنم
بوسیله همون
dbnavitor
به بانکم رکورد اضافه میکنم
حالا باید چکار کنم
خیلی خیلی خیلی مهمه

daffy_duck376
شنبه 01 فروردین 1388, 19:43 عصر
سلام دوست عزیز شما چون از DBEDIT استفاده میکنی نمی تونی هیچ کنترلی روی داده های در حال ذخیره داشته باشی . شما باید به جای DBEDIT از EDIT استفده کنی و یک کلید برای اضافه کردن رکورد بگذار و کد های زیر رو توش بنویس
with table name do
begin
insert;
fieldvalue['صورتحساب'] := (strtoint (edit1.text;
fieldvalue['مبلغ پرداختی'] := (strtoint (edit2.text;
fieldvalue['مبلغ بدهکاری'] := (strtoint (edit2.text)- strtoint (edit1.text;
post;
end;

mohsen_9642
یک شنبه 02 فروردین 1388, 16:30 عصر
[B]این کار رو هم انجام دادم ولی برنامه موقع اجرا eroorداد
یعنی همون چند خطی که نوشتم eroor داد
دوستان اگه میشه یه راه حل اساسی برام پیدا کنید
باور کنید خیلی مهمه

Modernidea
یک شنبه 02 فروردین 1388, 23:54 عصر
[b]این کار رو هم انجام دادم ولی برنامه موقع اجرا eroorداد
یعنی همون چند خطی که نوشتم eroor داد
دوستان اگه میشه یه راه حل اساسی برام پیدا کنید
باور کنید خیلی مهمه
خوب error رو بگو ببينميم چي هست؟

ahmadr
دوشنبه 03 فروردین 1388, 00:13 صبح
کدت رو داخل
try
کدها//
except

end;

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

vcldeveloper
چهارشنبه 05 فروردین 1388, 11:12 صبح
شما چون از DBEDIT استفاده میکنی نمی تونی هیچ کنترلی روی داده های در حال ذخیره داشته باشی .
کی همچین چیزی گفته؟!!


کدت رو داخل
try
کدها//
except

end;

بگذار.(مدیریت استثناها)
به این چیزی که شما نوشتید نمیگن مدیریت خطا، بلکه میگن خفه کردن خطا! چون شما دارید فقط کاری می کنید که کاربر خطا را نبینه، نه اینکه مدیریتی روی خطای پیش آمده انجام داده باشید، یا سعی در برطرف کردن آن کرده باشید.

mohsen_9642
چهارشنبه 05 فروردین 1388, 13:54 عصر
تو رو خدا یکی کمکم کنه
کلافه شدم. چیکار کنم

shervin farzin
چهارشنبه 05 فروردین 1388, 19:14 عصر
سلام
نحوه ساختن يك CalcField ساده رو در لينك زير نوشتم :
http://barnamenevis.org/forum/showthread.php?t=143578
در مورد مسئله شما بايد در بدنه رويداد OnClacFields كدي بنويسيد كه عمل تفريق رو انجام
بده و نتيجه رو در فيلد جديد ( CalcField ) قرار بده . كدي كه من در لينك بالا براي بدنه
OnCalcField نوشتم به درد شما نميخوره ولي ايده كلي كار رو ميشه از روش پيدا كني .
موفق باشيد .

ahmadr
پنج شنبه 06 فروردین 1388, 01:01 صبح
به این چیزی که شما نوشتید نمیگن مدیریت خطا، بلکه میگن خفه کردن خطا! چون شما دارید فقط کاری می کنید که کاربر خطا را نبینه، نه اینکه مدیریتی روی خطای پیش آمده انجام داده باشید، یا سعی در برطرف کردن آن کرده باشید.
در بعضی مواقع در دلفی خطاهایی پیش می آید که دلیل آن اصلا مشخص نیست. مثلا وقتی می خواهیم در رویداد CalcFields یک ADODataSet (یا هرچیز دیگر) فیلد تاریخ میلادی را به فارسی تبدیل کنیم و در dbgrid نمایش دهیم در هنگام تبدیل و نمایش ، خطا میدهد و اجازه ادامه کار را نمی دهد. اما اگر همین کد را داخل بلاک مدیریت خطا قرار دهیم برنامه به درستی اجرا می شود.

daffy_duck376
پنج شنبه 06 فروردین 1388, 10:20 صبح
[B]این کار رو هم انجام دادم ولی برنامه موقع اجرا eroorداد
یعنی همون چند خطی که نوشتم eroor داد
دوستان اگه میشه یه راه حل اساسی برام پیدا کنید
باور کنید خیلی مهمه
این که یه کد ساده هست چه اروری میتونه داده باشه ؟ لطفا عکس خطا رو بگذار تا ببینیم مشکل چی هست

mohsen_9642
پنج شنبه 06 فروردین 1388, 10:51 صبح
هر کاری کردم بتونم عکسشو بفرستم نتونستم
اگه ممکنه ایمیل بدید بفرستم به ایمیل
ممنونم

vcldeveloper
پنج شنبه 06 فروردین 1388, 12:36 عصر
در بعضی مواقع در دلفی خطاهایی پیش می آید که دلیل آن اصلا مشخص نیست. مثلا وقتی می خواهیم در رویداد CalcFields یک ADODataSet (یا هرچیز دیگر) فیلد تاریخ میلادی را به فارسی تبدیل کنیم و در dbgrid نمایش دهیم در هنگام تبدیل و نمایش ، خطا میدهد و اجازه ادامه کار را نمی دهد. اما اگر همین کد را داخل بلاک مدیریت خطا قرار دهیم برنامه به درستی اجرا می شود.
مگه شما Exception را در بلوک مدیریت خطا مدیریت کردید؟ شما فقط یک except خالی نوشتید، یعنی به کامپایلر گفتید، مهم نیست چه خطایی توی این بلوک رخ میده، هر خطایی که بوجود اومد، خفه اش کن، و به کاربر چیزی نشون نده! در واقع اون خطا داره همچنان اتفاق میافته، فقط کاربر دیگه پیغام خطا رو نمی بینه!
در ضمن، خطا همینطوری الکی پیش نمیاد. اگر خطایی تولید میشه، یعنی بخشی از کدی که استفاده می کنید مشکل داره. اینکه شما نتوستید علت یک خطا را کشف کنید به معنی آن نیست که خطا بی علت تولید شده!

daffy_duck376
پنج شنبه 06 فروردین 1388, 12:51 عصر
سلام من ایمیل رو دیدم . منظور من از TABLE NAME در کد ها نام جدول شما مثلا table1 یا مثلا finance یا هرچی . نام همون که از پالت BDE برداشتی گذاشتی روی برنامه و اونو به جدول پارادوکس وصل کردی است.
مورد دوم اینکه شما نباید کدها عینا کپی میکردی منظورم از
fieldvalue['صورتحساب'] := (strtoint (edit1.text;
این بود که به جای صورت حساب نام فیلد صورت حساب رو بنویسی.
بقیه فیلد ها همین طور.
یه اشکال دیگه اینکه چون کدهارو من تو سایت کپی کردم جای پارانتز ها جابه جا شده . به این سورس یه نگاهی بنداز . این یه قسمت از یه برنامه هست :

mohsen_9642
جمعه 07 فروردین 1388, 15:42 عصر
سلام
همه موارد خطا برطرف شد جز اونجاییکه شما گفتید که به جای صورت حساب نام فیلد رو بنویسم
اخه من اسم فید رو گذاشتم صورت حساب
که باز همون جا errorمیده
عکس خطا رو میفرستم برای ایمل
بازم ممنون

daffy_duck376
جمعه 07 فروردین 1388, 15:44 عصر
اسم فیلد فارسی هست ؟ اگه فارسی هست که دلفی نام فیلد فارسی رو ساپورت نمی کنه

mohsen_9642
جمعه 07 فروردین 1388, 15:50 عصر
یعنی اسم فیلد ها را عوض کنم
نمیشه کاریش کرد
البته بگم با sqlاشنایی ندارم

daffy_duck376
جمعه 07 فروردین 1388, 18:08 عصر
نه عزیز اسم فیلد و جدول غیر استاندارد است . البته تا دلفی 7 ساپورت نمی شه بقیه رو نمی دونم . اما وقتی میخوای کوئری بگیری که دیگه اصلا راه نداره ! ضمنا ID منو تو یاهو Add کن راجع برنامه شما صحبت کنیم . همین id یاهوی منه

mohsen_9642
یک شنبه 16 فروردین 1388, 16:54 عصر
خسته نباشید
اون مشکلم با کمی دقت برطرف شد
ولی حالا یه مشکل جدید دارم
اگه بخوام یه مبلغی رو جستجو کنم باید چکار کنم
البته باید بگم که اگه بخوام از فیلد صورت حساب ومبلغ پرداختی جستجو کنم مشکل ندارم
ولی وقتی میخوام ازهمون دستورات برای اون فیلد محاسباتی استفاده کنم جستجو نمیکنه
دستوراتی که استفاده میکنم اینه:procedure TForm3.N3Click(Sender: TObject);
var string1:string[70];
begin
table1.IndexFieldNames:='pardakht';
string1:=inputbox('ÌÓÊÌæí ãÈáÛ ÑÏÇÎÊí','æÇÑÏ äãÇííÏ ãÈáÛ ÑÇ','');
table1.SetKey;
table1.FieldByName('pardakht').AsString:=string1;
table1.GotoNearest;

end;

daffy_duck376
یک شنبه 16 فروردین 1388, 17:46 عصر
.hesab_kol.Locate('hesab_code',مقدار در حال جستجو),[] )
از دستور locate استفاده کنید