ايران ويج

نسخه‌ی کامل: عدم اجرای بعضی ار توابع در sql
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
باعرض سلام و خسته نباشید خدمت دوستان عزیز

من از یک کامپاننت لیست برای اتصال به اکسس استفاده میکنم جهت اتصال با sql مشکل نداره استفاده از توابع vb هم مثل تابع ()date و غیرو هم مشکلی نیست قفط توابع ایجاد شده خودمان را مثل تاریخ شمسی که در محیط vb راحتی انجام میشه با دستورات sql خطا میده البته هر تابعی که در ماجول تعریف شده باشه خطا میده
آیا امکانش هست توابع ایجاد شده را مثل توابع vb عمل کنه ؟

با تشکر منتطر پاسخ دوستان
سوالت زیاد واضح نیست لطفا بیشتر توضیح بده .
[/align]با تشکر از پاسخگویی شما

من از کامپاننت PowerList استفاده می کنم که در بعضی ازموارد برای اتصال به بانک اطلاعاتی (اکسس)نیاز دارم از دستورات sql برای ارتباط با کامپاننت PowerList استفاده نمایم .
درحالت اتصال با دستور سادهsql مشکلی نیست :
PowerList1.Query = "select ID, Field1, Field2,Field3 FROM Table1"
ولی در صورت تعیین یکی از توابع ایجاد شده بغییر از توابع خود vb با خطا مواجه می شود. مانند :

PowerList1.Query = "select ID, Field1, Field2,Field3 ,Shamsi() AS Field4 FROM Table1"

البته اینجا جهت Field4 یا ستون چهارم برای مثال از تابع ()Shamsi استفاده کردم . یعنی هر تابعی که ما در vb تعریف نماییم با خطا مواجه میشود و لی برعکس با توابع کاربردی خود vb مشکلی ندارد نظیر تابع ()date یا ()time و هر تابع دیگر vb
نمی دونم آیا توابع وی بی مانند ()date یا ()time در لیست توابع کتابخانه ای وی بی هست و این توابعی که ایجاد کردیم در لیست این توابع کتابخانهای قرار ندارد . فکر کردم شاید بهمین دلیل باشد که با توابع تعریف شده vb مشکلی ندارد و با توابع ایجاد شده توسط ما با مشکل مواجه می شود

خواهش من این است درصورت امکان راهنماییم کنید .
با تشکر فراوان
[quote='sahand87' pid='164963' dateline='1329136035']
با تشکر از پاسخگویی شما



دوست خوبم

زمانی که شما می خواهید از SQL ( یا کامپوننت های مربوط به اون ) استفاده کنید باید از دستورات SQL استفاده

کنید. این دستورات خاص خود SQL هستند و هیچ ارتباطی به زبان برنامه نویسی شما ندارند اما در خیلی از موارد

از نظر املایی شبیه به VB هستند مثل Date و ... که باعث اشتباه شما شده.

برای ادامه کار به شما پیشنهاد می کنم اول مقالات آموزشی که داخل فروم قرار دارند رو مطالعه کنید.

آموزش کار با SQL

اما در مورد همین دستوری که می خواهید استفاده کنید بهتره که یا از ابتدا تاریخ رو به صورت شمسی داخل

یک فیلد از نوع Char بریزید یا اینکه پس از خواندن اطلاعات اونها رو با توابع و ماژول هایی که دارید به مقدار

دلخواه تبدیل کنید.
ممنون از لطف شما
چشم حتما به توصیه دوستانه شما عمل می کنم (آموزش کار با SQL):

ولی متاسفانه منظور شما را خوب متوجه نشدم. یعنی شما می فرمائید برای استفاده از اس کیو ال در vb ما نمی تونیم از تابع غیر از اس کیو ال استفاده کنیم
البته من تازه با وبی دارم کار می کنم ولی با اکسس آشنایم بد نیست و بارها با اس کیوال از توابع ساخته شده استفاده کردم از جمله Encrypt /DeEncrypt کردن جداول با دستور UPDATE اس کیو ال حتی با بانکهای خارجی لینک شده و مشکلی هم نداشتم ادیتور vba اکسس هم تقریبا 90 درصدهمان ادیتور vb است و فکر کنم نسخه کاربردی sql هر دو هم یکی باشه.
یعنی این قابلیت vba اکسس در vb6 نیست ! ؟
نقل قول: یعنی شما می فرمائید برای استفاده از اس کیو ال در vb ما نمی تونیم از تابع غیر از اس کیو ال
استفاده کنیم
دقیقا منظورم همینه.

