وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

وبلاگ فرهاد مرتضی پور

Farhad Mortezapour's Blog

Visual Studio 2008 در راه است

 

مایکروسافت تاریخ ارائه نسخه جدید ویژوال استودیو ۲۰۰۸ را ۲۷ فوریه ۲۰۰۸ مطابق با هشتم اسفند ۱۳۸۶ اعلام کرد. با این وجود ویژوال استودیو ۲۰۰۸ در بهار ۸۷ در ایران خواهد بود.

طبق اعلام مدیران این شرکت ، ویندوز سرور ۲۰۰۸ و SQL Server 2008 نیز در همان روز ارائه می شوند.

ویژوال استودیوی ۲۰۰۸ همراه با نسخه ۳.۵ فریم ورک ارائه می شود.

مشخصات ویژوال استودیو ۲۰۰۸

ارتباط با ورژن های بالاتر از ۹۷ Access در ویژوال بیسیک

در واقع مهمترین مشکل ویژوال بیسیک 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 استفاده کنید و از آن استفاده نمایید.

آموزش SQL

زبان SQL تنها زبان استاندارد و جامع پیاده‌سازی، مدیریت، نگهداری و کار با بانکهای اطلاعاتی می‌باشد که تقریباً توسط تمام بانکهای اطلاعاتی کوچک و بزرگ مانند Access، SQL Server، Oracle و DB2 پشتیبانی می‌شود. طراحان و افرادی که بنوعی با بانکهای اطلاعاتی سروکار دارند و همچنین برنامه نویسانی که از این بانکها استفاده می‌کنند هرکدام باید تا اندازه‌‌ای با این زبان آشنایی داشته باشند. این مقاله می‌کوشد تا مفاهیم زبان SQL را در قالب یک مثال کاربردی بیان کند. هرچند که مفاهیم بکار رفته در این مقاله در تمامی بانکهای اطلاعاتی قابل پیاده‌سازی می‌باشند ولی مثالهای ارائه شده در 2000 SQL Server مورد تست قرار گرفته‌اند.

بانک اطلاعاتی که در این مقاله بعنوان مثال مورد استفاده قرار گرفته است بانک اطلاعاتی یک آموزشگاه می‌باشد که شامل دو جدول بنامهای teachers و students می‌باشد. جدول اول اطلاعات اساتید و جدول دوم اطلاعات دانشجویان را در خود نگه می‌دارد. جدول اول دارای چهار فیلد زیر می‌باشد: name یا نام از نوع text، family یا فامیل از نوع text، age یا سن از نوع عدد، salary یا حقوق از نوع عدد.

جدول دانشجویان نیز شامل چهار فیلد می‌باشد، سه فیلد اول آن مشابه سه فیلد اول جدول اساتید می‌باشد و فیلد چهارم آن عبارتست از GPA یا معدل که یک فیلد عددی است.

زبان SQL دارای دستورات متنوع و نسبتاً زیادی می‌باشد. به این دستورات Clause نیز گفته می‌شود. در این مقاله و قسمتهای بعدی آن تعدادی از مهمترین Clauseهای زبان SQL مورد بررسی قرار می‌گیرند.

1 – دستورهای SELECT و FROM :

هدف نهایی از دادن انبوه اطلاعات به کامپیوتر، جستجو و یافتن اطلاعات مفید می‌باشد. به این عمل یعنی جستجوی اطلاعات در بانک اطلاعاتی Query نیز گفته می‌شود. اکثر دستورات زبان SQL نیز در همین راستا مورد استفاده قرار می‌گیرند. در این بین مهمترین و پرکاربردترین دستور را می‌توان دستور SELECT قلمداد کرد.

این دستور جهت انتخاب یک یا چند فیلد از یک یا چند جدول مختلف مورد استفاده قرار می‌گیرد، فیلدهای انتخاب شده پس از اجرای query روی صفحه نمایش داده خواهند شد.

بعنوان مثال اگر در بانک اطلاعاتی فرضی خودمان بخواهیم اسم و فامیل تمام دانشجویان را مشاهده کنیم باید برنامه‌ای به شکل زیر بنویسیم:

SELECT name, family
FROM students

در این برنامه که به زبان SQL استاندارد نوشته شده است از دو دستور SELECT و FROM استفاده شده است. دستور SELECT مشخص می‌کند که چه فیلدهایی از جدول باید نمایش داده شوند و دستور FROM نیز مشخص کننده جدولی است که قرار است اطلاعات از داخل آن استخراج شوند. حال اگر بخواهیم نام و فامیل تمام اساتید را ببینیم برنامه بالا را باید بصورت زیر تغییر دهیم:

