ورود

View Full Version : تعریف تابع جهت استفاده دستورات SQL



Mahdi_S_T
سه شنبه 13 شهریور 1386, 07:43 صبح
من میخوام یه تابع بنویسم و در دستور Select در ADOQuery از آن استفاده کنم .لطفا راهنمایی نمایید این تابع رو کجا بنویسم لازم به توضیح است که من با ACCess کار میکنم

hr110
سه شنبه 13 شهریور 1386, 11:21 صبح
1- ConnectionString دیتا ست(ADOQuery) را مقدار دهی کنید.
2- به روش زیر دستور خود را اجرا کنید:


ADOQeury.Close;
ADOQeury.SQL.Text:='select * from TABLENAME';
ADOQeury.Open;
........
ADOQeury.Close;

Mahdi_S_T
سه شنبه 13 شهریور 1386, 12:14 عصر
استاد ربیعی فکر کنم منظور منو درست متوجه نشدید . استاد من یه تابع میخوام تعریف کنم (کجا) که بعد بتونم در مثال شما وقتی دارم Select میکنم از اون تابع هم در دستور Select استفاده کنم. راستش من میخوام در بحث حسابداری که داریم :
بدهکار | بستانکار | باقیمانده
برای باقیمانده تابعی بنویسم که باقیمانده رو از روی بدهکار و بستانکار و با توجه به باقیمانده قبلی بدست بیارم . در صورت امکان اگه روش ساده تری رو ارایه بدهید ممنون میشم

hr110
سه شنبه 13 شهریور 1386, 14:02 عصر
sorry
من چیز خاصی به ذهنم نمیرسه، مخصوصاً که شما از اکسس استفاده میکنید. شاید یک فیلد محاسباتی (که با استفاده از یک تابع به دیتا ست شما اضافه میشود) بتواند در بخشهای مختلف نرم افزارتان به شما کمک کند !

Mahdi_S_T
سه شنبه 13 شهریور 1386, 17:41 عصر
چطوری میشه یه تابع را به دیتا ست اضافه کرد ؟

Will_Smith
سه شنبه 13 شهریور 1386, 18:28 عصر
با فیلد محاسباتی به هیچ وجیه نمیتونید این کار رو بکنید
ولی فکر میکنم بتونی با فیلدی از نوع InternalClac البته در ClientDataSet این کار رو بکنی
به قول آقای ذوالقدری میشه گفت که تنها راه حلش پیمایش هست(البته در اکسس)
ولی در SQL راه حلی داره که استفاده از UDF هست

hr110
سه شنبه 13 شهریور 1386, 19:31 عصر
با فیلد محاسباتی به هیچ وجیه نمیتونید این کار رو بکنید

دوست عزیز لطفاً اینطور با قطعیت در مورد مسائلی که حتی یکبار هم در موردش فکر نکردید، صحبت نکنید

Mahdi_S_T
سه شنبه 13 شهریور 1386, 19:58 عصر
راه حلش پیمایش هست(البته در اکسس)

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

Will_Smith
سه شنبه 13 شهریور 1386, 20:57 عصر
میشه در این مورد راهنمایی کنید
ببینید دوست من
من این مشکل رو قبلا داشتم ولی تونستم با SQL server یه کاریش بکنم البته با کمک آقای ثباتی
,ولی در مورد اکسس چون یکی از پروژه هام با اکسس بود اول سعی کردم که با فیلد های محاسباتی انجامش بدم ولی به هیچ عنوان امککان پذیر نبود به این خاطر که فیلد های محاسباتی
توی رویداد OnCalc مقادیرشون مقدار گذاری میشه و این مقدار گذاری برای رکورد هایی انجام میشه که در بافر باشن(یعنی برای رکوردهایی که در یک زمان میتونید ببینید)
برای توضیح بیشتر فرض کنید شما یه DBGrid دارید که Height اون 260 باشه با این DBGrid در یک لحظه تنها تعداد مثلا 17 یا 20 تا رکورد رو میتونید همزمان روی فرمتون مشاهده کنید نکته اینه که رویداد OnCalc فقط برای همین 20 تا رکورد در زمان Fetch اطلاعات از دیتابیس فراخوانی میشه و وقتی که شما بخاید بقیه رکورد ها رو ببینید مثلا SCroll Down کنید در زمان SCroll دوباره رویداد OnCalc فراخوانی میشه و فقط برای رکوردهایی که قرار هست وارد بافر بشن
این باعث میشه که شما نتونید موقع Open کردن ADOQUery تموم مقدار مانده ها رو مقدار گذاری کنید
من این سوال رو برای اکسس توی Expert Exchange کردم و یکی از جواب های خوب این بود که شما میتونید ستون باقی مانده رو بصورت فیزیکی توی دیتابیستون داشته باشید
ولی اگه بخاید در زمان اجرا Run Time این محاسبات رو انجام بدید راهش پیمایش هست البته نه با فیلد محاسباتی
پیمایش به این صورت هست که شما از اولین رکورد شروع میکنید و یکی یکی مقدادیر رو محاسبه میکنید و Next میکنید
شاید به نظر روشی نا کار آمدی باشه ولی اگه دقت کنید میشه با سرعت خوبی این کار رو انجام داد ولی به هر حال من اصلا این روش رو نمیپسندم و پیشنهاد میکنم با SQL server این کار رو بکنید