در واقع اکثر برنامه هایی که دارای زبان داخلی هستند یا زمانی که می خوان الگوریتم یک مسئله رو

بنویسین معمولا از دستورات و منطق VB استفاده می شه. چون دستورات اون بسیار ساده و نزدیک به

زبان محاوره ای است و فهم اون بسیار ساده تر از هر زبان دیگه ای هست.

شما اگر زبان داخلی اتوکد، 3DMax , Maya و .... رو هم مطالعه کنید حتما این شباهت ها رو داخل اونها

هم خواهید دید اما این به معنی استفاده اونها از یک زبان مشترک نیست بلکه تنها املای دستوراتشون

تا حدودی شبیه به هم هست.

بنابراین داخل خود SQL هم امکاناتی برای تعریف توابع توسط کاربر در نظر گرفته شده و می تونید با تبدیل

توابعی که در VB نوشتید ، از اونها در SQL هم استفاده کنید.

برای مثال من برای محاسبه زمان اضافه کار و ... در یکی از برنامه ها مجبور شدم رشته رو به ساعت تبدیل

کنم و هیچ راهی هم برای تعریف مجدد فیلدها از نوع Time یا تعریف تابع داخل SQL نداشتم بنابراین داخل

همون دستور SELECT توابعم رو تعریف کردم.

کد php:
SELECT     e.[no] AS enoe.EmptypeNoe.ITINoe.family ' ' e.name AS NAMEe.name ' ' e.family AS fNAME,
O.*, drt.EZFdrt2.TJTimedrt3.KasrTimedrt4.OvrTime, CASE WHEN drt2.TJTime <> '0:0 ' THEN CONVERT(nvarchar
 
, (1320 - (CAST(REPLACE(RIGHT(drt2.TJTime3), ':''') AS int) + CAST(REPLACE(LEFT(drt2.TJTime2), ':''') AS int)
 * 
60)) / 60) + ':' CONVERT(nvarchar, { fn MOD(1320 - (CAST(REPLACE(RIGHT(drt2.TJTime3), ':',   '') AS int)
 + 
CAST(REPLACE(LEFT(drt2.TJTime2), ':''') AS int) * 60), 60) }) ELSE '0:0' END AS TSub22CONVERT(nvarchar
 ((
CAST(REPLACE(RIGHT(drt4.OvrTime3), ':''') AS int) + CAST(REPLACE(LEFT(drt4.OvrTime2), ':''') AS int) * 60)
 - (
CAST(REPLACE(RIGHT(drt.EZF3), ':''') AS int) + CAST(REPLACE(LEFT(drt.EZF2), ':''') AS int) * 60)) / 60) + ':' 
CONVERT(nvarchar, { fn MOD((CAST(REPLACE(RIGHT(drt4.OvrTime3), ':''') AS int) + CAST(REPLACE(LEFT
 
(drt4.OvrTime2), ':''') AS int) * 60) - (CAST(REPLACE(RIGHT(drt.EZF3), ':''') AS int
 + 
CAST(REPLACE(LEFT(drt.EZF2), ':''') AS int) * 60), 60) }) AS TOvrDataNahar.NaharDataNahar2.Nahar2 
به تعریف متغییرها ، تبدیل و ذخیره اطلاعات رشته ای به ساعت و سپس و جمع و

تفریق اونها و ذخیره مجددشون به صورت رشته توجه کن.

مثل این کار رو می تونی برای تابع تاریخ شمسی هم انجام بدی البته به نظرم ساده تره که این کار رو نکنی

و بعد از خوندن اطلاعات داخل خود وی بی اون رو تبدیل و سپس نمایش بدی.



سلام
با تشکر فراوان

دقیقا فرمایش شما درسته من هم همین کار را کردم با فراخوانی از sql داخل vb عملیات تبدیل را انجام دادم که شکر خدا مشکل حل شد .