SELECT name, family
FROM teachers

همان طوری که از مثال‌های بالا نیز مشخص است جلوی دستور SELECT نام فیلدهایی نوشته می‌شوند که قرار است نمایش داده شوند و بعنوان جداکننده نیز باید از کاراکتر کاما استفاده کرد. در صورتی که بخواهیم تمام فیلدهای یک جدول را ببینیم می‌توانیم بجای نوشتن اسم تمام فیلدها فقط از یک کاراکتر ستاره استفاده کنیم. کاراکتر ستاره بمعنی تمام فیلدهای یک جدول می‌باشد. مثلاً دو دستور زیر با هم معادلند:

SELECT *
SELECT name, family, age, gpa

2 – دستور WHERE :

دستور SELECT همان طوری که گفته شد جهت انتخاب و نمایش تعدادی از فیلدهای جداول مورد استفاده قرار می‌گیرد. در این حالت تمام رکوردها نمایش داده خواهند شد، ولی در بیشتر موارد هدف از نوشتن Query نمایش رکوردهایی است که دارای شرایط ویژه‌ای می‌‌باشند مثلاً نمایش مشخصات اساتیدی که بیش از پنجاه سال سن دارند. دستور WHERE برای گذاشتن یک یا چند شرط به دستور SELECT مورد استفاده قرار می‌گیرد. با اضافه کردن شرط به دستور SELECT تعداد رکوردهای خروجی (پاسخ) معمولاً محدودتر می‌شود. بعنوان مثال اگر بخواهیم مشخصات اساتیدی که بیش از چهل سال سن دارند را ببینیم باید برنامه‌ای بصورت زیر بنویسیم:

SELECT *
FROM teachers
WHERE age > 40

در این برنامه شرط age > 40 با استفاده از دستور WHERE به Query اضافه شده و باعث شده است تا فقط مشخصات اساتیدی نمایش داده شوند که در این شرط صدق می‌کنند یعنی بیش از چهل سال سن دارند.

حال اگر بخواهیم مشخصات دانشجویانی را که نام آنها علی می‌باشد و سن آنها نیز کمتر از پانزده سال است را ببینیم باید Query زیر را اجرا کنیم:

SELECT *
FROM students
WHERE age < 15 AND name = 'ali'

در مثال بالا دو مطلب جدید وجود دارد نخست آنکه در زبان SQL رشته متنی را باید داخل کوتیشن (‘) قرارداد. بنابراین برای معرفی کلمه‌ای بنام علی باید آنرا بصورت ‘ali’ نوشت، زیرا در این حالت این کلمه یک ثابت رشته‌ای (متنی) بحساب می‌آید. نکته دیگر آنکه می‌توان شرطهای مختلف را توسط AND، OR و NOT با همدیگر ادغام کرده و شرطهای پیچیده‌تری را بدست آورد. AND، OR و NOT هر سه از کلمات کلیدی زبان SQL می‌باشند. بعنوان یک مثال دیگر فرض کنید می‌خواهیم مشخصات تمام دانشجویانی را که نام آنها، علی یا رضا نباشند را پیدا کنیم، برنامه‌ای که این Query را انجام می‌دهد بصورت زیر می‌باشد:

