[size=xx-large]
بخش اول VB برنامه نویسی شبکه و اینترنت در
TCP/IP مروري بر
نکته : مطالب زیر تنها در حد یک یادآوري می باشد . اگر اطلاعات کمی در
دارید به کتابهاي موجود مراجعه کنید . TCP/IP مورد
قراردادي است براي برقراري ارتباط در شبکه : Protocol پروتکل
٧٩
مجموعه اي از پروتکلهاي ارتباطی مرتبط بهم است که : TCP/IP مدل
مکانیزمها و سرویسهاي مورد نیاز جهت برقراري ارتباط در اینترنت را
مهیا می کنند . این مدل شامل 4 لایه است :
شامل برنامه هاي کاربردي و : Application Layer 1 - لایه کاربرد
می باشد . Telnet و Pop ،Smtp ،Ftp ،Http پروتکلهایی مثل
و TCP این لایه شامل دو پروتکل : Transport Layer 2 - لایه انتقال
وظیفه کنترل رسیدن بسته هاي داده به مقصد TCP است . پروتکل UDP
داده ها را به بسته هاي کوچکی تقسیم می کند که هر بسته TCP/IP )
حاوي آدرس فرستنده ، گیرنده و شماره بسته می باشد ) ، تصحیح خطا و
است با TCP پروتکلی شبیه UDP . مرتب سازي بسته ها را برعهده دارد
این تفاوت که هیچ ضمانتی براي رسیدن بسته هاي اطلاعاتی در آن وجود
ندارد و معمولاً در انتقال صوت و ویدئو روي اینتزنت استفاده می شود .
است که مسئول IP شامل پروتکل : Internet Layer 3 - لایه اینترنت
مسیریابی بسته هاي اطلاعاتی می باشد .
شامل بخشی از هسته سیستم : Link Layer 4 - لایه دسترسی به شبکه
عامل و نیز درایورهاي واسط شبکه براي کار با سخت افزار شبکه می
باشد .
سوکت یک ورودي انتزاعی در لایه انتقال : Port و پورت Socket سوکت
بکار می رود . اغلب TCP/IP می باشد که براي ایجاد ارتباطات مختلف
استفاده می کنند ، عملیات انتقال UDP و TCP برنامه هاي کاربردي که از
اطلاعات خود را با ساخت یک سوکت و سپس انجام یکسري عملیات روي
آن انجام می دهند . این عملیات عبارتند از :
1 - عملیات کنترلی : شامل اختصاص یک شماره پورت به سوکت ،
کردن یک ارتباط ، از بین بردن سوکت accpet کردن یا initiate
٨٠
2 - عملیات انتقال داده : شامل نوشتن داده روي سوکت و خواندن داده از
سوکت
مربوط به سوکت ، IP 3 - عملیات بررسی وضعیت : مثل پیدا کردن آدرس
پیدا کردن شماره پورت سوکت و غیره
پروتکل انتقال داده براي وب است . : HTTP
پروتکل انتقال فایل روي اینترنت است . : FTP
که در مطالب قبلی معرفی شد را می توانید از اینجا Region.dll 1 - فایل
بگیرید .
در ویژوال بیسیک TAPI
در ویژوال بیسیک - مقدمه TAPI
چیست ؟ TAPI
یک کتابخانه استاندارد براي کار با مودم و Telephony API یا TAPI
نوشتن برنامه هاي تلفنی می باشد . براي نمونه می توان از برنامه هاي
Dialup ) شماره گیر تلفن ) ، برنامه شبکه سازي تلفنی ) Phone Dialer
برنامه تشخیص پالس مودم براي ضبط اطلاعات وارد ، ( Networking
شده از طرف کاربران و کاربردهاي دیگر در این زمینه نام برد . این
کتابخانه به شما کمک کمک می کند تا بدون درگیر شدن با برنامه نویسی
سخت افزار مودم و درایور آن بطور مستقیم بتوانید برنامه هاي کاربردیی
در این زمینه بنویسید .
٨١
و چگونگی استفاده از TAPI در این سلسه مقالات سعی می کنم تا مفاهیم
آنرا در ویژوال بیسیک آموزش بدهم
در ویژوال بیسیک - بخش اول TAPI
: Microsoft Telephony مروري بر
امکان مجتمع سازي کامپیوترها با دستگاههاي ارتباطی و Telephony
شبکه ها را فراهم نموده است . معمولاً دستگاه ارتباطی یک مودم و خط
شبکه عمومی تلفن سوئیچینگ ) می باشد . ) PSTN ارتباطی نیز شبکه
عبارتند از : Telephony برخی از کاربردهاي
Multicast 1 - کنفرانسهاي مالتی مدیا بصورت
VoIP - 2
3 - مرکز پاسخ گویی اتوماتیک
PSTN 4 - تماس تلفنی از طریق کامپیوتر روي شبکه
را نشان می دهد : Microsoft Telephony دیاگرام زیر معماري
٨٢
!Error
: TAPI برنامه هاي
بایستی ابتدا در TAPI براي نوشتن برنامه هاي کاربردي با استفاده از
مورد سطح سرویسی که می خواهیم ارائه دهیم تصمیم گیري کنیم . براي
مثال براي نوشتن یک برنامه شماره گیر تلفن نیاز به استفاده کامل از
نیست و می توان از قابلیتهاي خود ویندوز در این زمینه استفاده TAPI
در بخشهاي بعدي در مورد سطوح مختلف . ( Assisted Telephony ) کرد
بیشتر صحبت خواهم کرد . TAPI سرویس در
TAPI دومین مطلبی که باید مورد توجه قرار داد اینست که می خواهیم از
ورژن 2 TAPI تفاوت ایندو آنست که . TAPI 3.x 2 استفاده کنیم یا از .x
است در حالیکه ورژن 3 آن بر مبناي تکنولوژي C برمبناي API یک
٨٣
می باشد . در بخشهاي بعدي مطالب بیشتري در مورد تفاوتهاي این COM
دو نسخه بیان خواهم کرد .
عبارتند از : TAPI بخشهاي اصلی یک برنامه کامل
اتصال به ، TAPI dll کردن load شامل : TAPI Initialization - 1
و برپاسازي سیستم اطلاع TAPI مذاکره در مورد ورژن ، TAPI Server
می باشد . event رسانی
مقداردهی اولیه ، دریافت و کنترل تماسها : Session Control - 2
دریافت و تنظیم اطلاعات دستگاه : Device Control - 3
stream تشخیص و یا تولید تونها و ارقام ، کنترل : Media Control - 4
آزاد سازي منابع : TAPI Shutdown - 5
دیاگرام زیر این مراحل را بهتر نشان می دهد :
٨٤
!
در ویژوال بیسیک - بخش دوم TAPI
٨٥
: TAPI مقداردهی اولیه
نیاز به برپاسازي محیط ارتباطی روي TAPI عملکرد درست اجزاي
کامپیوتر مورد نظر دارد . مراحل این امر عبارتند از :
زمانیکه سخت افزار و یا نرم افزار براي اولین بار به : TAPI 1 - نصب
کامپیوتر اضافه می شود انجام می گیرد . جزئیات کار به سیستم عامل و
نرم افزار بستگی دارد .
2 - مقداردهی ابتدائی : ساخت اشیا و مسیرهاي ارتباطی
TAPI براي اطمینان از اینکه اجزاي : TAPI 3 - مذاکره در مورد ورژن
قادر به تبادل داده ها باشند .
4 - استخراج اطلاعات منابع : بدست آوردن اطلاعاتی در مورد دستگاهی
مورد نظرمان استفاده نمود . TAPI که می توان از آن در برنامه
event برپاسازي سیستم اطلاع رسانی : Event notification - 5
در ویژوال بیسیک - بخش سوم TAPI
در ویژوال بیسیک : TAPI مقداردهی اولیه
را انتخاب کرده و از لیست References گزینه Project از منوي
را انتخاب کنید . Microsoft TAPI 3.0 Type Library مربوطه مورد
٨٦
را بصورت objTAPI حال وارد بخش کد نویسی فرمتان شوید و متغیر
زیر تعریف کنید :
Dim objTapi As TAPI
را بصورت زیر objTAPI شی Load Form سپس در بخش مربوط به
ایجاد می کنیم :
Set objTapi = New TAPI
TAPI همانطور که در بخشهاي قبلی گفته شد ، قبل از فراخوانی هر تابع
ابتدا بایستی آنرا مقداردهی اولیه کنیم . براي مقداردهی اولیه کردن شی
عبارت زیر را بنویسید : TAPI
Call objTapi.Initialize
در ویژوال بیسیک - بخش چهارم TAPI
انتخاب یک آدرس :
در TAPI کد زیر نشان می دهد که چگونه می توان با استفاده از شی
ویژوال بیسیک منابع تلفنی در دسترس را براي یک آدرس که بتواند یک
مجموعه مشخص از نیازها را مدیریت کند ، بررسی کرد .
توجه داشته باشید که قبل از انجام این کار بایستی عمل مقداردهی اولیه
را که در بخش قبل ررسی شد ، انجام دهید . TAPI
انجام نگرفته است و براي error checking نکته : در کد زیر عمل
استفاده از کد زیر در برنامه هاي واقعی بایستی بخش بررسی خطا را به
٨٧
آن اضافه کنید .
1 - تعریف یک شی آدرس و یک شی مجموعه آدرس :
Dim gobjAddress As ITAddress
As ITCollection Dim objCollAddresses
بعنوان یک مجموعه آدرس از شی objCollAddress 2 - تنظیم شی
: objTapi
Set objCollAddresses = objTapi.Addresses
3 - پیدا کردن آدرسی که بتواند از واسط مورد نظر ما پشتیبانی کند :
bFound = False
objCollAddresses.Count For indexAddr = 1 To
objCollAddresses.Item(indexAddr)x = Set objCrtAddress
Set objMediaSupport = objCrtAddress
objAddressCapabilities = objCrtAddress Set
nSelectedType ) x )If objMediaSupport.QueryMediaType
bFound = True
End If
Nothing = Set objAddressCapabilities
Set objMediaSupport = Nothing
Nothing = Set objCrtAddress
If bFound = True Then Exit For
Next indexAddr
٨٨
در صورتیکه آدرس مورد نظزر پیدا شود برنامه از حلقه خارج شده و
یک آدرس قابل استفاده خواهد بود : gobjAddress
objcollAddresses.Item(indexAddr)x = Set gobjAddress
در ویژوال بیسیک - بخش پنجم TAPI
: TAPI در Event Handling انجام
رجیستر کردن ، TAPI ساده براي event handler کد زیر شامل یک
و رجیستر کردن تمام فراخوانیهاي event تنظیم ***** ، event واسط
دادن اخطار است . هدف اصلی از این کد اینست که مطمئن شویم بخشی
ها را دریافت می کند پردازشی را قبل از انتقال به event که TAPI از
بخشهاي دیگر انجام دهد .
تعاریفها :
TAPI Dim WithEvents gobjTapiWithEvents As
Attribute gobjTapiWithEvents.VB_VarHelpID = -1
glRegistrationToken As Long Dim
Const TAPI3_CALL_EVENTS =TE_CALLMEDIA Or
TE_CALLNOTIFICATION Or TE_CALLSTATE
٨٩
هاي تعریف شده براي event بصورتیکه تمام eventfilter تنظیم
را بپذیرد : TAPI
TAPI3_CALL_EVENTS = objTapi.EventFilter
ها : event رجیستر کردن
Set gobjTapiWithEvents = objTapi
Boolean, fMonitor As Boolean Dim fOwner As
Long Dim lMediaTypes As Long, lCallbackInstance As
fOwner = True
fOwner = True
fMonitor = False
TAPIMEDIATYPE_AUDIO = lMediaTypes
lCallbackInstance = 1
= glRegistrationToken
,gobjTapi.RegisterCallNotifications(gobjAddress,fM onitor
fOwner,lMediaTypes,lCallbackInstance)x
در ویژوال بیسیک - بخش ششم TAPI
انتخاب یک ترمینال :
+ قبل از اینکه یک ترمینال را براي برقراري ارتباط انتخاب کنید بایستی
و عمل انتخاب آدرس را انجام داده باشید . TAPI Initialization
٩٠
واسط کنترل تماس ) ) ITBasicCallControl ابتدا یک متغیر از نوع
تعریف می کنیم :
Dim objCallControl As ITBasicCallControl
objCallControl = gobjReceivedCallInfo Set
کوئري از شی آدرس ) ITTerminalSupport سپس یک متغیر از نوع
) تعریف می کنیم :
Dim objTerminalSupport As ITTerminalSupport
objTerminalSupport = gobjAddress Set
سپس متغیر ترمینال را تعریف کرده و توسط شی
یک ترمینال را براي آن استخراج می کنیم : objTerminalSupport
Dim objTerminal As ITTerminal
= Set objTerminal
objTerminalSupport.GetDefaultStaticTerminal(lMedia Ty
pe, dir)x
نیست بنابراین objTerminalSupport در اینجا دیگر نیازي به شی
آنرا آزاد می کنیم :
Set objTerminalSupport = Nothing
براي کنترل ترمینال objStreamControl سپس نیاز به تعریف شی
است :
٩١
Dim objStreamControl As ITStreamControl
objStreamControl = objCallControl Set
در صورتیکه این شی ایجاد شود ، به ازاي استریم هاي موجود در
بررسی می شود و for امکان ایجاد ترمینال در یک حلقه ITCollection
ترمینال مناسب انتخاب می گردد :
If Not (objStreamControl Is Nothing) Then
objITCollStreams As ITCollection Dim
objStreamControl.Streams = Set objITCollStreams
ITStream Dim nIndex As Long, objCrtStream As
For nIndex = 1 To objITCollStreams.Count
objITCollStreams.Item(nIndex)x = Set objCrtStream
Then If objCrtStream.MediaType = lMediaType
If objCrtStream.Direction = dir Then
objCrtStream.SelectTerminal(objTerminal)x Call
End If
End If
objCrtStream = Nothing Set
Next nIndex
Nothing = Set objITCollStreams
Set objStreamControl = Nothing
End If
٩٢
: ( Make a Call ) ایجاد یک تماس
و عمل انتخاب TAPI Initialization + قبل از این بخش بایستی مراحل
آدرس انجام شده باشد .
این بخش براي ایجاد یک شی تماس ، بررسی و مشخص کردن استریمی
که با این تماس در ارتباط است ، انتخاب و ایجاد ترمینالهاي مناسب و
کامل کردن ارتباط استفاده می شود .
و عمل انتخاب آدرس و انتخاب ترمینال TAPI Initialization قبل
انجام شده باشد .
یک شی تماس ساخته می شود : CreateCall در ابتدا با استفاده از متد
= Set gobjCall
,gobjOrigAddress.CreateCall(strDestAddress
nSelectedType,lMediaTypes)x
سپس در اینجا بایستی کدي که در بخش اول این درس براي انتخاب
ترمینال نوشته شد آورده شود :
{
Select Terminal Code
}
اجرا شود : Connect سپس بایستی دستور
gobjCall.Connect (False)x
بدین معناست که ارتباط بصورت آسنکرون برقرار می شود . False
٩٣
در ویژوال بیسیک - بخش پایانی TAPI
دریافت یک تماس :
کد زیر براي یافتن و یا ایجاد یک ترمینال مناسب براي دریافت یک تماس
بکار می رود . بایستی توجه داشته باشید که قبل از اجراي کد زیر
بایستی مراحل مقداردهی اولیه ، انتخاب یک آدرس و رجیسر کردن
ها را انجام دهید . همچنین در کد زیر بایستی مرحله انتخاب event
ترمینال را نیز انجام دهید . توجه داشته باشید که در کد زیر متغیر
است ITCallNotificationEvent یک اشاره گر براي واسط pEvent
داده می شود : event Handler به TAPI که توسط
If TapiEvent = TE_CALLNOTIFICATION Then
objCallNotificationEvent As ITCallNotificationEvent Dim
objCallNotificationEvent = pEvent Set
ITCallInfo Dim gobjReceivedCallInfo As
Set gobjReceivedCallInfo = objCallNotificationEvent.Call
objCallControl As ITBasicCallControl Dim
gobjReceivedCallInfo = Set objCallControl
objCallControl.Answer
End If
+ بخاطر طولانی شدن این سري مطالب و نیز تخصصی بودن آن که باعث
را به همین جا خاتمه TAPI می شود مخاطبین کمتري داشته باشد بحث
می دهم . اما براي دوستان علاقمند که بخواهند مطالب بیشتري در این
را در TAPI زمینه آموخته و نیز مثالهاي عملی از نوشتن برنامه هاي
٩٤
اختیار داشته باشند لینکهاي زیر را معرفی می کنم :
MSDN در سایت TAPI آموزش
TAPI سوالات مختلف در مورد
TAPI سوالات مختلف در مورد
Call Center Active
TAPI براي استفاده از ActiveX یک کنترل
در ویژوال بیسیک TAPI نمونه اي از یک برنامه کامل
در ویژوال بیسیک TAPI
در ویژوال بیسیک TAPI کتابی در مورد برنامه نویسی
Server-Side ) + مبحث بعدي : نوشتن کلاسهاي اکتیو ایکس سمت سرور
ASP براي استفاده در صفحات ( ActiveX Dll
WinInet API و RAS API آشنایی با
بخش اول – WinInet API و RAS API آشنایی با
مقدمه
-Internet Service Provide- ISP ویندوز براي برقراري ارتباط با
از ، dial-up networking شما از طریق مودم و خط تلفن در اتصالات
استفاده (RAS (Remote Access Service سرویسی خاص به اسم
RAS می کند . این سرویس داراي یک واسط برنامه نویسی است که
٩٥
نام دارد . این واسط شامل مجموعه اي از توابع است که شما می API
ابزاري بسیار RAS API . توانید آنها را در برنامه خود صدا بزنید
قدرتمند و قابل انعطاف است همچنین بسیار پیچیده می باشد .
خوشبختانه براي استفاده راحتتر ، مایکروسافت تعدادي تابع را در
قرار داده تا بتوان از آنها براي WinInet API مجموعه اي به اسم
برقراري ارتباط و کنترل اتصال استفاده کرد .
WinInet در این مجموعه آموزشی سعی خواهم کرد تا ابتدا در مورد
مطالبی را بیان کنم . RAS API و سپس API
بخش دوم – WinInet API و RAS API آشنایی با
: WinInet API آشنایی با
مجموعه اي از توابع است که امکان ایجاد و توسعه WinInet API
برنامه هاي اینترنتی را بصورتی ساده ، سریع و کارآمد براي برنامه
نویسان مهیا می کند . با استفاده از این مجموعه توابع شما می توانید
برنامه هایی بنویسید که از منابع اینترنتی با استفاده از پروتکلهایی
به شما اجازه WinInet استفاده کنند . همچنین FTP و HTTP چون
ایجاد نموده و آنرا ISP با یک dial-up می دهد تا بتوانید ارتباطی
کنترل کنید .
آینست که شما نیازي به دانستن ساختار WinInet مزیت اصلی توابع
نخواهید داشت . Socket پروتکلهاي ارتباطی و نیز برنامه نویسی
یک واسط سطح بالا را براي کار با منابع WinInet بعبارت دیگر
اینترنتی ارائه می دهد .
: WinInet موجود در Dial-Up امکانات
٩٦
تنها داراي دو تابع WinInet ، تا قبل از ارائه اینترنت اکسپلورر ورژن 4
بود : dial-up
براي بررسی اینکه آیا یک ارتباط : InternetAttemptConnect تابع
به اینترنت وجود دارد یا نه استفاده می شد . اگر هیچ اتصالی به
را dial-up networking اینترنت وجود نداشت این برنامه کادر تبادلی
نمایش می داد و کاربر اجازه داشت تا یک اتصال را براي وصل شدن به
اینترنت انتخاب کند .
تابع با استفاده از انجام یک : InternetCheckConnection تابع
اي که به تابع داده شده ، بررسی می کرد که آیا url به ping دستور
ارتباطی به اینترنت وجود دارد یا نه .
این دو تابع داراي محدودیتهاي فراوانی بودند . براي مثال تابع اول نمی
تواند بطور اتوماتیک اتصال به اینترنت را برقرار کند و تابع دوم نیز
نمی تواند هیچ اطلاعاتی در مورد نوع ارتباط به ما بدهد .
معرفی کرد که برخی از WinInet نسخه 4 ، تعدادي تابع جدید براي IE
آنها عبارتند از :
اطلاعاتی در مورد نوع ارتباط : InternetGetConnectedState تابع
استفاده شده را بیان می کند . براي مثال این تابع اطلاع می دهد که نوع
و یا از طریق LAN ارتباط به اینترنت از طریق مودم است یا شبکه
پروکسی .
این امکان را فراهم می سازد تا یک ارتباط : InternetAutodial تابع
اینترنتی اتوماتیک از طریق مودم را با استفاده از مدخل اتصال پیش
٩٧
مشخص کرده ایجاد dial-up networking فرض که کاربر آنرا در
کنید .
InternetAutodial این تابع کارآمدتر از تابع : InternetDial تابع
است و کادري را نمایش می دهد که کاربر می تواند نوع مدخل مورد نظر
خود براي ارتباط تلفنی با اینترنت را انتخاب کند .
براي قطع کردن اتصالی مودمی که : InternetAutodialHangup تابع
برقرار شده استفاده می شود . InternetAutodial از طریق تابع
براي قطع کردن اتصالی مودمی که از طریق : InternetHangUp تابع
برقرار شده استفاده می شود . InternetDial تابع
براي تنظیم کردن وضعیت جاري : InternetSetDialState تابع
ارتباط اینترنتی استفاده می شود .
در قسمت بعدي این سلسه مباحث جزئیات این توابع را بررسی کرده
و نهایتا برنامه اي کاربردي براي کار با این توابع در ویژوال
بیسیک ارائه خواهم داد .
: WinInet اطلاعات بیشتري در مورد
را WinInet API موجود در dial-up در این بخش ما تنها توابع
داراي امکانات WinInet بررسی کردیم اما همانطور که در ابتدا گفته شد
فراوانی در زمینه کار با اینترنت است . براي آشنایی بیشتر با این
امکانات در زیر جداولی ارائه شده که به اختصار امکانات مختلف این
مجموعه تابع را نشان می دهد :
: Dial-Up توابع
٩٨
Description Name
Retrieves InternetGetConnectedState
the current
state of the
Internet
connection
Initiates an InternetAutodial
unattended
dial-up
connection
Disconnects InternetAutodialHangup
a modem
connection
initiated by
Initiates a InternetDial
dial-up
connection
Disconnects InternetHangUp
a modem
connection
initiated by
InternetDial
Prompts the InternetGoOnline
user for
permission
to initiate a
dial-up
connection
to the given
URL
Sets the InternetSetDialState
current state
of the
Internet
connection
توابع عمومی اینترنت :
٩٩
Description Name
Initializes the Win32 InternetOpen
Internet functions
Opens an FTP, Gopher, InternetConnect
or HTTP session for a
given site
Closes a single Internet InternetCloseHandle
handle or a subtree of
Internet handles
Displays a dialog box InternetErrorDlg
for the error that is
passed to
InternetErrorDlg
Continues a file search InternetFindNextFile
started as a result of a
previous call to
FtpFindFirstFile or
GopherFindFirstFile
Retrieves the last InternetGetLastResponseInfo
Win32 Internet function
error description or
server response on the
thread calling this
function
Allows the user to place InternetLockRequestFile
a lock on the file being
used
Queries the amount of InternetQueryDataAvailable
data available
Queries an Internet InternetQueryOption
option on the specified
handle
Reads data from a InternetReadFile
handle opened by the
InternetOpenURL,
FtpOpenFile,
GopherOpenFile, or
١٠٠
HttpOpenRequest
function
Reads data from a InternetReadFileEx
handle opened by the
InternetOpenURL,
FtpOpenFile,
GopherOpenFile, or
HttpOpenRequest
function
Sets a file position for InternetSetFilePointer
InternetReadFile
Sets an Internet option InternetSetOption
Sets up a callback InternetSetStatusCallback
function that Win32
Internet functions can
call as progress is made
during an operation
Placeholder for the InternetStatusCallback
application-defined
status callback function
Formats a date and InternetTimeFromSystemTime
time according to the
specified RFC format
(as specified in the
HTTP version 1.0
specification)
Takes an HTTP InternetTimeToSystemTime
time/date string and
converts it to a
SYSTEMTIME structure
Unlocks a file that was InternetUnlockRequestFile
locked using
InternetLockRequestFile
Writes data to an open InternetWriteFile
Internet file
Checks for changes InternetConfirmZoneCrossing
between secure and
١٠١
nonsecure URLs
: URL توابع
Description Name
Canonicalizes a InternetCanonicalizeUrl
URL, which
includes
converting
unsafe
characters and
spaces into
escape
sequences.
Combines a base InternetCombineUrl
and relative URL
into a single
URL. The
resultant URL
will be
canonicalized.
Cracks a URL InternetCrackUrl
into its
component
parts.
Creates a URL InternetCreateUrl
from its
component
parts.
Begins reading a InternetOpenUrl
complete FTP,
Gopher, or HTTP
URL.
: FTP توابع
Description Name
١٠٢
Creates a new FtpCreateDirectory
directory on the
FTP server
Deletes a file FtpDeleteFile
stored on the
FTP server
Searches the FtpFindFirstFile
specified
directory of the
given FTP
session
Retrieves the FtpGetCurrentDirectory
current directory
for the given FTP
session
Retrieves a file FtpGetFile
from the FTP
server and
stores it under
the specified file
name, creating a
new local file in
the process
Stores a file on FtpPutFile
the FTP server
Removes the FtpRemoveDirectory
specified
directory on the
FTP server
Renames a file FtpRenameFile
stored on the
FTP server
Changes to a FtpSetCurrentDirectory
different working
directory on the
FTP server
١٠٣
: HTTP توابع
Description Name
Adds one or HttpAddRequestHeaders
more HTTP
request headers
to the HTTP
request handle
Ends an HTTP HttpEndRequest
request
Opens an HTTP HttpOpenRequest
request handle
Queries for HttpQueryInfo
information
about an HTTP
request
Sends the HttpSendRequest
specified
request to the
HTTP server
Sends the HttpSendRequestEx
specified
request to the
HTTP server
بخش سوم – WinInet API و RAS API آشنایی با
: WinInet موجود در Dial-Up بررسی جزئیات توابع
بطور اتوماتیک باعث شماره گیري : InternetAutodial 1 – تابع
اتصال پیش فرض اینترنت توسط مودم می شود . اگر اتصال با موفقیت
١٠٤
بر می گرداند . false و در غیر اینصورت true انجام شود تابع مقدار
پارامترهاي ورودي تابع :
فلگ کنترل کننده عملیات اتصال می باشد و یکی از مقادیر : dwFlags
زیر را می تواند داشته باشد :
INTERNET_AUTODIAL_FORCE_ONLINE -
INTERNET_AUTODIAL_FORCE_UNATTENDED -
پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
کردن تابع : declare چگونگی
Public Declare Function InternetAutodial Lib
"wininet.dll" (ByVal dwFlags As Long, ByVal dwReserved
As Long) As Long
باعث قطع کردن یک اتصال : InternetAutodialHangup 2 – تابع
اتوماتیک می شود . اگر قطع اتصال با موفقیت انجام شود تابع dial-up
برمی گرداند . تابع داراي یک false و در غیر اینصورت true مقدار
است که رزرو شده بود و dwReserved پارامتر ورودي به اسم
بایستی صفر باشد .
کردن تابع : declare چگونگی
Public Declare Function InternetAutodialHangup Lib
"wininet.dll" (ByVal dwReserved As Long) As Long
یک اتصال به اینترنت را با استفاده از یک : InternetDial 3 – تابع
ارتباط مودم مقداردهی اولیه می کند . پارامترهاي ورودي آن عبارتند از
:
parent هندل مربوط به پنجره : hwndParent
مورد استفاده dial-up نام ارتباط : lpszConnectoid
١٠٥
فلگ کنترل اتصال که یکی از مقادیر زیر را می تواند داشته : dwFlags
باشد :
INTERNET_AUTODIAL_FORCE_ONLINE -
INTERNET_AUTODIAL_FORCE_UNATTENDED -
اتصال به اینترنت از : INTERNET_DIAL_UNATTENDED -
طریق مودم بدون نمایش واسط کاربر
آدرس داده اي که شامل عدد متناظر با اتصال است : lpdwConnection
.
پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
کردن تابع : declare چگونگی
Public Declare Function InternetDial Lib "wininet.dll"
(ByVal hwndParent As Long, ByVal lpszConnectoid As
String, ByVal dwFlags As Long, lpdwConnection As Long,
ByVal dwReserved As Long) As Long
این تابع وضعیت اتصال : InternetGetConnectedState 4 – تابع
جاري به اینترنت را بر می گرداند . اگر اتصال برقرار باشد تابع مقدار
برمی گرداند . false و در غیر اینصورت true
پارامترهاي ورودي تابع عبارتند از :
توصیف وضعیت اتصال . این پارامتر یکی از مقادیر زیر : lpdwFlags
را می تواند داشته باشد :
INTERNET_CONNECTION_MODEM -
INTERNET_CONNECTION_LAN -
INTERNET_CONNECTION_PROXY -
INTERNET_CONNECTION_MODEM_BUSY -
پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
١٠٦
کردن تابع : declare چگونگی
Public Declare Function InternetGetConnectedState Lib
"wininet.dll" (ByRef lpdwFlags As Long, ByVal
dwReserved As Long) As Long
پیغامی به کاربر براي دادن مجوز براي : InternetGoOnline 5 – تابع
را می دهد . اگر اینکار موفقیت آمیز URL مقداردهی اولیه اتصال به یک
برمی گرداند . پارامترهاي false و در غیر اینصورت true باشد مقدار
ورودي تابع عبارتند از :
وب سایت مورد نظر براي اتصال lpszURL : URL
parent هندل پنجره : hwndParent
پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
کردن تابع : declare چگونگی
Public Declare Function InternetGoOnline Lib
"wininet.dll" (ByVal lpszURL As String, ByVal
hwndParent As Long, ByVal dwReserved As Long) As
Long
به مودم می گوید که اتصال به اینترنت : InyernetHangUp 6 – تابع
را قطع کند . پارامترهاي این تابع عبارتند از :
شماره مربوط به اتصالی که می خواهیم آنرا قطع : dwConnection
کنیم .
پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
کردن تابع : declare چگونگی
Public Declare Function InternetHangUp Lib
"wininet.dll" (ByVal dwConnection As Long, ByVal
dwReserved As Long) As Long
١٠٧
تنظیم نمودن وضعیت شماره گیري : InternetSetDialState 7 – تابع
و در غیراینصورت true مودم . اگر تنظیم با موفقیت انجام شود تابع
برمی گرداند . پارامترهاي ورودي تابع عبارتند از : false
dial-up نام اتصال : lpszConnectoid
در حال حاضر این . dial-up وضعیت مربوط به اتصال : dwState
پارامتر تنها مقدار
را می تواند INTERNET_DIALSTATE_DISCONNECTED
داشته باشد .
پارامتري رزرو شده است و بایستی صفر باشد . : dwReserved
کردن تابع : declare چگونگی
Public Declare Function InternetSetDialState Lib
"wininet.dll" (ByVal lpszConnectoid As String, ByVal
dwState As Long, ByVal dwReserved As Long) As Long
: dial-up بررسی فلگهاي مورد استفاده در توابع
: InternetDial 1 – فلگهاي تابع
= Public Const INTERNET_DIAL_UNATTENDED
x80000' &H8000&
= Public Const INTERENT_GOONLINE_REFRESH
x000000010' H1&
H1& = Public Const INTERENT_GOONLINE_MASK
x000000010'
١٠٨
: InternetAutoDial 2 – فلگهاي تابع
Public Const
INTERNET_AUTODIAL_FORCE_ONLINE = 1
Public Const
INTERNET_AUTODIAL_FORCE_UNATTENDED = 2
Public Const
INTERNET_AUTODIAL_FAILIFSECURITYCHECK =
4
: InternetGetConnectedState 3 – فلگهاي تابع
Public Const INTERNET_CONNECTION_MODEM = 1
INTERNET_CONNECTION_LAN = 2 Public Const
4 = Public Const INTERNET_CONNECTION_PROXY
Public Const
INTERNET_CONNECTION_MODEM_BUSY = 8
اختصاصی : dial handler 4 - فلگهاي مربوط به
Public Const INTERNET_CUSTOMDIAL_CONNECT =
0
Public Const
INTERNET_CUSTOMDIAL_UNATTENDED = 1
Public Const
INTERNET_CUSTOMDIAL_DISCONNECT = 2
اختصاصی : dial handler 5 – فلگهاي عملیاتی پشتیبانی شده براي
Const Public
INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDE
D = 1
Public Const
INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE =
2
١٠٩
Public Const
INTERNET_CUSTOMDIAL_CAN_HANGUP = 4
: InternetSetDialState 6 - وضعیتهاي مربوط به
Public Const
INTERNET_DIALSTATE_DISCONNECTED = 1
+ براي اطلاعات بیشتر در مورد این توابع به این آدرس مراجعه کنید .
WinInet موجود در کتابخانه DialUp مثالی از کار با توابع
است برنامه اي WinInet API در این بخش که آخرین بخش از مباحث
نمونه براي کار با توابع مودمی این کتابخانه ارائه خواهیم داد :
براي نوشتن برنامه اي که بتوان از طریق آن با استفاده از مودم به
اینترنت متصل شد بصورت زیر عمل می کنیم :
کنیم : Declare را InternetDial در ابتدا بایستی تابع
Private Declare Function InternetDial Lib "wininet.dll"
Alias "InternetDialA" (ByVal hwndParent As Long,
ByVal lpszConnectoid As String, ByVal dwFlags As Long,
lpdwConnection As Long, ByVal dwReserved As Long) As
Long
قرار می lOption سپس وضعیت شماره گیري را در متغیري به اسم
دهیم . این متغیر می تواند مقادیر زیر را داشته باشد :
DF_FORCE_ONLINE -
DF_FORCE_UNATTENDED -
DF_DIAL_FORCE_PROMPT -
DF_DIAL_UNATTENDED -
١١٠
حال نام اتصالی را که می خواهیم از آن استفاده شود در متغیري به اسم
قرار می دهیم . ConnectionName
long را از نوع RetVal و ConnectionID همچنین دو متغیر به اسم
تعریف می کنیم .
را بصورت زیر صدا می کنیم : InternetDial حال تابع
RetVal = InternetDial(Me.hwnd, ConnectionName,
lOption, ConnectionID, 0)
بدرستی انجام شده است . Dial مخالف صفر باشد عمل RetVal اگر
استفاده InternetHangUp براي قطع اتصال فوق بایستی از تابع
می کنیم : Declare کنیم . براي اینکار ابتدا تابع فوق را
Private Declare Function InternetHangUp Lib
"wininet.dll" (ByVal dwConnection As Long, ByVal
dwReserved As Long) As Long
سپس این تابع را بصورت زیر فراخوانی می کنیم :
RetVal = InternetHangUp(ConnectionID, 0)
براي اینکه مودم را مجبور کنیم تا بطور اتوماتیک از اتصال پیش فرض
InternetAutodial سیستم براي شماره گیري استفاده کند از تابع
استفاده می کنیم .
می کنیم : Declare براي اینکار ابتدا تابع را
Private Declare Function InternetAutodial Lib
"wininet.dll" (ByVal dwFlags As Long, ByVal
hwndParent As Long) As Long
سپس تابع را بصورت زیر فراخوانی می کنیم :
١١١
RetVal =
InternetAutodial(ADF_FORCE_UNATTENDED,
Me.hwnd)
بدرستی انجام شده AutoDial مخالف صفر باشد عمل RetVal اگر
است .
ایجاد شده از تابع AutoDial براي قطع اتصالی که توسط
استفاده می کنیم . ابتدا این تابع را InternetAutodialHangup
می کنیم : Declare
Private Declare Function InternetAutodialHangup Lib
"wininet.dll" (ByVal dwReserved As Long) As Long
فراخوانی این تابع بصورت زیر است :
Call InternetAutodialHangup(0)
براي اینکه بفهیم آیا اتصال به اینترنت وجود دارد یا نه از تابع
استفاده می کنیم . براي اینکار InternetGetConnectedStateEx
می کنیم : Declare ابتدا تابع را
Private Declare Function InternetGetConnectedStateEx
Lib "wininet.dll" Alias "InternetGetConnectedStateExA"
(lpdwFlags As Long, lpszConnectionName As Long,
dwNameLen As Long, ByVal dwReserved As Long) As
Long
سپس تابع را بصورت زیر فراخوانی می کنیم :
strConnectionName = Space(256)
lNameLen = 256
lPtr = StrPtr(strConnectionName)
lNameLenPtr = VarPtr(lNameLen)
١١٢
RetVal = InternetGetConnectedStateEx(lConnectionFlags,
ByVal lPtr, ByVal lNameLen, 0)
و بقیه متغیرها از نوع String از نوع strConnectionName که
هستند . Long
مخالف صفر باشد اتصال برقرار است . RetVal اگر
ثابتهایی که در کدهاي فوق استفاده شده عبارتند از :
Private Const
INTERNET_AUTODIAL_FORCE_ONLINE = 1&
Private Const
INTERNET_AUTODIAL_FORCE_UNATTENDED = 2&
Private Const
INTERNET_AUTODIAL_FAILIFSECURITYCHECK =
4&
Private Const INTERNET_DIAL_FORCE_PROMPT =
&H2000
Private Const INTERNET_DIAL_SHOW_OFFLINE =
&H4000
Private Const INTERNET_DIAL_UNATTENDED =
&H8000
Server-Side ActiveX Dll Programming
بخش اول - Server-Side ActiveX Dll Programming
مقدمه
برنامه ، server side هاي component درون ASP با قراردادن کدهاي
١١٣
نویس نه تنها می تواند از قابلیت هاي ویژوال بیسیک در نوشتن کدهاي
وي نیز افزایش می ASP صفحات load خود استفاده کند بلکه سرعت
یابد . همچنین این روش راهکاري براي کپسوله سازي و حفاظت از
می باشد . ASP کدهاي
را توسط ویژوال server-side در این درس یک نمونه اکتیویکس
استفاده خواهیم کرد . ASP بیسیک ایجاد نموده و از آن در صفحات
Server-Side اجزاي
بر روي clict-side بر خلاف اکتیوکس هاي server-side اکتیوکس هاي
سرور وب اجرا می شوند و بنابراین بایستی وب سرور مورد استفاده با
این تکنولوژي سازگار باشد . زمانیکه وب سرور دستوري را براي
دریافت می کند ASP پردازش یکسري اطلاعات درون یک صفحه
دستوراتی که درون تگهاي %> قرار دارند بررسی می شوند . با استفاده
ساخت که جایگزین این dll از ویژوال بیسیک می توان یک اکتیوکس
شود . در اینصورت تنها کافیست یک شی از کلاسهاي ASP کدهاي
ساخته شود تا بتوان از قابلیتهاي آن استفاده نمود . dll موجود در این
در ویژوال بیسیک Dll ActiveX ایجاد
براي ساخت یک اکتیواکس ویژوال بیسیک را اجرا کرده و توسط گزینه
ایجاد کنید . پس از اینکه ActiveX Dll پروژه اي از نوع New Project
کلیک کنید ویژوال بیسیک پروژه اي ActiveX dll شما روي آیکون
پیش فرض بهمراه ي: کلاس خالی براي شما ایجاد می کند . می توانید هم
نام پروژه و هم نام کلاس را تغییر دهید همچنین می توانید کلاسهاي
دیگري به پروژه اضافه کنید .
را استفاده نموده بایستی از ASP حال براي اینکه بتوان دستورات
١١٤
Microsoft شده و مورد References وارد بخش Project منوي
را انتخاب کنید . Active Server Pages Object Library
ActiveX در کلاس هاي ASP استفاده از متدهاي
بایستی ابتدا ActiveX در کلاسهاي ASP بمنظور استفاده از متدهاي
در داخل کلاس تعریف کنید . ساختار OnStartPage روتینی به اسم
این روتین بصورت زیر است :
Public Sub OnStartPage(PassedScriptingContext As
ScriptingContext)x
End Sub
را که شامل شی اي از کلاس ما باشد ASP زمانیکه کاربر یک صفحه
را به شی ما پاس می دهد . SciptingContext ،IIS فراخوانی کند
می باشد که ASP حاوي تمام متدها و خصوصیات ScriptingContext
براي استفاده در دسترس هستند . حال بایستی در روتین
در ScriptingContext که توسط ASP تمام اشیاي OnStartPage
کنیم تا در صورت assign دسترس هستند را به اشیایی از همان نوع
لزوم بتوانیم از آنها استفاده نمائیم . بنابراین قبل از نوشتن روتین
متغیرهاي زیر را تعریف می کنیم : OnStartPage
ScriptingContext Private MyScriptingContext As
Private MyApplication As Application
Request Private MyRequest As
Private MyResponse as Response
Server Private MyServer As
Private MySession As Session
١١٥
بایستی اشیا فوق را مقداردهی کنید : OnStartPage حال در روتین
Public Sub OnStartPage(PassedScriptingContext As
ScriptingContext)x
Set MyScriptingContext=PassedScriptingContext
MyApplication=MyScriptingContext.Application Set
MyRequest=MyScriptingContext.Request Set
MyResponse=MyScriptingContext.Response Set
MyServer=MyScriptingContext.Server Set
MySession=MyScriptingContext.Session Set
End Sub
می توانیم در متدهایی که ASP از تمام اشیا فوق مشابه نوشتن صفحات
زیر را در نظر ASP براي کلاس می نویسیم استفاده کنیم . براي مثال کد
بگیرید :
MyTempVar=Request.Form(“username”)x
MyTempVar)x & “ : Entered Response.Write(“You
<%
حال فرض کنید می خواهیم همین دستورات را در یک متد از کلاس
بنویسیم :
Public Sub MyMethod()x
String Dim MyTempVar As
MyTempVar=MyRequest.Form(“username”)x
١١٦
MyTempVar)x & “ : MyResponse.Write(“You Entered
End Sub
نکته دیگري که باید در نظر داشت نوشتن روتینی است که در زمان
نام دارد OnEndPage پایان کار با شی فراخوانی می شود . این روتین
مقداردهی کرده ایم را آزاد OnStartPage و در آن اشیایی که در روتین
می کنیم :
Public Sub OnEndPage()x
MyScriptingContext=Nothing Set
Set MyApplication= Nothing
Nothing =Set MyRequest
Set MyResponse= Nothing
Set MyServer= Nothing
Nothing =Set MySession
End Sub
پس از نوشتن متدهاي موردنظرتان پروژه را ذخیره کنید . حال براي
را انتخاب نمائید تا File/Make Dll مورد File کامپایل پروژه از منوي
موردنظرتان ساخته شود . این فایل را در dll پروژه کامپایل شده و فایل
شما در آنجا قرار دارد کپی کنید . ASP دایرکتوریی که صفحات
نکته اي که باید مورد توجه قرار داد اینست که در صورتیکه می خواهید
در سیستم دیگري استفاده کنید ابتدا بایستی آنرا رجیستر dll از این
موجود در regsvr32.exe از برنامه dll کنید . براي رجیستر کردن یک
دایرکتوري سیستم ویندوز استفاده می شود :
C:\InetPub\wwwroot\Example\Example.dll Regsvr32.exe
١١٧
ASP در صفحات ActiveX Dll استفاده از
ابتدا ASP در صفحات dll براي استفاده از کلاس نوشته شده در فایل
بایستی یک شی از آن کلاس ایجاد کنیم :
= Set ObjRefrence
Server.CreateObject(“ProjectName.ClassName”)x
<%
پس از ساخت شی می توانیم از متدهاي موجود در کلاس استفاده کنیم :
ObjReference.MyMethod()x
<%
بخش دوم - Server-Side ActiveX Dll Programming
چیست ؟ COM+
در درس گذشته بیان ASP هاي Object روشی که براي دسترسی به
OnStart استفاده می شد . این روش استفاده از متدهاي IIS شد تا 3.0
ورژن 5 IIS بود . البته گرچه هنوز این روش از سوي OnEnd و
پشتیبانی می شود اما داراي یک مشکل است :
اگر بخواهید از یک کلاس در کلاس دیگري استفاده کنید نمی توانید در
١١٨
کلاس مورد استفاده ، دو متد ذکر شده را قرار دهید و بنابراین به اشیاي
دسترسی نخواهید داشت . ASP
می باشد . COM+ راه حلی که براي این مشکل ارائه شد تکنولوژي
وجود ObjectContext بطور خلاصه در این تکنولوژي شیی به اسم
دسترسی داشته باشید . ASP دارد که از طریق آن می توانید به اشیاي
،Project ابتدا از منوي COM+ براي استفاده از تکنولوژي
را انتخاب کرده و مورد زیر را انتخاب کنید : References
Services Type Library +COM
سپس در کلاسهاي خود متغیرهاي زیر را تعریف کنید :
Dim Request As ASPTypeLibrary.Request
Response As ASPTypeLibrary.Response Dim
ASPTypeLibrary.Server Dim Server As
Dim Session As ASPTypeLibrary.Session
Application As ASPTypeLibrary.Application Dim
را ObjectContext هر کلاس بایستی شی Initialize حال در متد
تعریف کرده و مقداردهی کنید . سپس متغیرهاي بالا را با استفاده از این
شی مقداردهی نمائید :
Private Sub Class_Initialize()x
ObjectContext Dim objCtx As
Set objCtx = GetObjectContext
objCtx.item("Request")x = Set Request
Set Response = objCtx.item("Response")x
objCtx.item("Server")x = Set Server
Set Session = objCtx.item("Session")x
Application = objCtx.item("Application")x Set
End Sub
١١٩
پاسخ به سوالات شما :
1 - چه جوري دکمه ها و لیست باکس ها در ویژوال بیسیک را شکل اکس
پی کنیم؟اصلان می شه؟
پاسخ : ؟؟؟؟
هاشو نخاد و بدونه اونا اجرا dll چطوري میشه فایله اجرایی vb 2 - تویه
بشه ؟
پاسخ : برنامه هاي اجرایی ویژوال بیسیک براي اجرا شدن به یکسري
براي اینکه به این فایلها . Vb Runtime Dll فایلهاي دیگه نیاز دارند مثلا
براي پروژه تان بسازید setup file نیازي نباشد بایستی یک برنامه نصب
تا بتوان برنامه را روي هر کامپیوتري نصب و اجرا کرد . ساده تري راه
موجود در ویژوال استدیو Deployment & Package استفاده از ابزار
،InstallWise ،InstallShield : است . ابزارهاي حرفه اي تر عبارتند از
و ... Setup Factory
دهید . mpr 3 - اگه ممکنه یه توضیحی درباره ي دي کد کردن دي ال ال
پاسخ : ؟؟؟؟
4 - چطوري میشه تو یه تکس باکس در ویژوال بیسیک فرمان داد اینتر
شود یعنی به خط بعدي رود؟ ( یعنی زمانی که مولتی لاین اس ت)
vbCrLf پاسخ : استفاده از کاراکتر
برنامه بنویسیم ولی تمامی این ASP و PHP 5 - من می خوام با زبانهایی
هستند و من باید روي سرور این کار ها رو انجام Server_side زبانها
بدم من می خوامم بدونم که چه طوري می تونم کامپیوتر خودمو وب
رو نصب کنم ولی نه به IIS سرور کنم البته یه چیزهاي می دونم که باید
طور کامل خواهش می کنم کمکم کنید
١٢٠
آنها استفاده IIS نصب کرده و از XP پاسخ : بایستی ویندوز 2000 یا
بطور اتوماتیک نصب نمی شود و باید IIS کنید . البته در ویندوزز 2000
به IIS آنرا خودتان اضافه کنید . براي اطلاعات بیشتر در مورد کار با
کتاب ها و مراجع اینترنتی مراجعه کنید مراجعه کنید .
بخش سوم - Server-Side ActiveX Dll Programming
در وي ( Database ) خلاصه اي بر چگونگی کار با بانک هاي اطلاعاتی
بی :
+ براي آشنایی کامل با چگونگی کار با بانک هاي اطلاعاتی در ویژوال
به کتاب برنامه Database Programming بیسیک و بطور کلی
نویسی بانک هاي اطلاعاتی در ویژوال بیسیک انتشارات نص رجوع
کنید .
براي استفاده در Database قبل از اینکه چگونگی نوشتن یک کلاس
را آموزش دهم ، مقدمه اي بر چگونگی کار با بانک هاي اطلاعاتی ASP
در وي بی را شروع می کنم .
براي کار با بانک هاي اطلاعاتی در ویژوال بیسیک روشها و امکانات
ADO ) مختلفی وجود دارد که یکی از بهترین آنها استفاده از تکنولوژي
می باشد . بدون هیچ توضیحی در مورد ActiveX Data Object )
ساختار این تکنولوژي و نیز سایر روشهاي دیگر ، به سراغ روش
استفاده از این تکنولوژي می روم :
ها مورد Reference ابتدا بایستی از ADODB - براي کار با
را انتخاب کرد . Microsoft ActiveX Data Object
براي اتصال به بانک ADO Connection - قدم بعد تعریف یک شی
اطلاعاتی است :
١٢١
Dim cn As ADODB.Connection
را ایجاد نمود : ADO Connection - سپس بایستی این شی
Set cn = New ADODB.Connection
براي گرفتن مجموعه اي ADO Recordset - همچنین بایستی یک شی
از رکوردهاي بانک اطلاعاتی تعریف کرد :
Dim rs As ADODB.Recordset
- حال بایستی اتصال به بانک اطلاعاتی را باز نمود . در این مرحله با
توجه به نوع بانک اطلاعاتی و اتصالی که می خواهیم داشته باشیم
عبارت اتصال ممکن است متفاوت باشد . فرض کنیم عبارت اتصال را در
قرار دهیم : ConnString به اسم String یک متغیر نوع
باشد و بخواهیم SQL Server • در صورتی که بانک اطلاعاتی مقصد
به آن متصل شویم : ODBC بطور مستقیم و بدون استفاده از واسط
ConnString=”Provider=SQLOLEDB.1;Password=yourpas
Security Info=True;User ID=yourusername; sowrd;Persist
Initial Catalog=yourDatabaseName;Data
”Source=yourServerName
باشد و بخواهیم SQL Server • در صورتی که بانک اطلاعاتی مقصد
به آن متصل شویم : ODBC با استفاده از واسط
ConnString=”Provider=MSDASQL.1;Password=yourpass
Security owrd;Persist
١٢٢
Info=True;UserID=yourusername;DataSource=yourODB
”C_DataSourceName;Mode=ReadWrite
باشد : Access • در صورتی که بانک اطلاعاتی مقصد
ConnString=” Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=yourDatabaseFilePath;Persist Security
”Info=False
حال بایستی این اتصال را باز نمود :
cn.Open(ConnString)x
می باشد : ADO Recordset - قدم بعدي ایجاد شی
Set rs = New ADODB.Recordset
- سپس بایستی با توجه به کاري که می خواهیم با جداول آن بانک
به آن Recordset را توسط شی sql query اطلاعاتی انجام دهیم یک
بفرستیم :
adLockOptimistic ,rs.Open yourSQLquery,cn,OpenKeyset
١٢٣
query متفاوت است و توسط Recordset بعبارت دیگر نوع باز کردن
Table مورد نظر مشخص می شود براي مثال براي انتخاب فیلدهاي یک
:
DISTINCT yourfields from yourtable WHERE SELECT
yourcondition
نیز adLockReadOnly نکته : نوع قفل کردن مجموعه رکورد می تواند
باشد .
می توان یکسري کار را روي Recordset - حال با استفاده از این
رکوردهاي موجود در جداول انجام داد براي مثال :
1 – حرکت به ابتداي مجموعه رکورد :
rs.MoveFirst
2 – حرکت در طول مجموعه رکورد :
Do
rs.fields(0)x = tmp
.
.
.
rs.MoveNext
Loop Until (rs.EOF)x
3 – بستن مجموعه رکورد و بستن اتصال به بانک اطلاعاتی :
١٢٤
rs.Close
cn.Close
4 – حذف رکورد جاري از مجموعه رکورد :
rs.delete
5 - ایجاد رکورد جدید در مجموعه رکورد :
Dim fields(RecordsetFieldsCount) As Variant
values(RecordsetFieldsCount) As Variant Dim
fields(0) = Field 1 Name
Field 2 Name = (fields(1
.
.
.
fields(n) = Field n Name
Field 1 Value = (values(0
values(1) = Field 2 Value
.
.
.
Value values(n)= Field n
rs.AddNew fields, values
rs.update
بخش چهارم - Server-Side ActiveX Dll Programming
١٢٥
براي کار با جداول بانک هاي اطلاعاتی query آشنایی با چند
براي انتخاب رکوردها از یک جدول استفاده می شود . : SELECT -1
فرمت کلی این دستور بصورت زیر است :
condition WHERE tablename FROM fieldnames SELECT
fieldnames ORDER BY
داریم که داراي دو فیلد به mytable مثال : فرض کنید یک جدول به اسم
باشد : string از نوع name و integer از نوع id نامهاي
– انتخاب تمامی رکوردهاي جدول :
mytable"x query="Select * from
تمام رکوردهاي جدول : name - انتخاب فیلد
mytable"x query="Select name from
آنها برابر 2 باشد : id - انتخاب رکوردهایی از جدول که فیلد
query="Select * from mytable where id=2"x
باشد : a آنها برابر name - انتخاب رکوردهایی از جدول که فیلد
name=’a’"x query="Select * from mytable where
است در دستور string از نوع name توجه داشته باشید که چون فیلد
استفاده شده است . name فوق از ‘ براي مقدار فیلد
آنها name آنها برابر 2 و فیلد id - انتخاب رکوردهایی از جدول که فیلد
مرتب شده باشند . id باشد و بر حسب a برابر
query="Select * from mytable where id=2 and name=’a’
order by id"x
نکته : در صورتیکه بخواهیم از یک متغیر براي مقداردهی به یک فیلد در
و یا integer استفاده کنید با توجه به اینکه آن متغیر از نوع query
است باید بصورت زیر عمل کنیم : string
Dim mId as integer
١٢٦
string Dim mName as
mId=1
mName="a"x
" & (str(mId & "=query="Select * from mytable where id
x"’" & mName & "’=and name
این دستور براي قرار دادن یک رکورد در جدول استفاده : INSERT – 2
می شود . فرمت کلی این دستور بصورت زیر است :
(…,field2name,field1name) tablename INSERT INTO
x(…,field2value,field1value) VALUES
مثال :
mytable (id,name) values (1,’a’)"x query="Insert into
این دستور براي تغییر مقادیر یک رکورد از جدول : UPDATE – 3
استفاده می شود . فرمت کلی این دستور بصورت زیر است :
,field1value=field1name SET tablename UPDATE
…,field2value=field2name
مثال :
mytable set id=2 , name=’b’"x query="Update
این دستور براي حذف یک یا چند رکورد از جدول : DELETE – 4
استفاده می شود . فرمت کلی این دستور بصورت زیر است :
١٢٧
condition WHERE tablename DELETE FROM
مثال :
id=1"x query="Delete from mytable where
هاي مختلف براي کار با query و نیز ADODB حال که با تکنولوژي
جداول بانک هاي اطلاعاتی آشنا شدید می توانیم کلاسی براي کار با بانک
استفاده کنیم اما همانطور asp هاي اطلاعاتی بنویسیم و از آن در صفحات
که در قسمت قبل دیدید براي اتصال به یک بانک اطلاعاتی نیاز به یکسري
اطلاعات مثل نام سرور ، نام بانک اطلاعاتی و ... داریم . چند روش براي
دادن این اطلاعات وجود دارد :
1 – در کلاسی که می نویسیم این مقادیر را مشخص کنیم . اشکال این
روش اینست که از کلاس نوشته شده تنها براي یک کاربرد خاص می
توانیم استفاده کنیم و در صورتیکه سرور بانک اطلاعاتی و یا نام بانک
اتصال تغییر کند بایستی در password و username اطلاعاتی ویا
کلاس نوشته شده نیز تغییرات را اعمال کرده و مجدداً آنرا کامپایل کنیم .
به متد اتصال موجود asp 2 – راه حل دوم اینست که پارامترها را از طریق
در کلاس بفرستیم براي مثال :
db=server.createobject(“dbclass.database)x Set
Db.connect(servername,databasename,username,passwo rd)
x
می باشد . database متد اتصال به بانک اطلاعاتی در کلاس coonect که
قراردهیم و XML 3 – روش سوم آنست که این پارامترها را در یک فایل
١٢٨
آنها را از فایل بخوانیم . مزیت این روش اینست که connect در متد
پارامترها هم به آسانی قابل تغییر بوده و هم براحتی آنها می توان آنها را
استخراج نمود .
xml براي این منظور بایستی ابتدا یک کلاس براي خواندن اطلاعات از فایل
بنویسیم که موضوع درس بعد می باشد .
آشنا نیستید پیشنهاد می کنم xml نکته : در صورتیکه با فرمت فایلهاي
یک مطالعه مقدماتی در این زمینه انجام دهید .
بخش پنجم - Server-Side ActiveX Dll Programming
بخش اول : - Database نوشتن کلاس
و چگونگی استفاده از آن در ADODB پس از مباحثی که در مورد شی
داشتیم اکنون می توانیم یک XML وي بی و نیز استفاده از فایلهاي
بنویسیم . ASP کلاس کامل و قدرتمند براي کار با بانکهاي اطلاعاتی در
مراحل کار بصورت زیر می باشد :
DBase ایجاد کنید و نام آنرا Dll ActiveX 1 - ابتدا یک پروژه از نوع
بگذارید .
مواردي را که در مباحث قبلی گفته شد به References 2 - از بخش
پروژه اضافه کنید .
١٢٩
را براي کلاس بصورت زیر تعریف کنید : Cn 3 - متغیر
Private Cn As ADODB.Connection
براي کلاس می نویسیم . InitialConnection 4 - ابتدا یک متد به اسم
در این متد ابتدا پارامترهاي اتصال به بانک اطلاعاتی را مشابه آنچه در
می خوانیم و config.xml به اسم XML درس قبل گفته شد از یک فایل
با استفاده از آنها اتصال به بانک اطلاعاتی را باز می کنیم :
Public Sub InitialConnection()x
database_name, server_name ,Dim userName, Password
Dim xmlf As NewXMLReader
xmlf.Initiate("config.xml")x Call
x ("userName = xmlf.getvalue("DataBaseID
Password = xmlf.getvalue("DataBasePassword") x
xmlf.getvalue("DataBaseName") x = database_name
xmlf.getvalue("ServerAddress")x = server_name
CreateObject("ADODB.Connection")x = Set Cn
= Cn.ConnectionString
& Password & "=Provider=SQLOLEDB.1;Password"
& userName & "=Info=True;User ID Persist Security;"
"=Data Source;" & database_name & "=Initial Catalog;"
server_name &
Cn.Mode = adModeReadWrite
Cn.Open
End Sub
١٣٠
است که XML کلاس کار با فایلهاي XMLReader لازم به ذکر است که
در قسمت قبلی در مورد آن صحبت کردیم .
5 - براي بستن اتصال متد زیر را به کلاس اضافه کنید :
EndConnection()x Public Sub
Cn.Close
Set Cn = Nothing
End Sub
است ( مثل Boolean هایی که نتیجه آنها از نوع query 6 - براي اجراي
را به کلاس اضافه ExecuteUpdate متدي به اسم ( Delete و Insert
کنید :
ExecuteUpdate(ByVal squery As String) Public Function
As Boolean
Recordset Dim myrs As New
If Not (makesInjection(squery)) Then
adLockOptimistic = myrs.LockType
Set myrs = Cn.Execute(squery) x
ExecuteUpdate = True
Exit Function
Else
ExecuteUpdate = False
Exit Function
If End
End Function
است ( RecordSet هایی که نتیجه آنها از نوع query 6 - براي اجراي
١٣١
را به کلاس اضافه کنید : ExecuteQuery متدي به اسم ( Select مثل
Public Function ExecuteQuery(ByVal squery As String)
As Recordset
Not (makesInjection(squery)) Then If
Cn.Execute(squery)x = Set ExecuteQuery
Exit Function
Else
Nothing = Set ExecuteQuery
Exit Function
End If
End Function
ExecuteQuery و ExecuteUpdate همانطور که می بینید در دو متد
استفاده شده است . این تابع makesInjection از تابعی به اسم
وجود دارد یا SQL-Injection ورودي query بررسی می کند که آیا در
نه .
بخش ششم - Server-Side ActiveX Dll Programming
[/size]