مایکروسافت تاریخ ارائه نسخه جدید ویژوال استودیو ۲۰۰۸ را ۲۷ فوریه ۲۰۰۸ مطابق با هشتم اسفند ۱۳۸۶ اعلام کرد. با این وجود ویژوال استودیو ۲۰۰۸ در بهار ۸۷ در ایران خواهد بود.
طبق اعلام مدیران این شرکت ، ویندوز سرور ۲۰۰۸ و SQL Server 2008 نیز در همان روز ارائه می شوند.
ویژوال استودیوی ۲۰۰۸ همراه با نسخه ۳.۵ فریم ورک ارائه می شود.
در واقع مهمترین مشکل ویژوال بیسیک 6 در کار با پایگاه داده Access این است که اگر شما از کنترل Data برای برقراری ارتباط استفاده کنید و فرمت پایگاه داده شما بالاتر از Access 97 باشد یعنی ( 2000 ، XP ، 2003 ) با خطایی مبنی بر عدم پشتیبانی یا شناسایی مواجه خواهید شد . یا به عبارتی شما در صورتی میتوانید از کنترل Data برای برقراری ارتباط با پایگاه داده Access استفاده نمایید که فرمت پایگاه داده شما Access 97 یا همان ( Office 97 ) باشد . برای حل این مشکل چند راه حل وجود دارد :
» راه حل 1 : از کنترل ADO یا Adodc به جای Data استفاده کنید که این کار در بیشتر مواقع نمی تواند به صرفه باشد .
» راه حل 2 : فرمت پایگاه داده شما Access 97 باشد یعنی باید از برنامه Access موجود در Office 97 استفاده کنید که در این صورت مجبور خواهید بود با ویندوز 98 کار کنید . چون XP قادر به پشتیبانیAccess 97 نخواهد بود .
» راه حل 3 : این راه حل بهترین راه حل است ، یعنی استفاده از تکه برنامه ای به نام Service Pack 6 که پس از نصب ویژوال بیسیک6 بر روی کامپیوتر نصب میشود و مشکل را رفع می کند . یعنی شما میتوانید پس از نصب این تکه برنامه از هر کدام از فرمت های پایگاه داده Access در کنترل Data استفاده کنید . ظرفیت فشرده شده این برنامه حدود 26 مگابایت است که شما می توانید از سایت Microsoft دانلود کنید . البته با نرم افزار Download Accelerator Plus می توانید به صورت بخش به بخش این برنامه را دانلود نمایید که به نظر من بهترین روش است .
» راه حل 4 : می توانید از Database Manager موجود در خود VB6 برای ساخت بانک Access 97 استفاده کنید و از آن استفاده نمایید.
تبدیل تاریخ میلادی به شمسی بسیار راحتتر از تبدیل تاریخ شمسی به میلادی است.
برای نوشتن این الگوریتم به اختلاف روزهای میان اولین روز سال میلادی و اولین روز سال شمسی نیاز داریم که این اختلاف روز (در صورتی که سال کبیسه باشد یا نباشد) "79" روز است.
برای تشخیص کبیسه بودن یا نبودن سال از روش زیر استفاده می کنیم :
اگر سال داده شده بر 100 و 400 بخشپذیر باشد یا بر 100 بخشپذیر نباشد بر 4 بخشپذیر باشد آنگاه سال کبیسه است ، در غیر این صورت سال کبیسه نیست. با توجه به کبیسه بودن یا کبیسه نبودن سال مشخص می کنیم که در کدامین روز سال میلادی قرار داریم.
دو حالت پیش می آید :
● روزی که در آن قرار داریم از 79 بیشتر است به این معنی است که در ماههای بعد از فروردین قرار داریم.
حال باید مشخص کنیم که در 6 ماه اول سال شمسی قرار داریم یا در 6 ماه دوم سال قرار داریم ، برای اینکار ابتدا 79 روز از تعداد روزها کم می کنیم تا در اول فروردین قرار بگیریم حال اگر تعداد روزها از "186" (31*6) کمتر باشد یعنی در 6 ماه اول سال شمسی قرار داریم در غیر اینصورت در 6 ماه دوم قرار داریم.
1. اگر در 6 ماه اول سال قرار گرفته باشیم : تعداد روزها را بر "31" تقسیم می کنیم (6 ماه اول در سال شمسی 31 روزه است.) اگر باقیمانده این تقسیم صفر شد خارج قسمت تقسیم برابر با ماه شمسی می شود و روز شمسی برابر با 31 می شود. اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه یک می شود و روز شمسی همان باقیمانده است.
2. اگر در 6 ماه دوم سالقرار گرفته باشیم : "186" روز از تعداد روزها کم می کنیم و آن را بر "30" تقسیم می کنیم .
اگرباقیمانده این تقسیم صفر شد خارج قسمت تقسیم باضافه"6" برابر با ماه شمسی می شود و روز شمسی برابر با 30 می شود. اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه "7" می شود و روز شمسی همان باقیمانده است. سال شمسی از تفاضل سال میلادی با "621" بدست می آید.
● روزی که در آن قرار داریم کمتر از "79" است که این به این معنی است که در روزهایی بین اولین روزسال میلادی تا اولین روز شمسی (ماههای دی ،بهمن و اسفند) قرار داریم.
اختلاف روز بین اولین روز سال میلادی داده شده و اولین روز دی ماه در سال شمسی را در نظر می گیریم که این اختلاف برای سال کبیسه "11" و برای غیر کبیسه "10" است.
دقت کنید که در این الگوریتم برای مشخص کردن این اختلاف باید سال قبل از سال داده شده را در نظر بگیریم زیرا سال قبل بر روی اولین روز سال میلادی تاثیر می گزارد.
اختلاف روز با تعداد روز محاسبه شده جمع می کنیم ، آن را بر "30" تقسیم می کنیم (3 ماه آخر سال شمسی 30 روزه است.) اگر باقیمانده این تقسیم صفر شود خارج قسمت تقسیم باضافه "9" برابر با ماه شمسی می شود و روز شمسی برابر با "30" می شود. اگر باقیمانده صفر نشود ماه شمسی برابر با خارج قسمت باضافه "10" می شود و روز شمسی همان باقیمانده است. در این حالت سال شمسی از تفاضل سال میلادی با "622" بدست می آید (زیرا در سال قبل قرار داریم.)
پیاده سازی الگوریتم به زبان c :
typedef struct _SHAMSIDATE
{
int iYear;
int iMonth;
int iDay;
}SHAMSIDATE;
SHAMSIDATE MiladiToShamsi(int iMiladiMonth,int iMiladiDay,int iMiladiYear)
{
int shamsiDay, shamsiMonth, shamsiYear;
int dayCount,farvardinDayDiff,deyDayDiff ;
int sumDayMiladiMonth[] = {0,31,59,90,120,151,181,212,243,273,304,334};
int sumDayMiladiMonthLeap[]= {0,31,60,91,121,152,182,213,244,274,305,335};
SHAMSIDATE shamsidate;
farvardinDayDiff=79;
if (MiladiIsLeap(iMiladiYear))
{
dayCount = sumDayMiladiMonthLeap[iMiladiMonth-1] + iMiladiDay;
}
else
{
dayCount = sumDayMiladiMonth[iMiladiMonth-1] + iMiladiDay;
}
if((MiladiIsLeap(iMiladiYear - 1)))
{
deyDayDiff = 11;
}
else
{
deyDayDiff = 10;
}
if (dayCount > farvardinDayDiff)
{
dayCount = dayCount - farvardinDayDiff;
if (dayCount <= 186)
{
switch (dayCount%31)
{
case 0:
shamsiMonth = dayCount / 31;
shamsiDay = 31;
break;
default:
shamsiMonth = (dayCount / 31) + 1;
shamsiDay = (dayCount%31);
break;
}
shamsiYear = iMiladiYear - 621;
}
else
{
dayCount = dayCount - 186;
switch (dayCount%30)
{
case 0:
shamsiMonth = (dayCount / 30) + 6;
shamsiDay = 30;
break;
default:
shamsiMonth = (dayCount / 30) + 7;
shamsiDay = (dayCount%30);
break;
}
shamsiYear = iMiladiYear - 621;
}
}
else
{
dayCount = dayCount + deyDayDiff;
switch (dayCount%30)
{
case 0 :
shamsiMonth = (dayCount / 30) + 9;
shamsiDay = 30;
break;
default:
shamsiMonth = (dayCount / 30) + 10;
shamsiDay = (dayCount%30);
break;
}
shamsiYear = iMiladiYear - 622;
}
shamsidate.iYear = shamsiYear;
shamsidate.iMonth = shamsiMonth;
shamsidate.iDay = shamsiDay;
return shamsidate ;
}
// the function check a miladiyear is leap or not.
BOOL MiladiIsLeap(int miladiYear)
{
if(((miladiYear % 100)!= 0 && (miladiYear % 4) == 0) || ((miladiYear % 100)== 0 && (miladiYear % 400) == 0))
return TRUE;
else
return FALSE;
}
Space(number):تعداد مشخصی کاراکتر فاصله بر می گرداند.
Len(string):طول رشته ورودی را بر می گرداند. مثال:
Len("abcdefg") = 7
Trim(string):این تابع spaceهایی که در ابتدا یا انتهای رشته باشد را حذف می کند. توابع LTrim و RTrim فقط از چپ و راست عمل می کنند. مثال:
Trim(" abc ") = "abc"
:([InStr([start, ]string1, string2[, compareاین تابع محل اولین وقوع یک رشته را درون رشته دیگر نشان میدهد. پارامترهای این تابع عبارتند از:
start : پارامتر اختیاری است و محل شروع جستجو را نشان می دهد. اگر این پارامتر وارد نشود جستجو از ابتدای رشته آغاز می شود.
string1 : رشتهای که جستجو در آن انجام می شود.
string2 : رشته مورد جستجو.
compare : این پارامتر اختیاری است و نوع جستجو را نشان میدهد . اگر این پارامتر 0 داده شود جستجوی متنی انجام میشود و اگر 1 داده شود جستجوی باینری انجام میشود. مثال:
Instr(3, "abcdabg", "ab") = 5
اگر طول رشته string1 برابر صفر باشد مقدار بازگشتی صفر است. اگر string1 یا string2 برابر Null باشد مقدار بازگشتی نیز Null است. اگر طول رشته string2 برابر صفر باشد مقدار بازگشتی start خواهد بود. اگر رشته string2 درون string1 پیدا نشود مقدار بازگشتی صفر است. اگر start بزرگتر از طول رشته string1 باشد مقدار بازگشتی صفر است.
InstrRev(stringcheck, stringmatch, [start], [compare]):برعکس تابع InStr می باشد یعنی عمل جستجو را از انتهای رشته انجام میدهد.
Replace(expression, find, replace, [start], [count], [compare]):رشتهای را برمیگرداند که در آن یک رشته خاص با رشته دیگری به تعداد دفعات مشخصی جایگزین شده است. پارامترهای این تابع عبارتند از:
: expressionرشته اصلی.
: findرشته مورد جستجو.
: replaceرشته جایگزین.
: startمحل شروع جایگزینی. در صورتیکه این متغیر وارد نشود جایگزینی از ابتدا رشته انجام میشود.
: countتعداد دفعات جایگزینی. در صورتیکه این متغیر وارد نشود جایگزینی در تمام رشته انجام خواهد شد.
: compareنوع جستجو را نشان میدهد. اگر این پارامتر 0 داده شود جستجوی متنی انجام می شود و اگر 1 داده شود جستجوی باینری انجام میشود.
Replace("abcadea", "a", "x") = "xbcxdex"
اگر طول رشته expression برابر صفر باشد مقدار بازگشتی رشتهای با طول صفر است. اگر طول رشته find صفر باشد مقدار بازگشتی خود expression است . اگر طول رشته replace صفر باشد مقدار بازگشتی expressionای است که در آن تمام findها حذف شده است. اگر start بزرگتر از طول رشته expression باشد مقدار بازگشتی رشتهای با طول صفر است. اگر count برابر صفر باشد مقدار بازگشتی خود expression است.
StrReverse(expression):رشتهای را برمیگرداند که کاراکترهای آن به ترتیب عکس کاراکترهای رشته ورودی است. مثال:
StrReverse("abcd") = "dcba"
Split(expression, [delimiter], [limit], [compare]):آرایهای از تعداد مشخصی رشته برمیگرداند که این رشتهها توسط یک کاراکتر جداکننده (delimiter) از درون یک رشته استخراج شدهاند. پارامترهای این تابع عبارتند از:
expressionرشته اصلی.
: delimiterاین پارامتر اختیاری است و کاراکتر جداسازی را نشان میدهد. در صورتیکه این پارامتر وارد نشود کاراکتر فاصله (" ") برای جداسازی استفاده میشود. در صورتیکه طول این کاراکتر صفر باشد یک آرایه تک عضوی که شامل کل expression است برگردانده میشود.
: limitتعداد رشتههای موجود در آرایه را نشان میدهد. در صورتیکه این پارامتر داده نشود کلیه رشتههای جداشده در آرایه خروجی قرار میگیرند.
: compareنوع جستجو را نشان میدهد. اگر این پارامتر 0 داده شود جستجوی متنی انجام می شود و اگر 1 داده شود جستجوی باینری انجام میشود.
Dim Ar(3) As String
Ar = Split("a#bd#cde", "#")
Join(sourcearray, [delimiter]):تعدادی رشته موجود در یک آرایه را بهم متصل میکند و رشته حاصل شده را بعنوان نتیجه برمیگرداند. پارامترهای این تابع عبارتند از:
: sourcearrayشامل رشتههایی که می خواهیم بهم متصل کنیم.
: delimiterکاراکتری که برای اتصال رشتهها بهم استفاده میشود . این کاراکتر در بین رشتهiای اتصالی میآید و اگر داده نشود از کاراکتر فاصله استفاده میشود. اگر طول این کاراکتر صفر باشد رشتههای بدون هیچ جداکنندهای بهم متصل میشوند. مثال:
Dim Ar(3) As String
Ar(1) = "ab"
Ar(2) = "c"
Ar(3) = "def"
Join(Ar, "*") = "ab*c*def"
StrComp(string1, string2, [compare]):این تابع دو رشته ورودی را با هم مقایسه می کند. پارامترهای این تابع عبارتند از:
: string1رشته اول.
: string2رشته دوم.
: compareنوع جستجو را نشان میدهد. اگر این پارامتر 0 داده شود جستجوی متنی انجام می شود و اگر 1 داده شود جستجوی باینری انجام میشود.
اگر string1 کوچکتر از string2 باشد مقدار بازگشتی 1- است. اگر دو رشته مساوی باشند مقدار بازگشتی صفر است. اگر string1 بزرگتر از string2 باشد مقدار بازگشتی 1 است.
StrConv(string, conversion):در یک رشته ورودی تغییراتی را اعمال می کند. پارامترهای این تابع عبارتند از:
: stringرشته ورودی.
: conversionنوع عمل تبدیل را نشان میدهد. مقادیر ممکن این متغیر عبارتند از:
توضیح |
مقدار |
تبدیل به حروف بزرگ |
1 |
تبدیل به حروف کوچک |
2 |
تبدیل اولین کاراکتر هر لغت در رشته به حرف بزرگ |
3 |
تبدیل به یک رشته یونیکد |
64 |
تبدیل از رشته یونیکد به کدپیچ پیش فرض سیستم |
128 |
مثال:
StrConv("hello my friend", 3) = "Hello My Freind"
منبع : iDevCenter.com