('SELECT * FROM studentsWHERE name NOT IN ('ali', 'reza

در صورتی که NOT را از برنامه بالا حذف کنیم مشخصات تمام دانشجویانی که نام آنها علی یا رضا می‌باشند نمایش داده خواهد شد.

در این برنامه نیز یک کلمه کلیدی جدید وجود دارد: IN که برای تست عضویت در یک مجموعه بکار می‌رود. مجموعه‌ای که بادستور IN بکار می‌رود می‌تواند دهها عضو داشته باشد و نوع اعضا نیز می‌تواند رشته‌ای، عددی یا ... باشد. البته واضح است که تمام اعضا باید هم نوع باشند.

حال بعنوان یک مثال پیشرفته‌تر می‌خواهیم مشخصات دانشجویانی را ببینیم که اسم فامیل آنها به ‘ زاده’ ختم می‌شود مانند علیزاده، محمد زاده و ... برای این منظور باید Query زیر را نوشته و اجرا کنیم:

SELECT *
FROM family LIKE '% zadeh'

کاربرانی که با Access کار می‌کنند باید سطر آخر را به صورت زیر تغییر دهند:

WHERE family LIKE '*zadeh'

در این مثال از Wildcardها استفاده شده است که قبلاً با مفهوم آن در DOS و Windows یا حتی Unix آشنا شده‌ایم (ls a*) . در Wildcard ،SQL هایی به شرح زیر وجود دارند:

% (در Access از * استفاده کنید): این Wild card نشانگر هر تعدادی از کاراکترها (هر کاراکتری) می‌باشد.

- (در Access از ? استفاده کنید): این Wildcard نشانگر یک کاراکتر می‌باشد که این کاراکتر می‌تواند هر کدام از کاراکترهای مجاز کامپیوتر باشد.

جهت جستجو کردن فیلدهایی که دارای یک الگوی (Pattern) خاصی هستند باید از دستور LIKE و Wildcardها استفاده کرد. در مثال زیر نام و سن تمام اساتیدی که اسم آنها با Pe شروع می‌شود، نمایش داده خواهد شد.

SELECT name, age
FROM teachers
WHERE name LIKE 'Pe%'

بنابراین مشخصات افرادی که نام آنها مثلاً پدرام یا پیمان باشد در خروجی لیست خواهد شد.

3 – دستور ORDERBY :

دستور ORDERBY جهت Sort کردن رکوردهای نمایش داده شده مورد استفاده قرار می‌گیرد. با این دستور می‌توان مشخص کرد که رکوردهایی که قرار است نمایش داده شوند برحسب کدام فیلد باید مرتب شوند. بعنوان مثال برای مشاهده کردن مشخصات اساتیدی که سن آنها بیشتر از 29 سال می‌باشد و در ضمن لیست خروجی بترتیب اسم فامیل نیز مرتب شده باشد باید Query زیر را اجرا کرد.

SELECT *
FROM teachers
ORDERBY family

در این حالت افراد بترتیب اسم فامیل خود لیست خواهند شد. (از A تا Z) در صورتی که بخواهیم ترتیب Sort شدن برعکس شود (از Z تا A) می‌توان پس از دستور ORDERBY از کلمه کلیدی DESC استفاده کرد، مانند مثال زیر

SELECT *
FROM teachers
ORDERBY DESC name

در این مثال Sort شدن بترتیب اسم و نه بترتیب فامیل انجام می‌گیرد.

برای دستور ORDERBY می‌توان چند فیلد تعریف کرد، در این صورت این دستور عمل Sort کردن را با در نظرگرفتن اولین فیلد انجام خواهد داد در صورتی که چند رکورد دارای مقدار مشابهی در این فیلد باشند ملاک مرتب سازی آنها فیلد دومی خواهد بود که در دستور ORDERBY ذکر شده است، در صورتی که این فیلد نیز دارای مقادیر مشابهی باشد ملاک تصمیم‌ گیری فیلد سوم خواهد بود والی آخر.

بعنوان مثال در Query زیر نام اساتیدی که بیش از 30 سال دارند برحسب فامیل آنها مرتب می‌شود در صورتی که چند استاد دارای اسم فامیل یکسانی باشند ملاک مرتب شدن، اسم کوچک آنها خواهد بود.

SELECT *
FROM teachers
WHERE age > 30
ORDERBY family, name

4 – استفاده از توابع:

در دستور SELECT علاوه بر تعریف فیلدها می‌توان از عبارتهای ریاضی و یا توابع استاندارد SQL نیز استفاده کرد.

بعنوان مثال اگر مالیات بردرآمد پنج درصد باشد Query زیر نام اساتید و مالیاتی را که هر کدام می‌پردازند را مشخص می‌کند.

SELECT family, name, salary*5/100
FROM teachers

علاوه بر عبارتهای ریاضی می‌توان از توابع استاندارد SQL نیز استفاده کرد، تعدادی از این توابع عبارتند از:

تابع COUNT : تعداد فیلدها را برمی‌گرداند.

تابع SUM : مجموع یک فیلد عددی را برمی‌گرداند.

تابع AVG : میانگین یک فیلد عددی را برمی‌گرداند.

تابع MIN : مینیمم یک فیلد عددی را برمی‌گرداند.

تابع MAX : ماکزیمم یک فیلد عددی را برمی‌گرداند.

بعنوان مثال اگر بخواهیم تعداد اساتید و مجموع حقوقهایی را که به آنها پرداخت شده است را ببینیم می‌توانیم از Query زیر استفاده بکنیم.

SELECT COUNT (name), SUM (Salary)
FROM teachers

5 – Queryهای چند جدولی:

تمام Queryهایی که تاکنون مشاهده کردید، Queryهای تک جدولی بودند بدین معنی که در هر Query فقط اطلاعات یک جدول مورد جستجو قرار می‌گرفت. در SQL امکان نوشتن Queryهای چند جدولی نیز وجود دارد. در این حالت اطلاعات چند جدول بطور همزمان مورد جستجو قرار می‌گیرد و حتی امکان مقایسه فیلدهایی از یک جدول با فیلدهایی از جدول دیگر نیز وجود دارد. اگر در بین جداولی که در Query شرکت داده می‌شوند فیلدهای هم نام وجود داشته باشد باید نام آن فیلدها را Fully qualified کرد بدین معنی که ابتدا اسم جدول و سپس اسم فیلد را ذکر کرد. بین اسم جدول و اسم فیلد نیز باید از یک کاراکتر نقطه (‘.’) استفاده کرد.

بعنوان مثال اگر بخواهیم لیست اساتید و دانشجویانی که دارای ارتباط فامیلی هستند را ببینیم می‌توانیم از Query زیر استفاده بکنیم:

SELECT *
FROM students, teachers
WHERE students.family = teachers. Family

و یا اگر بخواهیم لیست اساتیدی را مشاهده کنیم که سن آنها از سن برخی از دانشجویان کمتر است، می‌توانیم Query زیر را اجرا کنیم:

SELECT teachers.family, teachers.name
FROM students, teachers
WHERE teachers.age < students.age

6 – کلام آخر:

کلام آخر اینکه زبان SQL برخلاف زبانهایی مانند C یک زبان Case Sensitive نیست بدین معنی که به بزرگ یا کوچک بودن حروف حساس نمی‌باشد. بنابراین به راحتی می‌‌توان دستورات و کلمات کلیدی آنرا در هر برنامه‌ای با حروف کوچک یا بزرگ تایپ کرد.

الگوریتم تبدیل تاریخ میلادی به تاریخ شمسی

تبدیل تاریخ میلادی به شمسی بسیار راحتتر از تبدیل تاریخ شمسی به میلادی است.
برای نوشتن این الگوریتم به اختلاف روزهای میان اولین روز سال میلادی و اولین روز سال شمسی نیاز داریم که این اختلاف روز (در صورتی که سال کبیسه باشد یا نباشد) "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;

}

 

