View Full Version : سوال: خطا در هنگام استفاده از توابع شمسی در عبارات SQL
ali190
جمعه 10 تیر 1390, 18:15 عصر
باسلام و عرض خسته نباشید
من میخوام از توابع شمسی در عبارات SQL ام استفاده کنم ولی متاسفانه با ارور مواجه میشم
71788
مثلاً در عبارت SQL ام میخوام با استفاده از تابع J_normdate کلیه تاریخهای موجود در فیلد tarikh رو به فرمت عدد نمایش بدم
خیلی جالبه این تابع بصورت
MsgBox J_normdate(Adodc1.Recordset.Fields("tarikh")) کار میکنه ولی وقتی میخوام از اون در یک عبارت sql استفاده کنم خطا میده
سورس رو جهت بررسی خدمتتون قرار میدم
ممنون میشم کمکم کنید
یاعلی
ali190
شنبه 11 تیر 1390, 23:36 عصر
باسلام و عرض خسته نباشید
دوستان واقعاً فکرش رو هم نمیکردم در این قسمت از پروژه ام به مشکل بخورم ، اون هم در استفاده از توابع تاریخ شمسی که بارها ازشون استفاده کردم
ولی این دفعه خواستم از این توابع در ک عبارت sql استفاده کنم که همه چیز خراب شد و مواجه شدم با ارورهای عجیب غریب
فکر نمیکردم داشتن نتیجه زیر در یک grid اینقدر سخت باشه
71814
یا مثلاً شما فرض کنید من یک سری تاریخ در جدولم دارم ، حالا میخوام بدونم تاریخهایی که نسبت به تاریخ امروز 3 روز مونده برسند کدومها هستند
خب این مستلزم اینه که من با استفاده از توابع شمسی در sql select ام ابتدا یک DIff بگیرم از هر کدوم از اون تاریخها نسبت به تاریخ امروز و نتیجه اون diff رو در یک expr(یا فیلد مجازی) برزیم و در شرط (where) expr>3 رو فراخوانی کنم
ولی نمیشه که نمیشه
دوستان شدیداً به کمکتون نیازمندم
ali190
سه شنبه 14 تیر 1390, 20:27 عصر
سلام دوستان
راهی در این زمینه به ذهنتون نرسید
یعنی واقعاً نمیشه این مشکل رو یه جورایی رفعش کرد؟
آیا واقعاً اجرای یک عبارت sql که حاوی یک Function خارجی باشه در داخل Vb6 محکوم به شکسته؟
M.T.P
سه شنبه 14 تیر 1390, 20:54 عصر
سلام علی جان
توابع vb6 رو نمیشه تو یک عبارت رشته ای به بعنوان یک دستور sql گذاشت.
باید رکوردست رو باز کنی بعد فیلد مورد نظر رو با یک حلقه تک تک به تابع J_normdate بفرستی که البته فکر نمی کنم همچین چیزی مد نظرت باشه.
M.T.P
سه شنبه 14 تیر 1390, 21:10 عصر
اما نگران نباش ، چاره کار سادست...
باید به این شکل پیش بری:
تاریخ امروز:
Format$(now,"YYYY/MM/DD")
و تاریخ سه روز پیش:
Format$(Now - 3, "YYYY/MM/DD")
اینا هردو رو به عنوان متغیر به شمسی تبدیل می کنی بعد با دستور Between رکوردست رو باز میکنی.
vbhamed
چهارشنبه 15 تیر 1390, 01:10 صبح
سلام
همونطور كه MTP عزيز گفتن توابعي كه داخل وي بي نوشتين رو نمي تونيد تو دستورات SQL استفاده كنيد، توابعي هم كه مثل Left, Mid, Sin و ... رو هم كه ميشه استفاده كرده قبلا براي SQL به صورت داخلي تعريف شده اند.
اما شما براي انجام اين كار مي تونيد تاريخ رو به صورت شمسي و در صورت نياز به صورت ميلادي هم داخل بانكتون ثبت كنيد
اگر ركوردهاي 3 روز مونده رو مي خواين، ابتدا تاريخ 3 روز ديگه رو حساب كنيد بعد با يك دستور SQL دنبال ركوردهايي بگردين كه تاريخشون كوچكتر يا مساوي تاريخ محاسبه شده شما باشه
"Select * From table Where Tarikh <= " & NewTarikh
كه NewTarikh همون تاريخ 3 روز بعد هست
البته براي اينكار بايد فيلد تاريختون در جدول از نوع عددي باشه وگرنه بايد براي 3 روز سه تا عبارت جستجو در يك دستور SQL بنويسيد چيزي مشابه اين
"Select * From table Where Tarikh = '90/01/01' OR Tarikh = '90/02/01' OR Tarikh = '90/03/01'"
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.