اصول پیاده سازی نرم افزارهای مبتنی بر وب

در این مقاله تاریخچه و اصول پیاده سازی نرم افزار بخصوص بر روی بستر وب تشریح شده است.

بمنظور بررسی مقوله پیاده سازی نرم افزار بر روی بستر وب بحث خود را بر روی دو موضوع عمده متمرکز می کنیم: شناخت مدل های رایج جهت پیاده سازی نرم افزار از ابتدا تا کنون و شناخت وب بعنوان بستر مربوطه بهمراه تکنولوژی هائی که در این زمینه مورد استفاده قرار می گیرند.

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

در بخش اول این مقاله موضوع اول یعنی شناخت مدل های پیاده سازی نرم افزار تشریح خواهد شد. به این امید که از این رهگذر به نقطه ای برسیم که یک مدل مناسب جهت پیاده سازی برنامه های تحت وب را معرفی و آن را بعنوان پایه و اسا س کار خود قرار دهیم. در ابتدا لازم است به این اصل بدیهی اشاره شود که یک برنامه کامپیوتری حاصل ترکیب داده ها و منطق است. منطق یک برنامه از طریق کدهای مربوطه که به یکی از زبانهای برنامه نویسی نوشته خواهند شد، مسئول تحقق خواسته های تعریف شده برای یک نرم افزار از طریق انجام عملیات مورد نیاز بر روی داده ها است. داده ها خود می توانند به اشکال و روش های متنوعی سازماندهی و در اختیار یک نرم افزار قرار گیرند.Program = Logic(Code) + Data

مدل های پیاده سازی یک نرم افزار از ابتدا تاکنون متاثر از عوامل متفاوتی بوده است که جایگاه سخت افزارها بعنوان پتانسیل هائی که می بایست توان خود را در جهت بالفعل نمودن نرم افزارها قرار دهند، نقش برجسته ای دارد. مدل های پیاده سازی نرم افزار را می توان در پنج گروه عمده بشرح زیر تقسیم نمود:

MainFrame Architectureدر این مدل دو عنصر فیزیکی مورد اهتمام جدی بودند: کامپیوتر اصلی که با نام Host شناخته می شد و سخت افزارهای استفاده کننده از کامپیوتر اصلی که با نام ترمینال شناخته می شدند. تمامی منطق یک برنامه (Logic) بهمراه داده های مربوطه (Data) بر روی Host نصب می شد و کاربران با استفاده از ترمینال ها که بمنزله پایانه هائی جهت ورود و خروج ( نمایش ) اطلاعات بودند، قادر به ارتباط با سیستم و اجرای یک برنامه بودند. تمرکز منطق برنامه در یک محل (Host) از مهمترین ویژگی های این مدل است.

File Server Architectureاز این مرحله دو واژه معروف Server و Client پا به عرصه وجود گذاشتند. حیات و معنی این واژه ها محدود به سخت افرار بود و به مرزهای نرم افزار نرسیده بود. در این راستا کامپیوتری که برای دیگران سرویس هائی را ارائه می کرد با نام Server یا در این حالت خاص (File Server) و کامپیوترهائی که از این خدمات بهره مند می شدند را Client می گفتند. مدل فوق پاسخی اولیه به نیازهای کاربران یک شبکه کامپیوتری بود. در مدل فوق منطق یک برنامه بر روی یک Client نصب و داده ها بر روی Server قرار می گرفتند. دراین مدل داده ها در یک فایل ( با یک ساختار خاص) قرار گرفته و یک بانک اطلاعاتی را بوجود می آوردند و سرویس دهنده مسئول ارائه تسهیلاتی برای جابجائی و ارسال اطلاعات موجود در فایل ها بود. تمرکز منطق برنامه در یک محل ( Client ) از مهمترین ویژگی های این مدل است.

Client Server Architectureمدل فوق در پاسخ به اشکالات بوجود آمده در مدل قبل ارائه گردید. در مدل فوق کامپیوتر ارائه کننده خدمات را همچنان Server و کامپیوترهای استفاده کننده را Client می نامیدند. داده های یک برنامه (بانک های اطلاعاتی) همچنان بر روی سرویس دهنده قرار داشت ولی در رابطه با منطق برنامه اصل توزیع پردازش مورد توجه جدی قرار گرفت. بنابر اصل فوق بخشی از منطق یک برنامه را در حد امکان بر روی سرویس گیرنده اجرا و بخش دیگر از منطق برنامه بر روی سرویس دهنده اجرا می گردید. در مدل فوق برای اجرای یک برنامه دو پردازش جداگانه یکی بر روی سرویس دهنده و دیگری بر روی سرویس گیرنده فعال و هر یک نقشی در اجرای یک برنامه را برعهده می گرفت. مهمترین ویژگی مدل فوق مطرح کردن اصل پردازش توزیع شده است.

Two Tire Architectureدر مدل فوق اصل تقسیم وظیفه بصورت یک واقعیت انکار ناپذیر مورد توجه جدی قرار گرفت در این مدل همچنان کامپیوترهای سرویس دهنده و سرویس گیرنده جایگاه قبلی خود را داشتند با این تفاوت بسیار مهم که حوزه انجام هر عملیات ( منطق) تا اندازه ای شفاف تر گردید. مثلا جهت دستیابی به بانک های اطلاعاتی تمامی DataBase Engine بر روی سرویس گیرنده قرار می گرفت و سرویس گیرندگان جهت استفاده از داده های موجود در بانک اطلاعاتی نیازمند نصب امکانات نرم افزاری و آگاهی از ساختار بانک اطلاعاتی نبودند. از این مرحله واژه های سرویس گیرنده و سرویس دهنده پا به عرصه نرم افزار نیز گذاشتند و مفاهیمی نظیر سرویس دهنده بانک اطلاعاتی و رایج شد. مهمترین ویژگی مدل فوق تاکید بر اصل تقسیم فعالیت در چهارچوب ارائه طبقات (Tires) بود.

Three Tire Architectureدر مدل فوق اصل تفکیک مجموعه قوانین (سیاست های) مربوط به عملکرد یک نرم افزار مورد توجه جدی قرار گرفت. بدیهی است با حجیم شدن یک نرم افزار از یکطرف و افزایش تعداد کاربران از طرف دیگر و تغییرات متوالی در سیاست های راهبردی و عملیاتی یک نرم افزار در یک سازمان، مسائل مربوط به پشتیبانی و ارتقاء یک نرم افزار از مسائل بسیار مهم و حیاتی در موفقیت افزایش طول عمر یک نرم افزار محسوب می گردد.

در مدل فوق همچنان واژه های سرویس دهنده و سرویس گیرنده حضور مستمر خود را ادامه دادند با این تفاوت بسیار مهم که حوزه عملکرد این واژه ها در رابطه با نرم افزار بسیار برجسته گردید. در این مدل از سه لایه استفاده می گردد: لایه اول مسئول تماس و ارتباط با کاربر و ارائه دهنده محیط رابط کاربر، لایه دوم ( میانی ) مسئول نگهداری و اجرای سیاست ها و قوانین کلیدی و راهبردی حاکم بر نرم افزار و لایه سوم مسئولیت نگهداری بانک اطلاعاتی و ارائه سرویس و خدمات به لایه متقاضی ( لایه دوم ) است. عملکرد لایه دوم ( میانی ) بسیار گسترده بوده و می توان با همگرا نمودن این عملکردها به چند بخش، لایه های دیگری را نیز در این بخش داشته باشیم، در چنین حالتی این مدل اصطلاحا N-Tire نامیده می شود.

مدل فوق بهترین انتخاب برای پیاده سازی نرم افزار بر روی بستر وب است. کلید طلائی طراحی این نوع نرم افزارها توانائی نوشتن عناصر (اجزا) بگونه ای است که از یکطرف امکان بکارگیری آنها بسادگی در لایه ها و حتی چندین برنامه فراهم شده و از طرف دیگر امکان ارتباط این عناصر با یکدیگر صرفنظر از زبان برنامه نویسی استفاده شده و سایر موارد مرتبط فراهم گردد. ما می بایست جعبه های سیاهی را طراحی کنیم که صرفنظر از ماهیت درون هریک، قادر به استفاده از توان آنها در بخش یا بخش هائی از یک و یا چندین نرم افزار باشیم. مطلب فوق شاید مهمترین دلیل رویکرد شرکت های عظیم نرم افزاری جهت ارائه یک ساختار استاندارد برای تولید این عناصر باشد. تکنولوژی Component Object Model یا COM پاسخ شرکت مایکروسافت به این نیاز حیاتی بود.

تکنولوژی COMمهمترین ویژگی تکنولوژی فوق قابلیت استفاده مجدد و ارتباط متقابل برای عناصر( اشیاء) توزیع شده است. بدین ترتیب پیاده کنندگان نرم افزار این امکان را پیدا خواهند کرد تا با در کنار هم قرار دادن این عناصر و استفاده چندباره از آنان (حتی اگر تولیدکنندگان آنها متفاوت باشند) قادر به خلق آثار ماندگار خود در سریعترین زمان ممکن و متکی بر اصول مهندسی نرم افزار باشند.

ریشه COMتکنولوژی COM بصورت ناگهانی مطرح نگردید و ریشه در تلاش هائی دارد که از مدت ها قبل بعنوان یک نیاز مطرح شده بود. معرفی تکنولوژی Object Linking & Embedding یا OLE در سال 1991 اولین تلاش در این زمینه بود که توسط شرکت مایکروسافت برای ارتباط و پیوستگی بین مستندات در چهارچوب مجموعه برنامه های آفیس مطرح گردید. حوزه عملکرد تکنولوژی فوق بر روی مستندات (Documents) متمرکز بود. در ادامه شرکت مایکروسافت به این نکته پی برد که تکنولوژی فوق نباید صرفا متمرکز بر روی مستندات باشد و می تواند عملکردی جامع تر را تحت پوشش خود قرار دهد. بدین منظور نسخه شماره ۲، OLE در سال 1995 مطرح گردید و این نسخه در ادامه تمامی عناصر و اجزای موجود در محیط ویندوز را شامل گردید و بدین ترتیب COM مطرح شد.

در اوایل، تکنولوژی فوق در رابطه با عناصر و اجزای توزیع شده امکانات قابل توجه ای ارائه نکرده بود. شاید یکی از مهمترین دلایل آن عدم عرضه یک سیستم عامل شبکه ای از طرف مایکروسافت تا آن زمان بود. همزمان با عرضه ویندوز 95 و ویندوز NT در سال 1996 و مطرح شدن امکانات شبکه ای و ضرورت توزیع، اجرا و ارتباط بین عناصر توزیع شده تکنولوژی Distributed COM یا DCOM مطرح گردید. سرانجام در سال 1997 نسخه توسعه یافته این تکنولوژی با نام +COM توسط شرکت مایکروسافت ارائه گردید.

همزمان با گرایش بسمت طراحی و پیاده سازی نرم افزارهای متکی بر مدل Three Tire از یکطرف و نیاز شدید به پیاده سازی نرم افزار های متکی بر وب، ضرورت توجه و بازنگری در نحوه طراحی و پیاده سازی عناصر توزیع شده مورد اهتمام جدی شرکت های عظیم نرم افزاری قرار گرفت. شرکت مایکروسافت در این زمینه منادی تکنولوژی های COM/DCOM/COM+، Internet Explorer و ActiveX گردید. در مقابل شرکت های نرم افزاری دیگر، NetScape، Java/J2EE ( شرکت سان ) و CORBA را مطرح کردند.

اولین نسخه CORBA در سال 1992 توسط Object Management Group یا OMG که بالغ بر ششصد عضو دارد ارائه گردید. آخرین نسخه آن (نسخه شماره ۲) در سال 1996 عرضه شده است. عملکرد کلی تکنولوژی فوق نظیر COM است. بهرحال هدف اکثر تکنولوژی های فوق در این است که امکانات و استانداردهائی را برای تولید عناصر بگونه ای ارائه نمایند که با پیاده سازی آنها، قادر به اخذ سرویس و خدمات بصورت محلی و یا از را دور باشیم.

در این راستا شاید مناسب باشد که به عملکرد هر Tire در نرم افزارها از بعد سرویس دهی متمرکز شده و هر Tire را بعنوان مجموعه ای از سرویس ها در نظر بگیریم که مسئول ارائه سرویس به عناصر موجود در Tire خود و یا سایر Tire های مرتبط باشد. با این نگرش می توان گفت تمامی نرم افزارها خدمات و سرویس های خود را در سه بخش ارائه می نمایند:• User Sevices• Business Services• Data Services

در مدل Three Tire مسئولیت ارائه هر یک از سرویس های فوق به یک Tire واگذار می گردد. عناصر موجود و مسئول ارائه سرویس و خدمات در هر Tire قادر به ارتباط و درخواست سرویس از عناصر موجود در Tire خود و سایر Tire های موجود در بالا و یا پایین خود خواهند بود. نکته بسیار مهم در رابطه با وضعیت فوق این است که یک درخواست جهت اخذ سرویس نمی تواند یک Tire را حذف و خود مستقیما با Tire ثانویه ( بعدی) مرتبط و اصطلاحا یک Tire را دور بزند. مثلا عناصر موجود در لایه User Services نمی توانند مستقیما درخواست خود را برای لایه Data Services ارسال دارند. البته لایه فوق نیز چنین امکانی را نخواهد داشت. هر یک از سه بخش فوق مسئولیت های خاصی را برعهده گرفته و در زمانیکه یک بخش به خدمات یک بخش دیگر نیاز داشته باشد، درخواست خود را برای اخذ سرویس در اختیار بخش مورد نظر قرارداده و بخش مربوطه سرویس درخواستی را در قالب اجرای یک یا چندین عنصر انجام و ماحصل را در اختیار بخش مربوطه قرار خواهد داد.

مدل فوق که بر اساس همگرائی نوع سرویس ها و خدمات در یک نرم افزار ارائه شده است، صرفا یک مدل منطقی است و نشاندهنده یک مدل فیزیکی نیست. دراین راستا چهار مدل فیزیکی برای پیاده سازی نرم افزارهای Three Tire ارائه شده است:• Single Server• Business Server• Transaction Server• Web Server

Single Serverدر این مدل محل استقرار تمامی عناصر بین سرویس گیرنده و سرویس دهنده شبکه تقسیم می گردد. در مدل فوق تمامی عناصر مربوط به بانک های اطلاعاتی (Data Services) بر روی سرویس دهنده قرار می گیرد. عناصر مربوط به User Service در صورتیکه بگونه ای طراحی شده اند که ممکن است مورد استفاده چندین نرم افزار دیگر قرار بگیرند، می بایست آنها را بر روی سرویس دهنده شبکه نصب نمود. عناصر مربوط به Business Services که مسئولیت پیاده سازی سیاست ها و قوانین در یک نرم افزار را برعهده دارند، عمدتا بر روی سرویس دهنده شبکه نصب می گردنند مگر اینکه در رابطه با یک نرم افزار، اعمال یک سیاست بخصوص را می بایست در سطح لایه User Services پیاده سازی نمود ( بررسی صحت داده های ورودی، انجام برخی محاسبات خودکار با توجه به رفتار داده ها و ). در این حالت عنصر مجری سیاست فوق می بایست در لایه User Services و بصورت محلی و مختص به آن نصب و فعال گردد.

Bussines Server (Application)در مدل فوق یک سرویس دهنده اضافی با نام Application Server، استفاده می گردد. سرویس دهنده فوق مسئولیت استقرار تمامی عناصری را که می بایست به اشتراک گذاشته شوند، بر عهده خواهد گرفت. در این راستا در صورتیکه برخی از عناصر مربوط به لایه User Service باشند ولی بصورت مشترک مورد استفاده چندین نرم افزار قرار می گیرند نیز از این قاعده مستثنی نبوده و بهترین محل برای استقرار آنان، سرویس دهنده Application است. در مدل فوق تمامی عناصر مربوط به Data service بر روی سرویس دهنده Data قرار خواهند گرفت. ارتباط تمامی سرویس گیرندگان در ابتدا با Application Server آغاز خواهد گشت. سرویس گیرندگان خواسته خود را به لایه Application ارسال و لایه فوق مسئولیت ارتباط با لایه Data را بر عهده خواهد گرفت.

Transaction ServerTransaction واحد انجام یک فعالیت بوده که خود می تواند شامل چندین عملیات دیگر باشد. سلسله عملیات فوق می بایست تماما با موفقیت اجرا گردند. در مدل فوق سرویس دهنده Transaction مسئولیت مدیریت و ذخیره سازی عناصر لازم برای یک فعالیت Transaction را برعهده خواهد گرفت. در این مدل می توان از چندین سرویس دهنده دیگر بمنظور استقرار عناصر مربوطه استفاده کرد. استقرار عناصر بر روی سرویس دهنده ها می بایست پویا بوده و در صورت افزایش ترافیک، امکان جابجائی آنها بر روی سایر سرویس دهنده ها وجود داشته باشد. سرویس دهنده Transaction مسئولیت های نگهداری عناصر ActiveX، ارسال درخواست یک برنامه به یکی از سرویس دهنده ها، اتمام اجرای یک برنامه، بررسی صحت عملکرد یک عنصر را بر عهده خواهد گرفت.

Web Serverدر مدل فوق یک سرویس دهنده در شبکه اضافه و مسئولیت سرویس های وب را بر عهده خواهد گرفت. سرویس گیرنده ها مجهز به نرم افزارهای ارتباطی نظیر مرورگرها بوده تا بدین طریق قادر به درخواست صفحات ایستا و پویا از سرویس دهنده وب باشند. برنامه های مبتنی بر وب تمامی تاکید خود را بر استاندارد نمودن نرم افزارهای مرورگری معطوف می دارند. چراکه با استاندارد شدن این نوع از نرم افزارها تمامی سرویس گیرنده ها با یک ابزار واحد استاندارد شده از سرویس دهنده های وب خواسته های خود را مطرح خواهند نمود. بدیهی است در چنین حالتی پاسخگوئی به این درخواست ها از طرف سرویس دهنده های وب بمراتب ساده تر و با اطمینان خاطر بیشتری صورت می پذیرد.

در سه مدل گفته شده قبلی، بر این نکته تاکید وجود داشت که تمامی سیاست های راهبردی نرم افزار متمرکز شده تا بدین طریق اعمال تغییرات بسادگی صورت پذیرد. در مدل فوق چون سرویس دهنده وب این پتانسیل را دارا است که بصورت اتوماتیک عناصری را بر روی کامپیوتر سرویس گیرنده مستقر نماید، ضرورت تمرکز سیاست های راهبردی نرم افزار بر روی سرویس دهنده چندان مهم بنظر نمی آید. در این مدل بیشتر سرعت اجرای این عناصر مورد توجه است. در چنین حالتی اگر یک برنامه مبتنی بر وب بر روی بستر اینترنت اجرا می گردد، می توان برخی از عناصر را برای سرویس گیرنده ارسال تا بصورت محلی بر روی کامپیوتر وی اجرا شوند. در چنین حالتی سعی می شود که زمان ارتباط و درخواست از سرویس دهنده به حداقل زمان ممکن کاهش پیدا کند چراکه پهنای باند و ارتباط با سرویس گیرنده ها را نمی توان همواره بدون نگرانی تضمین نمود. در صورتیکه برنامه مبتنی بر وب بر روی بستر اینترانت اجرا می گردد، می توان بر اساس توان کامپیوترهای سرویس گیرنده و سرویس دهنده و پهنای باند موجود، برخی از عناصر را بر روی سرویس دهنده و برخی دیگر از عناصر را بر روی سرویس گیرنده اجرا نمود.

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

توابع مدیریت رشته ها در ویژوال بیسیک

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