برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

مقدمه ای بر php (قسمت اول)

 

قبل از هر چیز یه نگاه کوتاه و جزئی بر تاریخچه php می کنیم. نویسنده php اولین بار این زبان رو برای کار های شخصی خودش و اثری برای Resume کاریش که باید تحویل می داده نوشته بوده. اولین بار این زبان بصورت یک CGI در زبان Perl نوشته شده بود. ولی سروری که روش php نصب شده بود یکسری مشکل در اجرای صفحات داشت. به همین دلیل php رو دوباره بازنویسی کرد و با زبان ‍C نوشت. در همین اثنا بعضی از کاربران سرور مربوطه هم شروع به کار با نسخه نوشته شده و درخواست به افزودن feature های بیشتر کردند. این روال ادامه پیدا کرد تا اولین نسخه جمع و جور شده php رو همراه با راهنما، Mailing-List و FAQ بیرون داد. اولین نام این زبان Personal Home Page Tools بوده که در آینده به Personal Home Page Construction Kit تغییر کرد.  در همین مدت که داشت php پامی گرفت نویسنده اون شروع به نوشتن یه CGI دیگه برای کارکردن با بانک های اطلاعاتی و ارسال SQL Query کرد. خوب بقیه تارخچه باشه برای بعد حالا به خود php بپردازیم ;-).

قبل از هرچیز پیشنهاد می کنم ادیتور یا بهتر بگم IDE پرقدرت Zend رو دریافت کنید. واقعا کارتون رو در کد نویسی راحت میکنه و همون جا هم می تونید اجراش کنید.

خوب تا الان نصب php رو گفتیم و گفتیم که 2 جور php رو میشه نصب کرد. یکی بصورت CGI و دیگری بصورت یک Module برای سرورتون. مطلبی که جاش بود ذکر کنم یه توضیح کوچکی برای فرق این دو بود.زمانی که php بصورت یک CGI برروی سرور نصب میشه، هرگاه که سرور  به فایل های php بر می خوره php رو اجرا میکنه و این فایل رو بهش ارسال میکنه. ولی وقتی بصورت Module برای سرور نصب میشه، php جزئی از خود سرور میشه و زمانی که سرور شروع به کار میکنه همیشه هست و منتظر صفحات و اجراشون هست. طبیعتا معلومه که نصب بصورت Module بهتر از نصب بصورت CGI هست. چون اگر بصورت CGI نصب بشه با هر Request باید php اجرا بشه و بعد هم بسته بشه! البته وقتی php بصورت Module نصب میشه به این معنی نیست که از CGI دیگه نشه استفاده کرد. یه موقع ها میشه که ما لازم داریم بصورت CGI از php استفاده کنیم. به عنوان مثال می خواهیم سرور ما هر هفته توسط یکی از اسکریپت های نوشته شده ما از Database ما یک Backup بگیره. برای انجام این منظور ما اسکریپت رو بصورت جداگانه و CGI اجراش می کنیم. خیلی حاشیه رفتم، حالا بیایم سر اصل مطلب.

اسکریپت های نوشته شده php همگی باید در فایل های متنی ساده ویا به عبارتی بهتر بصورت UNIX-Style نوشته شوند. به عنوان مثال یک فایل php هیچ وقت نباید با Word Pad یا MS-Word ساخته شود! چون موقع اجرا php رو دچار مشکل میکنه. در محیط Windows ساده ترین ادیتور برای انجام اینکار Note-Pad هست. اگر از ویندوز 2000 یا XP استفاده می کنید که چه بهتر چون می تونید به راحتی یک فایل php و با کدپیج Unicode ذخیره کنید. فایل های php معمولا از پسوند php. تشکیل می شوند. زمانی که browser شما یک درخواست به سرور شما میفرستد برای مشاهده یک فایل php، سرور شما فایل مربوطه رو به php Engine میفرسته تا فایل اجرا بشه. کار php Engine اجرای فایل php شما و ارسال نتیجه بصورت HTML به browser شما هست. php یک زبان اسکریپت نویسی سمت سرور است. یعنی اسکریپت شما در سرور اجرا شده و نتیجه برای شما ارسال می شود.

دستورات php رو میشه به طرق مختلف نوشت. در اینجا به چند صورتش اشاره می کنم.

  • بصورت SGML

 

  • بصورت XML

 

  • بصورت اسکریپت های نوشته شده در فایل های HTML

  

  • بصورت تگ های ASP، البته در این حالت باید در فایل php.ini تعریف کنید که این حالت رو بشناسه. برای اینکار asp_tags =off رو به on تغییر بدید. یادتون نره Apache یاهر سروری که دارید رو restart کنید یا تغییرات رو مشاهده کنید. نحوه نوشتن ASP Style هم اینگونه هست:

من توی نوشته هام فقط بصورت XML می نویسم. مابین این تگ ها هر چند تا دستور که بخواهیم می تونیم بنویسیم. هر دستوری که تموم میشه باید بعدش این علامت رو بزاریم ";" هرگاه Engine زبان php به این ویرگول نقطه دار رسید فرض میکنه که دستور شما تموم شده. اگر در آخر هر دستور خود اینو نزارید برنامتون با مشکل برمیخوره. در اینجا یک مثال می زنم که نمایانگر پایان یک دستور هست.

این عبارت دقیقا مساوی این عبارت هست:

php تا زمانی که به ";" نرسه دستور رو تموم شده فرض نمیکنه. هردوی این عبارات حاصل ضرب 14 در 5 رو برروی صفحه نشون می دهند.

گاهی اوقات میشه که ما می خواهیم خطی یا خطوطی رو در فایل php خود غیر فعال کنیم تا اجرا نشن. یا گاهی اوقات هست که ما می خواهیم در کد های خود مطلبی رو بنویسیم. مثلا می خواهیم بگیم این کد فلان کار رو انجام میده. این کار رو می توان به 3 صورت انجام داد. راحت ترین راه برای انجام این کار گذاشتن 2 تا slash " //" در آغاز هر خط است. به عنوان مثال ما می خواهیم یه نوشته روی صفحه نمایش بدیم و در خود کد هم می خواهیم توضیح بدیم که این چیه:

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

به همین روال اگر شما یکسری کد جای این نوشته ها قرار بدید، کد های شما Igone میشن و اجرا نمیشن.

خوب حالا بپردازیم به نحوه نمایش عبارات برروی صفحه! نوشته های متنی و عبارات متنی رو میشه به 3 مدل نوشت و نمایش داد. نحوه اول بصورت double quote هست. اگر شما نوشته های خود رو درون "..." قرار بدهید، زمان اجرا، php متن شمارو تا تگ های HTML و متغیر های استفاده شما رو پیدا کنه و نتیجه رو برروی صفحه نشون بده. در زبان php نوشته های ما توسط دستور echo نمایش داده می شوند. به این مثال برای نمایش متن هایی که درون double quote هستند دقت کنید.

در این مثال چون کلمه salam بین تگ های هست بصورت bold یا توپور نمایش داده میشه. بنابراین نتیجه salam می باشد. در ادمه نوشته می بینید که اگر یک متغیر هم نامش دورن "..." قرار داده شده باشده، مقدار یا ارزش اون در صفحه نشون داده میشه.

نحوه بعدی نمایش عبارات، بصورت single quote هست. یعنی نوشته های ما میان '...' قرار می گیرند. وقتی نوشته های شما میان '...' قرار بگیرند، دیگه توسط php مورد بررسی قرار داده نمیشه که آیا متغیری میانشون هست یا نه:

 

حاصل این دستور عبارت salam درست مانند قبلی برروی صفحه است. ولی اگر ما متغیری در این نوشته قرار بدیم، مقدار و ارزشش نشون داده نمیشه و فقط اسمش نشون داده میشه. آخرین روش برای نمایش عبارات استفاده از Here Document است که من تا حالا زیاد ندیدم جایی استفاده داشته باشه. در این روش هم اگر شما از دستورات html استفاده کنید، نوشته های شما برروی صفحه به همان صورت نشون داده می شوند. به عنوان مثال:

در متغیر hereTex$ ما این نوشته هارو ذخیره می کنیم. هنگام نمایش برروی صفحه ما این نتایج رو میگیریم:

 

کلا زیاد از Here Document استفاده نمیشه. اعداد رو هم میشه بصورت عددی که هستند نمایش بدیم و هم بصورت مقادیر آن ها در سیستم های Octal و Hexa.  به عنوان مثال این عبارات همگی عدد 110 رو نشون می دهند:

 

برای نمایش اعداد Hexadecimal باید در شروع آن 0x و برای نمایش اعداد Octal باید درشورع آنها یک صفر قرار دهیم.

 نمی دونم تاحالا برنامه نویسی کارکردید یا نه! در برنامه نویسی ما همیشه با مقداری به نام بولین (Boolean) سروکار داریم. متغیری که از نوع بولین تعریف میشه یا مقدار True میگیره یا False. میشه اینو به یه چراغ تشبیه کرد. یه چراغ یا خاموشه یا روشن. وقتی روشنه True هست وقتی هم که خاموش هست False.

php هم مانند تمامی زبان های برنامه نویسی دیگه از انواع مختلف متغیر ها پشتیبانی می کنه. در این زبان متغیر ها با علامت $ نامشون شروع میشه. به عنوان مثال اگر ما بخواهیم متغیری داشته باشیم که درونش نامی رو نگهداری کنیم می تونیم name$ تعریفش کنیم. php نسبت به نام متغیر ها Case Sensitive هست. یعنی متغیر m4s$ و M4s$ و M4S$ هر 3 با همدیگه فرق می کنند. پس توی نامگذاری همیشه دقت کنید. در php نیاز نیست که حتما یه متغیر رو قبل از اینکه استفادش کنیم تعریفش کنیم و نوعش رو مشخص کنیم. دربعضی از زبان های برنامه نویسی برای استفاده از یک متغیر حتما باید تعریفش کنیم. زمانی که یه متغیر مقداری رو میگیره همون موقع درست میشه و تازمانی که برنامه هنگام کارکردن هست وجود داره. برای مقدار دهی به متغیر ها مانند خیلی از زبان های برنامه نویسی عمل می کنیم:

 

برای نمایش یک متغیر برروی صفحه می توان از دستور echo استفاده کرد. به عنوان مثال می خواهیم متغیر WebSiteName$ رو بروی صفحه بصورت Bold نشون بدیم. برای انجام این کار از این دستور استفاده می کنیم:

 

نتیجه این دستور عبارت Welcome to M4S.Net می باشد. اگر شما این عبارات رو در Single Quote قرار می دادید عبارت Welcome to $WebSiteName برروی صفحه نمایش داده میشد!

گاهی اوقات میشه که ما می خواهیم مقدار ثابت (Constant) تعریف کنیم و در برنامه ازش استفاده کنیم. درست مانند کاری که phpNuke برای فایل های زبان کرده. مقادیر ثابت درطول برنامه نه عوض میشن و نه مقداری می گیرند. نحوه تعریف مقادیر ثابت اینگونه است:

این دستور 3 تا پارامتر میگیره، ولی معمولا 2 تاش برای تعریف مقادیر ثابت لازم است. پارامتر اول نام مقدار ثابت و پارامتر دوم مقداری هست که ما می خواهیم بهش بدهیم. پارامتر سوم از نوع بولین و دلخواه است که برای تعیین Case In-Sensitive بودن مقدار ثابت ما هست. اگر مقدار True بدیم دیگه مقدار ثابت ما ‍Case Sensitive نیست. به مثال زیر توجه کنید:

 

در این مثال چون ما تعیین کردیم که مقدار ثابت ما ‍Case In-Sensitive هست می تونیم مثل تمامی موارد فوق بخونیمش. مقدار پیشفرض پارامتر سوم همیشه False هست. بنابر این اگر شما True رو مشخص نکنید مقدار ثابت شما Case Sensitive تعریف میشه. و اگر دقیقا عین نامش رو ننویسید مقدار اون نشان داده نمیشه.

همچنین تابعی هست به نام defined اینو از عمد اینجوری نوشتم که با خود define اشتباه نشه. این تابع مشخص میکنه که آیا مقدار ثابتی تعریف شده یا نه. اگر تعریف شده بود مقدار True بر میگردونه، اگر تعریف نشده بود، مقدار False بر میگردونه. True همیشه 1 است و False همیشه 0. به این مثال توجه کنید.

 

نتیجه ای که برروی صفحه نمایش داده میشه 1 است. چون ما گفتیم که WebSiteName یک مقدارثابت (Constant) هست که Case Sensitive نیست. بنابر این، با نام websitename هم برای سیستم تعریف شده است. ولی اگر ما اون مقدار true رو برداریم. حاصلی که می بینیم 0 است. چون این بار WebSiteName بصورت Case Sensitive تعریف شده و تا همانند نامش صداش نکنیم جواب نمیده :-) (دیگه کامپیوتر هم برا آدم کلاس میزاره).

php شکر خدا مثل بعضی زبون های برنامه نویسی درگیری نداره به آدم هم گیر نمیده و با متغیر ها خیلی flexible رفتار می کنه. در php میشه از این 8 نوع متغیر استفاده کرد:

  • string
  • integer
  • double
  • array
  • boolean
  • object
  • resource
  • unknown

در زبان php از متغیر های double به عنوان همون floating-point استفاده میشه. برای اینکه بینید متغیر های شما از چه نوع هستند می تونید از تابع ()gettype استفاده کنید مثال زیر یه مثال خوبی برای نشون دادن نوع متغیر ها هست:

 

نتیجه ای که برروی صفحه نشون داده میشه این هست:

 

اینجا یه نکته هست. اگر ما عدد 18 رو داخل "..." قرار دهیم، php متغیر age$ رو به عنوان یک متغیر string حساب می کنه. اگر بخواهیم نوع متغیری را تغییر دهیم از تابع ()settype استفاده می کنیم. به عنوان مثال این مرتبه عدد 18 رو در "..." قرار می دهم و توسط تابع ()settype میعن می کنیم که این متغیر یک integer هست.

 

اگر ما از تابع ()settype استفاده نمی کردیم php متغیر age$ رو یک string حساب می کرد، ولی حالا به عنوان یک integer حساب می کنه.

همچنان در php می توان از عملگر های Casting هم استفاده کرد. درست مانند توابع ()int و ()str در زبان های برنامه نویسی دیگه مانند VB و ++‍C. توسط عملگرهای Casting می توانید بصورت موفقت نوع متغیر رو تغییر داد. فهرست زیر، لیست عملگرهای ‍Casting زبان php می باشد:

(string)

(integer)

(double)

(boolean)

البته میشه از نام اختصاری (int) و (bool) برای عملگر های (integer) و (boolean) استفاده کرد. طریقه استفاده از این عملگر های اینگونه می باشد:

 

به عنوان مثال ما متغیری داریم که توش عدد Π رو ذخیره کرده ایم. ولی وضعیتی در برناممون پیش اومده که می خواهیم این متغیر رو به عنوان یک عدد صحیح (integer) برروی صفحه نمایش دهیم. بنابر این اینگونه برروی صفحه نمایش می دهیم:

 

بصورت پیشفرض php متغیر pie$ رو به عنوان یک متغیر double حساب میکنه. ولی ما با دستور (int)($pie) مقدار این متغیر رو به عنوان یک عدد صحیح نشون میده بنابر این خروجی برنامه عدد 3 هست.

در php عملگر های دیگه هم هستند. بعضی عملگر ها در php باید بین 2 عبارت عملی انجام دهند و بعضی عملگرها هم در php وضیفه انجام عملی برروی یک عبارت دارند. به عنوان مثال عملگر های جمع (+) و یا تفریق (-)  برروی 2 عبارت باید عملی انجام دهند. مثال عملگر هایی که برروی یک عبارت عمل می کنند، عملگر Casting یا عملگر Increment (++) می باشد. در ادامه متن بیشتر بهشون توضیح می دهم.

در php عملگر های ریاضی مانند عملگر ها در همه زبان ها می باشد. همچنین  عملگر دیگه ای هم هست در php که ترجمش میشه "عملگر 3 گانه" (Ternary Operator) که در بخش های بعدی هنگام معرفی دستورات شرطی مثل If و Switch بهش می پردازیم.

Pascal

زبان پاسکال یکی از زبانهای برنامه سازی است که ویژگیهای آموزشی آن بسیار بالاست یعنی زبان خوبی برای آموزش برنامه نویسی منظم و دقیق است.قابلیت خوانایی و درک برنامه های این زبان بالاست ومیتوان برنامه هایی نوشت که احتمال خطاهای آنها بسیار اندک باشد علتش این است که یک زبان ساختار یافته (structed) است .

ساختار کلی برنامه چیست؟
1-تعریف
2-به وسیله procedure و functionقسمتهای تکراری را از بین ببریم
3-بدنه
فرم کلی پاسکال:

اسم Program
;
تعریف ثابت const
;
تعریف نوع type
;
تعریف متغیرها var
)
پارامترها ) نام procedure

begin
____
____
____
end ;

; ( پارامترها ) نام  نوع تابع  function
begin
____
____
____
end ;
begin
____
____
____
end .

متغیر : محلی است که دارای یک اسم می باشد و می توان مقداری را در آن ذخیره کرد

انواع متغیرها در پاسکال:
Integer :انواع عددی صحیح شامل اعداد بدون نقطه ممیز است
نوع مقادیری که می پذیرند طول(بایت)
byte 0 تا 255 1
Shortint 128- تا 127 1
integer 32768- تا 32767 2
Word 0 تا 65535 2
Longint 2147483648- تا 2147483647 4



اعداد اعشاری:
انواع عددی اعشاری شامل اعدادی با نقطه ممیز است

نوع مقادیری که میپذیرند ارقام با معنی طول(بایت)
single 1.5e-45 تا3.4e38 7 تا 8 4
real 2.9e-39 تا 1.7e38 11 تا 12 6
Double 5.0e-324تا 1.7e308 15 تا 16 8
extended 1.9e-4951تا 1.1e493 19 تا 20 10
انواع داده های اعشاری

-Char :
نوع داده کاراکتری که با کلمه char مشخص می شود میتواند یک کاراکتر را در خود نگهداری کند بنابراین کاراکترها در یک بایت از حافظه کامپیوتر ذخیره می شوند

String - :
این نوع داده ها برای ذخیره رشته ها مثل اسامی افراد به کار می رود و با کلمه کلیدی string مشخص ی گردد
برای هر رشته باید طول معلوم کنیم اگر طولی تعریف نشود به طور پیش فرض 80 در نظر گرفته میشود(مقدار طول حداکثر 255 است)
- Boolean :
نوع دیگری از داده ها در پاسکال وجود دارند که داده های بولی خوانده می شوند مقادیر بولی دارای دو ارزش درستی یا نادرستی اند که در پاسکال با صفر و یک نمایش داده می شوند صفر به معنی نادرستی و یک به معنی درستی به کار میرود این نوع داده ها با کلمه Boolean تعریف میشوند.
دستورات ورودی در پاسکال:
دستور Readlnبرای خواندن اطلاعات از ورودی به کار میرود.
فرمت آن به صورت مقابل است:
(اسامی متغیرها)read/ln
اسامی متغیرها باید با کاما از یکدیگر جدا شوند..
برای چاپ اطلاعات در خروجی از دستور write/ln استفاده میکنیم.
فرمت آن به صورت مقابل است:
' یک پیام '
( متغیر ) write/ln
عبارت محاسباتی
انتساب متغیرها:
مقدار ثابت
( متغیر )=: متغیر
عبارت محاسباتی

مثال : برنامه ای بنویسید که دو عدد را از ورودی دریافت و حاصلجمع آن دو را چاپ کند .
Program add;
Var
a,b:integer;
begin
writeln('enter 2 num');
readln(a,b);
c:=a+b;
writeln('result is =',c);
end.

تکلیف : چرا برنامه باید ادب داشته باشد ؟
مثال : برنامه ای بنویسید که حقوق پایه وتعداد فرزندان یک کارگر را از ورودی دریافت و مبلغ حقوق وی را بر اساس فرمول زیر حساب کنید.
10*تعداد فرزندان + حقوق پایه =حقوق کل
Program test;
Var
Salary:longint;
Child:byte;
kole:integer
Begin
Writeln('enter salary and number of child);
Readln(salary,child);
Kole := salary + child *10
Writeln('kole is ',kole);
END.
اولویت عملگرها:
/ *
- +
شرط:
then شرط if
Begin
____
____
____
end
else
begin
____
____
____
end;
نکته : دستورالعمل قبل از IF سمی کالن نمی گیرد
عناصر شرط:
< > <= >= = <>
اپراتورها :
AND OR NOT XOR
NOT A
1 0
0 1

XOR OR AND B A
0 1 1 1 1
1 1 0 0 1
1 1 0 1 0
0 0 0 0 0

مثال : برنامه ای بنویسید که با دریافت دو عدد بزرگترین آنها را چاپ کند.
Program test;
Var
a,b:integer;
if a>b then
begin
writeln(a);
end
else
writeln(b);
end.

مثال : برنامه ای بنویسید که با دریافت سه عدد به عنوان ضرایب y=ax2+bx+c معادله درجه دو را حل کند(این برنامه را با یک If بنویسید).
Var
A,b,c:integer;
D,x1,x2:real;
Begin
Writeln('enter a,b,c');
Readln(a,b,c);
D:=b*b-4*a*c;
If (d >=0 ) then
Begin
X1:=(-b+sqrt(d))/2*a);
X1:=(-b-sqrt(d))/2*a);

مثال : برنامه ای بنویسید که تعداد فرزندان وحقوق پایه و رتبه یک کارگر را از ورودی دریافت و حقوق کل وی را بر اساس فرمول زیر حساب کند.
کسریها - مزایا +بیمه = حقوق کل
5*رتبه +1000* تعداد فرزند = مزایا
مالیات + بیمه = کسریها

بیشتر کمتر یا مساوی 2 تعداد فرزند
تعداد فرزندان 1000 بیمه
هر چیزی دیگر 20 تا 0 رتبه
حقوق پایه حقوق پایه*100/10 مالیات

begin
writeln('enter salary and grade and number of child');
readln(salary ,num,grade);
if num<=2 then
bimeh:=100
else
bimeh :=num*500;
if (grade>=0) and (grade<=20)then
net := 10/100*salary
else
if grade >20 then
begin
net:=20/100*salary;
mazaya:=num*1000+grade*50;
kasry:=bimeh+net;
kol :=salary + mazaya-kasry;
end;
writeln(kol);
end.

تکلیف : در یک ترکیب شیمیایی 4 عنصر شرکت دارند مقدار مجاز برای تهیه ماده ای به نام asxd به این صورت است.
A 0 ~ 50
S 0.5 ~ 0.83
X 81 ~ 92 or 824 ~ 901
D -100 ~ 100
با دریافت مقادیر a,s,x,d از ورودی به ما بگوید که آیا می توان این ماده را تولید کرد یا نه ؟
Begin
Num:=0;
Writeln('please enter a s x d');
Readln(a,s,x,d);
If (a>0) and(a<50) then
Num:=num+1;
If (s>0.5)and (s<0.83) then
Num:=num+1;
If ((x>81)and(x<92))or ((x>824)and(x<901))then
Num:=num+1;
If (d>-100) and (d<100) then
Num:=num+1;
If num=4 then
Writeln('yes can')
Else
Writeln('you can not');
End.
تکلیف : برنامه ای بنویسید که با دریافت سه عدد و با فرض اینکه عدد دوم وتر میباشد به ما بگویید که آیا این سه عدد تشکیل یک مثلث قایم الزاویه می دهد یا خیر؟

 CASE:
CASE میتواند تعدادای شرط را بگیرد و انتخاب کند.
مقادیری که دستور CASE میپذیرد ORDINAL است مقادیری کهORDINAL هستند دارای ترکیب نیستند و همچنین قابل شمارش هم هستند مثل INTEGER,CHARACTER,BYTE,BOOLEAN,LONGINT,…
پسREAL,STRING ORDINAL<---- نیستند
CASE تنها دستوری است که BEGIN ندارد ولی END دارد
مقدارها میتوانند شامل یک مقدار یا چند مقدار که از یکدیگر با کاما جدا شده اند باشند و یا یگ سری شمارشی باشند مثل:
1:------
1,10,28:------
1..100,150..243:---------
'A'..'Z':---------

Of متغیر Case
Begin : مقدار1
-------
-------
End;
Begin : مقدار2
-------
-------
End;
Begin :Else
-------
-------
End;
End.
مثال : برنامه ای بنویسید که یک عدد را از ورودی دریافت ( (0<=x<3وتلفظ آنها را چاپ کند.
BEGIN
READLN(X);
CASE X OF
0:WRITELN('ZERO');
1:WRITELN('ONE');
2:WRITELN('TWO')
ELSE
WRITELN('ERROR');
END;
END.

پایگاه داده ها چیست؟

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

معمولا DBMS ها بر اساس مدل هایی که استفاده می‌‌کنند تقسیم بندی می‌‌شوند: ارتباطی،شی گرا، شبکه‌ای و امثال آن. مدل های داده‌ای به تعیین زبانهای دسترسی به پایگاه‌های داده علاقه مند هستند. بخش قابل توجهی از مهندسی DBMS مستقل از مدل های می‌‌باشد و به فاکتور هایی همچون اجرا، همزمانی،جامعیت و بازیافت از خطاهای سخت افزاری وابسطه است.در این سطح تفاوت های بسیاری بین محصولات وجود دارد.
موارد زیر به صورت خلاصه شرح داده می شود:
•۱ تاریخچه پایگاه داده
•۲ انواع دادگان ها
•۳ مدل های پایگاه داده
۳.۱ مدل تخت
۳.۲ مدل شبکه ای(Network)
۳.۳ مدل رابطه ای
۳.۴ پایگاه داده‌های چند بعدی
۳.۵ پایگاه داده‌های شیء
•۴ ویژگی‌های سیستم مدیریت پایگاه داده‌ها
•۵ فهرست سیستم‌های متداول مدیریت دادگان

1- تاریخچه پایگاه داده
اولین کاربردهای اصطلاح پایگاه داده به June 1963 باز می‌گردد، یعنی زمانی که شرکت System Development Corporation مسئولیت اجرایی یک طرح به نام "توسعه و مدیریت محاسباتی یک پایگاه داده‌ای مرکزی" را بر عهده گرفت. پایگاه داده به عنوان یک واژه واحد در اوایل دهه 70 در اروپا و در اواخر دهه 70 در خبر نامه‌های معتبر آمریکایی به کار رفت.(بانک داده‌ای یا Databank در اوایل سال 1966 در روزنامه واشنگتن کار رفت)
تصویر:اولین سیستم مدیریت پایگاه داده در دهه 60 گسترش یافت. از پیشگامان این شاخه چارلز باخمن می‌‌باشد. مقالات باخمن این را نشان داد که فرضیات او کاربرد بسیار موثرتری برای دسترسی به وسایل ذخیره سازی را محیا می‌‌کند. در آن زمانها پردازش داده بر پایه کارت های منگنه و نوار های مغناطیسی بود که پردازش سری اطلاعات را مهیا می‌‌کند. دو نوع مدل داده‌ای در آن زمانها ایجاد شد:CODASYL موجب توسعه مدل شبکه‌ای شدکه ریشه در نظریات باخمن داشت و مدل سلسله مراتبی که توسط North American Rockwell ایجاد شد و بعدا با اقباس از آن شرکت IBM محصولIMS را تولید نمود.
مدل رابطه‌ای توسط E. F. Codd در سال 1970 ارائه شد.او مدل های موجود را مورد انتقاد قرار می‌‌داد. برای مدتی نسبتا طولانی این مدل در مجامع علمی مورد تایید بود. اولین محصول موفق برای میکرو کامپیوتر ها dBASE بودکه برای سیستم عامل هایCP/M و PC-DOS/MS-DOS ساخته شد. در جریان سال 1980 پژوهش بر روی مدل توزیع شده (distributed database) و ماشین های دادگانی (database machines) متمرکز شد، اما تاثیر کمی بر بازار گذاشت. در سال 1990 توجهات به طرف مدل شی گرا(object-oriented databases) جلب شد. این مدل جهت کنترل داده‌های مرکب لازم بود و به سادگی بر روی پایگاه داده‌های خاص، مهندسی داده(شامل مهندسی نرم افزار منابع) و داده‌های چند رسانه‌ای کار می‌‌کرد.

در سال 2000 نوآوری تازه‌ای رخ داد و دادگان اکس‌ام‌ال (XML) به وجود آمد. هدف این مدل از بین بردن تفاوت بین مستندات و داده ها است و کمک می‌‌کند که منابع اطلاعاتی چه ساخت یافته باشند یا نه در کنار هم قرار گیرند.


2- انواع دادگان ها
دادگان‌ها از نظر ساختار مفهومی و شیوه‌ای رفتار با داده‌ها بر دو نوع هستند :
1.دادگان رابطه‌ای
2.دادگان شی‌گرا


3- مدل های پایگاه داده
شگرد های مختلفی برای مدل های داده‌ای وجود دارد. بیشتر سیستم های پایگاه داده‌ای هر چند که طور معمول بیشتر از یک مدل را مورد حمایت قرار می‌‌دهند، حول یک مدل مشخص ایجاد شده اند. برای هر یک از الگوهای های منطقی (logical model) اجراهای فیزیکی مختلفی قابل پیاده شدن است و سطوح کنترل مختلفی در انطباق فیزیکی برای کاربران محیا می‌‌کند. یک انتخاب مناسب تاثیر موثری بر اجرا دارد. مثالی از موارد الگوی رابطه‌ای (relational model) است: همه رویدادهای مهم در مدل رابطه‌ای امکان ایجاد نمایه‌هایی که دسترسی سریع به سطرها در جدول را می‌‌دهد،فراهم می‌‌شود.

یک مدل داده‌ای تنها شیوه ساختمان بندی داده ها نیست بلکه معمولا به صورت مجموعه‌ای از عملیات ها که می‌‌تواند روی داده ها اجرا شود تعریف می‌‌شوند. برای مثال در مدل رابطه‌ای عملیاتی همچون گزینش (selection)، طرح ریزی (projection) و اتصال (join) تعریف می‌‌گردد.

۳.۱ مدل تخت
مدل تخت یا جدولی (flat (or table) model ) تشکیل شده است از یک آرایه دو بعدی با عناصر داده‌ای که همه اجزای یک ستون به صورت داده‌های مشابه فرض می‌‌شود و همه عناصر یک سطر با هم در ارتباط هستند. برای نمونه در ستون هایی که برای نام کاربری و رمز عبور در جزئی از سیستم های پایگاه داده‌ای امنیتی مورد استفاده قرار می‌‌گیرد هر سطر شامل رمز عبوری است که مخصوص یک کاربر خاص است. ستون های جدول که با آن در ارتباط هستند به صورت داده کاراکتری، اطلاعات زمانی، عدد صحیح یا اعداد ممیز شناور تعریف می‌‌شوند. این مدل پایه برنامه‌های محاسباتی(spreadsheet) است.

پایگاه داده ها با فایل های تخت به سادگی توسط فایل های متنی تعریف می‌‌شوند. هر رکورد یک خط است و فیلد ها به کمک جدا کننده هایی از هم مجزا می‌‌شوند. فرضا به مثال زیر دقت کنید:
id name team
1 Amy Blues
2 Bob Reds
3 Chuck Blues
4 Dick Blues
5 Ethel Reds
6 Fred Blues
7 Gilly Blues
8 Hank Reds
داده‌های هر ستون مشابه هم است ما به این ستونها فیلد ها (fields) گوییم. و هر خط را غیر از خط اول یک رکورد(record) می‌‌نامیم. خط اول را که برخی پایگاه‌های داده‌ای آنرا ندارند رکورد برچسب(field labels) گوییم. هر مقدار داده‌ای اندازه خاص خود را دارد که اگر به آن اندازه نرسد می‌‌توان از کاراکنر فاصله برای این منظور استفاده کرد اما این مسئله مخصوصا زمانی که بخواهیم اطلاعات را بر روی کارت های منگنه قرار دهیم مشکل ساز خواهد شد. امروزه معمولا از نویسه TAB برای جداسازی فیلد ها و کاراکتر خط بعد برای رکورد بعدی استفاده می‌‌کنیم. البته شیوه‌های دیگری هم وجود دارد مثلا به مثال زیر دقت کنید:
"1","Amy","Blues"
"2","Bob","Reds"
"3","Chuck","Blues"
"4","Dick","Blues"
"5","Ethel","Reds"
"6","Fred","Blues"
"7","Gilly","Blues"
"8","Hank","Reds"
این مثال از جدا کننده کاما استفاده می‌‌کند.در این نوع مدل تنها قابلیت حذف،اضافه،دیدن و ویرایش وجود دارد که ممکن است کافی نباشد.Microsoft Excel این مدل را پیاده سازی می‌کند.

۳.2 مدل شبکه ای(Network)
در سال 1969 و در کنفرانس زبانهای سیستم های داده‌ای (CODASYL) توسطCharles Bachman ارائه شد. در سال 1971 مجددا مطرح شد و اساس کار پایگاه داده‌ای قرار گرفت و در اوایل دهه 80 با ثبت آن درسازمان بین المللی استانداردهای جهانی یا ISO به اوج رسید.

مدل شبکه‌ای (database model) بر پایه دو سازه مهم یعنی مجموعه ها و رکورد ها ساخته می‌‌شود و برخلاف روش سلسله مراتبی که از درخت استفاده می‌‌کند، گراف را به کار می‌‌گیرد. مزیت این روش بر سلسله مراتبی این است که مدل های ارتباطی طبیعی بیشتری را بین موجودیت ها فراهم می‌‌کند. الی رغم این مزیت ها به دو دلیل اساسی این مدل با شکست مواجه شد: اول اینکه شرکت IBM با تولید محصولات IMS و DL/I که بر پایه مدل سلسله مراتبی است این مدل را نادیده گرفت. دوم اینکه سرانجام مدل رابطه‌ای (relational model) جای آن را گرفت چون سطح بالاتر و واضح تر بود. تا اوایل دهه 80 به علت کارایی رابط های سطح پایین مدل سلسله مراتبی و شبکه‌ای پیشنهاد می‌‌شد که بسیاری از نیاز های آن زمان را برطرف می‌‌کرد. اما با سریعتر شدن سخت افزار به علت قابلیت انعطاف و سودمندی بیشتر سیستم های رابطه‌ای به پیروزی رسیدند.

رکورد ها در این مدل شامل فیلد هایی است( ممکن است همچون زبان کوبول (COBOL) به صورت سلسله مراتب اولویتی باشد). مجموعه ها با ارتباط یک به چند بین رکورد ها تعریف می‌‌شود: یک مالک و چند عضو. عملیات های مدل شبکه‌ای از نوع هدایت کننده است: یک برنامه در موقعیت جاری خود باقی می‌‌ماند و از یک رکورد به رکورد دیگر می‌‌رود هر گاه که ارتباطی بین آنها وجود داشته باشد. معمولا از اشاره‌گرها(pointers) برای آدرس دهی مستقیم به یک رکورد در دیسک استفاده می‌‌شود. با این تکنیک کارایی بازیابی اضافه می‌‌شود هر چند در نمایش ظاهری این مدل ضروری نیست .

۳.3 مدل رابطه ای
مدل رابطه ای (relational model) در یک مقاله تحصیلی توسط E. F. Codd در سال 1970 ارائه گشت. این مدل یک مدل ریاضیاتی است که با مفاهیمی چون مستندات منطقی (predicate logic) و تئوری مجموعه ها (set theory) در ارتباط است. محصولاتی همچون اینگرس،اراکل، DB2 وسرور اس‌کیوال (SQL Server) بر این پایه ایجاد شده است. ساختار داده ها در این محصولات به صورت جدول است با این تفاوت که می‌‌تواند چند سطر داشته باشد. به عبارت دیگر دارای جداول چند گانه است که به طور صریح ارتباطات بین آنها بیان نمی‌شود و در عوض کلید هایی به منظور تطبیق سطر ها در جداول مختلف استفاده می‌‌شود. به عنوان مثال جدول کارمندان ممکن است ستونی به نام "موقعیت" داشته باشد که کلید جدول موقعیت را با هم تطبیق می‌‌دهد.

۳.4 پایگاه داده‌های چند بعدی
پایگاه داده‌های رابطه‌ای توانست به سرعت بازار را تسخیر کند، هرچند کارهایی نیز وجود داشت که این پایگاه داده‌ها نمی‌توانست به خوبی انجام دهد. به ویژه به کارگیری کلیدها در چند رکورد مرتبط به هم و در چند پایگاه داده مشترک، کندی سیستم را موجب می‌شد. برای نمونه برای یافتن نشانی کاربری با نام دیوید، سیستم رابطه‌ای باید نام وی را در جدول کاربر جستجو کند و کلید اصلی (primary key ) را بیابد و سپس در جدول نشانی‌ها، دنبال آن کلید بگردد. اگر چه این وضعیت از نظر کاربر، فقط یک عملیات محسوب، اما به جستجو درجداول نیازمند است که این کار پیچیده و زمان بر خواهد بود. راه کار این مشکل این است که پایگاه داده‌ها اطلاعات صریح درباره ارتباط بین داده‌ها را ذخیره نماید. می‌توان به جای یافتن نشانی دیوید با جستجو ی کلید در جدول نشانی، اشاره‌گر به داده‌ها را ذخیره نمود. در واقع، اگر رکورد اصلی، مالک داده باشد، در همان مکان فیزیکی ذخیره خواهد شد و از سوی دیگر سرعت دسترسی افزایش خواهد یافت.
چنین سیستمی را پایگاه داده‌های چند بعدی می‌نامند. این سیستم در هنگامی که از مجموعه داده‌های بزرگ استفاده می‌شود، بسیار سودمند خواهد بود. از آنجاییکه این سیستم برای مجموعه داده‌های بزرگ به کار می‌رود، هیچگاه در بازار به طور مستقیم عمومیت نخواهد یافت.

۳.5 پایگاه داده‌های شیء
اگر چه سیستم‌های چند بعدی نتوانستند بازار را تسخیر نمایند، اما به توسعه سیستم‌های شیء منجر شدند. این سیستم‌ها که مبتنی بر ساختار و مفاهیم سیستم‌های چند بعدی هستند، به کاربر امکان می‌دهند تا اشیاء را به طور مستقیم در پایگاه داده‌ها ذخیره نماید. بدین ترتیب ساختار برنامه نویسی شیء گرا (object oriented ) را می‌توان به طور مستقیم و بدون تبدیل نمودن به سایر فرمت‌ها، در پایگاه داده‌ها مورد استفاده قرار داد. این وضعیت به دلیل مفاهیم مالکیت (ownership) در سیستم چند بعدی، رخ می‌دهد. در برنامه شیء گرا (OO)، یک شیء خاص "مالک " سایر اشیاء در حافظه است، مثلا دیوید مالک نشانی خود می‌باشد. در صورتی که مفهوم مالکیت در پایگاه داده‌های رابطه‌ای وجود ندارد.


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


5- فهرست سیستم‌های متداول مدیریت دادگان
معروف‌ترین این نرم‌افزارهای مدیریت دادگان‌ها می‌توان به چند نمونه زیر اشاره کرد:

1.Oracle
2.Microsoft SQL Server
3.MySQL
4.PostregSQL
5.DB2
6.Microsoft Access
واژه دادگان از برابرنهاده‌های فرهنگستان زبان فارسی می‌باشد.

آموزش کامل نصب PHP بر روی Windows

مقدمات نصب PHP (مشترک در تمامی حالات) آخرین نسخهء PHP را از سایت رسمی PHP به آدرس http://www.php.net می گیریم. (توجه کنید که نسخهء installer را نگیرید.) فایل فشرده را باز کرده و در شاخهء دلخواه (در اینجا c:php) می ریزیم. به شاخهء c:php رفته و شاخه ای با نام tmp و شاخه ای با نام uptmp بسازید. (این نام ها اختیاری هستند) فایل php.ini-recommended که در شاخهء c:php وجود دارد را با notepade باز کرده، register_globals را پیدا کرده و مقدار جلوی آن را on کنید. سپس متغیر upload_tmp_dir را پیدا کرده و مقدار c:phpuptmp را در جلوی آن قرار دهید و متغیر session.save_path را نیز پیدا کرده و مقدار c:php mp را جلوی آن بنویسید. نصب PHP 4 روی IIS به صورت CGI فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر دهید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید. فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید. در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید: Executable : C:phpphp.exe Extension : .php سرور را دوباره راه اندازی کنید. نصب PHP 5 روی IIS به صورت CGI فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر دهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید. فایل libmysql.dll که در شاخهء c:php وجود دارد را در شاخهء ویندوز خود کپی کنید. فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید. در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید: Executable : C:phpphp-cgi.exe Extension : .php سرور را دوباره راه اندازی کنید. نصب PHP 4 روی IIS به صورت ISAPI فایل‌هاى c:phpphp4ts.dll و c:phpsapiphp4isapi.dll و c:phpdlls*.dll را در شاخه system ویندوز خود ذخیره کنید. فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر دهید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید. فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید. در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید: Executable : C:{WIN_DIR}systemphp4isapi.dll Extension : .php سپس به برگهء ISAPI رفته و مقادیر زیر را وارد کنید: Filter Name : php Executable : C:{WIN_DIR}systemphp4isapi.dll سرور را دوباره راه اندازی کنید. نصب PHP 5 روی IIS به صورت ISAPI فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر دهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و سپس متغیر cgi.force_redirect را پیدا کرده، ";" جلوی آن را حذف کنید و مقدار آن را برابر با صفر قرار دهید. فایل php.ini-recommended را به php.ini تغییر نام داده و در شاخهء ویندوز خود بریزید. فایل های php5isapi.dll و php5ts.dll که در شاخهء c:php وجود دارد را در شاخهء system ویندوز خود کپی کنید. فایل libmysql.dll که در شاخهء c:php وجود دارد را در شاخهء ویندوز خود کپی کنید. در IIS خود به برگهء Home Directory رفته و سپس روی دکمهء configuration کلیک کنید. در قسمت App Mapping مقادیر زیر را وارد کنید: Executable : C:{WIN_DIR}systemphp5isapi.dll Extension : .php سپس به برگهء ISAPI رفته و مقادیر زیر را وارد کنید: Filter Name : php Executable : C:{WIN_DIR}systemphp5isapi.dll سرور را دوباره راه اندازی کنید. نصب PHP 4 روی Apache به صورت CGI فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید. در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید. در بخشی که ScriptAlias ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم: ScriptAlias /php/ "c:/php/" به قسمت AddType application رفته و سطر زیر را می نویسیم: AddType application/x-httpd-php .php در بخش Action application هم این خط اضافه می ‌شود: Action application/x-httpd-php "/php/php.exe" در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد: DirectoryIndex index.html index.htm index.html.var index.php سرور را دوباره راه اندازی کنید. نصب PHP 5 روی Apache به صورت CGI فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر بدهید، سپس علامت ";" را از جلوی خط extension=php_mysql.dll بردارید و نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید. فایل libmysql.dll که در شاخهء c:php وجود دارد را در شاخهء ویندوز خود کپی کنید. در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید. در بخشی که ScriptAlias ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم: ScriptAlias /php/ "c:/php/" به قسمت AddType application رفته و سطر زیر را می نویسیم: AddType application/x-httpd-php .php در بخش Action application هم این خط اضافه می ‌شود: Action application/x-httpd-php "/php/php-cgi.exe" در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد: DirectoryIndex index.html index.htm index.html.var index.php سرور را دوباره راه اندازی کنید. نصب PHP 4 روی Apache2 به صورت Module فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpextensions تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید. فایل‌هاى c:phpphp4ts.dll و c:phpsapiphp4isapi.dll را در شاخه modules در شاخهء نصب Apache ذخیره کنید. در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید. در بخشی که LoadModule ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم: LoadModule php4_module modules/php4apache2.dll به قسمت AddType application رفته و سطر زیر را می نویسیم: AddType application/x-httpd-php .php در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد: DirectoryIndex index.html index.htm index.html.var index.php سرور را دوباره راه اندازی کنید. نصب PHP 5 روی Apache2 به صورت Module فایل php.ini-recommended را باز کرده، extension_dir را جستجو کنید و مقدار جلوی آن را به c:phpext تغییر بدهید و سپس نام فایل را به php.ini تغییر داده و به شاخهء نصب Apache منتقل کنید. فایل‌هاى c:phpphp5ts.dll و c:phpphp5isapi.dll را در شاخه modules در شاخهء نصب Apache ذخیره کنید. در شاخه ‌ای که Apache را نصب کرده‌اید، زیرشاخه‌ای به نام conf وجود دارد که در آن می‌ توانید فایل httpd.conf که مربوط به پیکربندی این برنامه است را بیابید. با یک notepad می‌ توانید این پرونده را باز کرده و تغییرات زیر را اعمال کنید. در بخشی که LoadModule ها معرفی شده‌اند، سطر زیر را وارد می‌کنیم: LoadModule php5_module modules/php5apache2.dll به قسمت AddType application رفته و سطر زیر را می نویسیم: AddType application/x-httpd-php .php در جلوی مقدار DirectoryIndex مقادیر دلخواه برای index شدن رو قرار می دهیم، خط شما چیزی مشابه زیر خواهد شد: DirectoryIndex index.html index.htm index.html.var index.php سرور را دوباره راه اندازی کنید.

7دلیل برای اینکه استفاده از PHP بهتر از Asp

مقدمه :

به دلیل سٶالات زیادی که در مورد این موضوع شده بود تصمیم گرفتم که کمی در مورد این موضوع تحقیق و نتیجه برای
استفاده همان در سایت IranPHP.net برای استفاده همگان قرار دهم . قبلا گفته باشم که اینها تنها برداشت های شخصی
من در این تحقیق می باشد و خوشحال می شوم که بقیه ایرادات من را در این تحقیق برایم ارسال کنند به دلیل اینکه من
تجربه کار با ASP را ندارم و همچنین بعضی اطلاعات من مربوط به ASP است و NET. را شامل نمی شود .

۱- سرعت ، سرعت ، سرعت
اولین باری که یک کد به زبان PHP نوشتم بر روی یک کامپیوتر Pentium 166Mhz بود بر روی سیستم عامل Linux و به
همراه Apache Web Server . بسیار برایم جالب بود که چقدر کد های من سریع اجرا می شوند . یعنی در آن موقع با
اگر شما یک Windows NT بر روی آن می توانستید سوار کنید و به فرض که IIS هم بر روی آن بالا می آمد فکر کنم
اصلا وقت Serve کردن صفحات عادی html را نداشت چه برسد به اینکه بخواهد ASP را هم اجرا کند . علتش این است
که Microsoft از یک Technology در اجرا کردن کدهای زبان ASP استفاده می کند که در آن هر موقع شما تصمیم به
استفاده از یک عنصر خارجی مانند VBScript, MSSQL, ODBC و خیلی چیزهای دیگر که در حقیقت از Engine های
خارجی استفاده می کنند دستور به آن Engine خارجی می دهد و جواب بدست آمده را بررسی و برای استفاده در اختیار
ادامه برنامه می گذارد . همین رفت و برگشت و اجرا کردن Engine های خارجی باعث کند شدن سرویس دهی می شود که
این را شما به خوبی می توانید در استفاده از MSSQL به طرق مختلف احساس کنید . مثلا اگر شما خود MSSQL Extentions
برای استفاده از MSSQL استفاده کنید برای یک Query مشترک ۱.۸۸ ثانیه زمان تلف می شود و اگر همان را با استفاده
از ODBC اجرا نماﺋید زمانی در حدود ۹.۵۴ ثانیه تلف می شود که این خود نشان می دهد که ASP اینها را به تنهاﺋی اجراء
نمی کند و از Engine های ویندوز استفاده می کند .


۲- استفاده بهینه از Memory
در IIS4 اگر شما در یک صفحه مثلا ۲۰ بار یک صفحه را Include کنید این صفحه ۲۰ بار در حافظه بارگذاری می شود و در
حقیقت حافظه شما ۲۰ برابر زیادتر اشغال می شود . البته شنیدم که این مشکل در ویندوز ۲۰۰۰ و IIS5 حل شده است
اما بازهم برای کسانی که ASP را مینویسند و می خواهند آنرا بر روی سرور های Hosting که دارای سیستم عامل NT
هستند اجرا کنند مشکل زا است و باعث کند شدن سیستم می شود و در Load بالا مسلما مشکل زا خواهد شد .
این مشکل به طور کلی در PHP وجود نداشته و ندارد و استفاده درست از Memory در هنگام اجرای یک کد باعث شده است
که صفحات در Load بالا نیز به خوبی قابل رٶیت باشند .


۳- خرج اضافی ندارید !
مثلا در ASP اگر بخواهید از امکاناتی نظیر Encryption یا File Uploading یا ارسال نامه توسط کد برنامه استفاده کنید
باید امکانات اضافی برای این کار خریداری کنید و نصب کنید تا این امکانات به IIS شما اضافه گردد . این در حالیست که
در PHP همه اینها در هنگام Compile در نظر گرفته می شوند و همگی از امکانات Standard این زبان هستند و هیچ نصب
یا خرج اضافی در کار نیست .

۴- MySQL بهترین انتخاب، بیشترین سرعت
در اینجا قصد ندارد به مقایسه MySQL و MSSQL بپردازم . اما به خاطر قدرت خارق العاده MySQL و سازگار بودن این
DBMS با زبان PHP به صورتیکه PHP اتصال به MySQL را به صورت دستورات Internally پشتیبانی می کند و حتی نیاز
به نصب Module اضافی برای این کار نمی باشد ، از سرعت بسیار بالاﺋی در کار با SQL برخوردار است که شاید بعدا در
مورد MySQL مقاله ای نوشتم .

۵- نزدیک بودن Syntax به ++C/C و Java
از آنجاﺋیکه اکثر برنامه نویسان از ++C/C استفاده کرده اند و بخاطر محبوب بودن بی حد Java معمولا با Syntax های
این دو زبان اکثرا آشنا هستند . PHP هم اکثر Syntax های خود را شبیه به این زبانها انتخاب کرده است که برای یادگیری
دوباره Syntax دستورات دچار مشکل نشوید که مسلما Microsoft اصلا برایش این مساﺋل مشکل حساب نمی شود .

۶- رفع ایرادات ، سریع ، بی دردسر
تا حالا از Microsoft خواسته اید که ایرادی را در سیستمهای خود رفع کند ؟ مسلما اگر شرکت بزرگی مانند Boeing
نباشید حرف شما خیلی خریدار ندارد یا لااقل به این زودی ها به نتیجه نمی رسید .
OpenSource بودن PHP این امکان را به شما می دهد که شخصا اقدام به رفع مشکل کنید و آنرا برای دستندرکاران PHP
ارسال کنید و یا اینکه در Mailing List های عمومی PHP موضوع را مطرح کنید و خواهید دید که از سراسر دنیا برای
رفع ایراد شما Patch ارسال می گردد .


۷- اجرا بر روی Platform های مختلف
درست است که خیلی از این ایرادات را Microsoft رفع خواهد کرد و Technology های جدیدتر اراﺋه خواهد کرد ( چه
بسا این Net. که الان آمده همه را درست کرده باشد ) اما یک مشکل اساسی برای ASP وجود دارد و آن این است که
ASP بدون Windows یعنی هیچ ! بدلیل اینکه ASP نصفی از کدها را توسط Engine های ویندوز اجرا می کند که در
سیستم عامل های دیگر خبری از آنها نیست . لذا ASP در سیستم عاملهای دیگر همیشه دارای ضعفهای بزرگی است .
اما PHP به دلیل آنکه توسط GNU C Compiler در همه Platform ها قابل Compile شدن است و از Engine های خاص
هیچ سیستم عاملی برای اجرای کدها استفاده نمی کند قابلیت اجرا بر روی تعدا زیادی از OS ها را داراست که این یک
مزیت برای برنامه نویس ها محسوب می شود

کار با رجیستری در ویژوال بیسیک 6.0

رجیستری چیست ؟

سیستم عامل ویندوز تنظیمات سخت افزاری و نرم افزاری خود را بطور مرکزی در یک بانک اطلاعاتی با ساختار سلسله مراتبی ذخیره می کند که رجیستری نام دارد . رجیستری جایگزینی برای بسیاری از فایلهای پیکربندی INI ، SYS و COM است که در نسخه های اولیه ویندوز موجود بود . رجیستری ، سیستم عامل را با مهیا کردن اطلاعات موردنیز برای اجرای برنامه ها و load شدن component ها ، کنترل می کند .

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

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

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

اجزای رجیستری

اجزای تشکیل دهنده رجیستری عبارتند از :

1 – subtree : Subtree ها همانند folder های موجود در ریشه یک درایو هارد هستند . رجستری ویندوز دارای پنج subtree می باشد :
- HKEY_LOCAL_MACHINE : شامل تمام داده های پیکربندی برای کامپیوتر می باشد و شامل 5 key است :Hardware ، SAM ، Security ، Software و System
- HKEY_USERS : شامل داده های مربوط به تنظیمات سیستم عامل برای هر user است مثل تنظیمات desktop و محیط ویندوز
- HKEY_CURRENT_USER : شامل داده های کاربر فعلی سیستم
- HKEY_CLASSES_ROOT : شامل اطلاعات پیکربندی نرم افزار است مثل داده های OLE و داده های کلاسهای متناظر با فایل
- HKEY_CURRENT_CONFIG : شامل اطلاعات مورد نیاز برای تنظیمات داریورهای سخت افزاری و غیره
2 – Key : key ها همانند folder ها و subfolder های روی هارد هستند . هر key متناظر با object های نرم افزاری یا سخت افزاری می باشد . subkey ها key هایی هستند که درون یکسری key قراردارند .

3 – Entry : هر key دارای یک یا چند entry است . هر entry دارای سه بخش می باشد :
- نام Name
- نوع داده ای Data Type : مقدار هر entry یکی از انواع داده های زیر است :

 

REG_DWORD ، REG_SZ ، REG_EXPAND_SZ ، REG_BINARY ،
REG_MULTI_SZ ، REG_FULL_RESOURCE_DESCRIPTOT

- مقدار Value


نکته 1 : برای مشاهده رجیستری و اعمال تغییرات در آن ( لطفاً اگر هیچ تجربه ای در تنظیم کردن رجیستری ندارید اطلاعات آنرا تغییر ندهید ) ، می توانید از برنامه regedit.exe و یا regedt32.exe موجود در ویندوز استفاده کنید . برای اینکار کافیست نام برنامه را در کادر Run وارد کنید .

برای کار با رجیستری در ویژوال بیسیک کلاس Registery.bas را مطابق مطالب زیر ایجاد کرده و در پروژه های خود از آن استفاده کنید :

1 - تعریف ثابتهای مورد نیاز : برای نوشتن این کلاس نیاز به تعریف چهار دسته ثابت داریم :

- ثابتهای مربوط به تعریف data type های entry های رجیستری :

Global Const REG_SZ As Long = 1
Global Const REG_DWORD As Long = 4


- ثابتهای مربوط به تعریف key های رجیستری

Global Const HKEY_CLASSES_ROOT = &H80000000
Global Const HKEY_CURRENT_USER = &H80000001
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const HKEY_USERS = &H80000003


- ثابتهای مربوط به خطاهای کار با رجیستری

 

Global Const ERROR_NONE = 0

Global Const ERROR_BADDB = 1
Global Const ERROR_BADKEY = 2
Global Const ERROR_CANTOPEN = 3
Global Const ERROR_CANTREAD = 4
Global Const ERROR_CANTWRITE = 5
Global Const ERROR_OUTOFMEMORY = 6
Global Const ERROR_INVALID_PARAMETER = 7
Global Const ERROR_ACCESS_DENIED = 8
Global Const ERROR_INVALID_PARAMETERS = 87
Global Const ERROR_NO_MORE_ITEMS = 259

 
- ثابتهای متفرقه
 

Global Const KEY_ALL_ACCESS = &H3F
Global Const REG_OPTION_NON_VOLATILE = 0

 
2 - Declare کردن Api های مورد نیاز : برای کار با رجیستری از توابع کتابخانه Advapi32.dll استفاده می کنیم . این توابع عبارتند از :


- تابع RegCloseKey : آزاد کردن handle مربوط به یک key
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
- تابع RegCreateKeyEx : ساخت یک key در رجیستری ( اگر key قبلاً وجود داشته باشد ، این تابع آنرا باز می کند ) :

 

Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long


- تابع RegOpenKeyEx : باز کردن یک key

 

Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long


- تابع RegQueryValueExLong : استخراج type و data ی یک نام متناظر با یک key باز شده

 

Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long


- تابع RegSetValueEx : ذخیره یک مقدار در فیلد value یک کلید باز

 

Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long


- تابع RegDeleteKey : پاک کردن یک کلید و کلیه اطلاعات مرتبط با آن

 

Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)


- تابع RegDeleteValue : حذف مقدار یک key

Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)


3 - توابع کمکی : برای نوشتن توابع اصلی کار با رجیستری نیاز به نوشتن توابع کمکی زیر است :
- تابع SetValueEx : با توجه به نوع داده یک کلید ، مقدار موجود در آنرا در یک متغیر ذخیره می کند :

 

Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
Case REG_SZ ' type of value is string
sValue = vValue
SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))x
Case REG_DWORD ' type of value is Double word
lValue = vValue
SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)x
End Select
End Function


- تابع QueryValueEx : سایز و نوع داده ای یک داده را که باید خوانده شود مشخص می کند .

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)x
Select Case lType
' For strings
Case REG_SZ:
sValue = String(cch, 0)x
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)x
If lrc = ERROR_NONE Then
vValue = Left$(sValue, cch)x
Else
vValue = Empty
End If
' For DWORDS
Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)x
If lrc = ERROR_NONE Then vValue = lValue
Case Else
'all other data types not supported
lrc = -1
End Select
QueryValueExExit:
QueryValueEx = lrc
Exit Function
QueryValueExError:
Resume QueryValueExExit
End Function


4 - توابع اصلی : توابع مربوط به پاک کردن یک کلید از رجیستری ، ساخت یک کلید جدید در رجیستری و مقداردهی به یک کلید :

- تابع DeleteKey : این تابع یک کلید از رجیستری را حذف می کند . دارای دو پارامتر ورودی است :
Location که یکی از مقادیر HKEY_CLASSES_ROOT ، HKEY_CURRENT_USER
، HKEY_LOCAL_MACHINE و یا HKEY_USERS است .
KeyName که نام کلیدی است که باید از رجیستری حذف شود . این کلید ممکنست شامل subkey هایی نیز باشد مثلاً Key1SubKey1

Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)x
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)x
DeleteKey = lRetVal ' return function value

End Function

 
- تابع DeleteValue : این تابع یک entry را از کلید حذف می کند . دارای سه پارامتر ورودی است : Location ، KeyName و ValueName که نام آن value را مشخص می کند .
 

Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = RegDeleteValue(hKey, sValueName)x
RegCloseKey (hKey)x
DeleteValue = lRetVal
End Function

 
- تابع CreateNewKey : این تابع یک کلید جدید ایجاد می کند . دارای دو پارامتر ورودی است : Location و KeyName

Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)x
Dim hNewKey As Long
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey, lRetVal)x
RegCloseKey (hNewKey)x
CreateNewKey = lRetVal
End Function

 
- تابع SetKeyValue : این تابع پارامتر data یک entry را تنظیم می کند . دارای 5 پارامتر ورودی است : Location ، KeyName ، ValueName ، ValueSetting و ValueType

Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)x
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)x
RegCloseKey (hKey)x
SetKeyValue = lRetVal
End Function

 
- تابع QueryValue : این تابع فیلد داده یک entry را برمی گرداند . دارای سه پارامتر ورودی است : Location ، KeyName و ValueName

Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)x
Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)x
lRetVal = QueryValueEx(hKey, sValueName, vValue)x
QueryValue = vValue
RegCloseKey (hKey)x
End Function


ساخت یک انتصاب فایل یا File Association به یک برنامه

در این درس می خواهم با استفاده از کلاسی که در درس قبل معرفی شد تابعی بسازیم که توسط آن بتوانیم فایلهای با پسوندی مشخص را به یک برنامه اختصاص دهیم . بعبارت دیگر تابعی بنویسیم که اطلاعات لازم برای باز شدن فایلهایی با پسوند xxx را توسط برنامه MyApp.exe در رجیستری ثبت کند .

 

Public Sub CreateAssociation(sExtension As String, sApplication As String, sAppPath As String)x
Dim sPath, sAppExe As String
CreateNewKey "." & sExtension, HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, "." & sExtension, "", sApplication & ".Document", REG_SZ
CreateNewKey sApplication & ".Documentshellopencommand", HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, sApplication & ".Document", "", sApplication & " Document", REG_SZ
sPath = sAppPath & " %1"x
sAppExe = sApplication & ".exe"x
SetKeyValue HKEY_CLASSES_ROOT, sApplication& ".Documentshellopencommand", "", sPath, REG_SZ
CreateNewKey "SoftwareMicrosoftWindowsCurrentVersionExplorerFileExts." & sExtension, HKEY_CURRENT_USER
SetKeyValue HKEY_CURRENT_USER, "SoftwareMicrosoftWindowsCurrentVersionExplorerFileExts." & sExtension, "Application", sAppExe, REG_SZ
CreateNewKey "Applications" & sAppExe & "shellopencommand", HKEY_CLASSES_ROOT
SetKeyValue HKEY_CLASSES_ROOT, "Applications" & sAppExe & "shellopencommand", "", sPath, REG_SZ
End Sub

 
کاربرد این تابع بصورت زیر است :

 

CreateAssociation("xxx","MyApp","c:MyApp.exe")x


اجرا شدن یک برنامه در هنگام راه اندازی سیستم
فرض کنید می خواهیم برنامه ای بنویسیم که هر بار در هنگام راه اندازی سیستم بطور خودکار اجرا شود. البته نمی خواهم در startup ویندوز دیده شود .
برای این کار باید برنامه موردنظر را در StartUp رجیستری قرار دهیم . به این ترتیب که در یکی از کلیدهای زیر یک مقدار رشته ای جدید(String Value) ایجاد کنیم و آدرس برنامه را در آن وارد کنیم :

 

HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRun
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun

 
برای مثال اگه اسم برنامه مورد نظر MyApp و مسیرش C:WindowsMyApp.exe است باید بصورت زیر عمل کرد :

 

SetKeyValue HKEY_LOCAL_MACHINE, "SOFTWAREMicrosoftWindowsCurrentVersionRun", "MyApp", "C:MyApp.exe", REG_SZ

 
نکته : البته دو تا راه دیگر برای اینکار وجود دارد که برخی تروجان ها هم از این روشها استفاده می کنند تا روی سیستم باقی بمانند :
یکی استفاده از win.ini و نوشتن نام فایل جلوی = run و دیگری استفاده از system.ini و نوشتن نام برنامه جلوی خط explorer.exe .

برنامه نویسی ماوس در Turbo C

با توجه به این که برنامه های تحت داس رابط ضعیفی نسبت به ویندوز و لینوکس و... دارند ما حداقل باید برنامه هایمان را به ماوس مجهز کنیم تا این نقص تا حدودی برطرف شود. مخصوصا اگر بخواهیم یک برنامه گرافیکی بنویسیم برنامه مان بدون ماوس غیر قابل استفاده خواهد بود. خب بهتره بریم سر اصل مطلب. در این مقاله فعال کردن ماوس در زبان C توضیح داده شده. البته ما ماوس را با استفاده از وقفه ها که در تمام کامپیوترهای IBM یکی هستند فعال می کنیم و کدهای ارائه شده با کمی تغییر در پاسکال و بیسیک نیز کار خواهند کرد. اگر شما با زبان C آشنایی ندارید ممکن است این کدها برایتان ناآشنا باشند. پس بهتر است از خواندن این مقاله صرفنظر کنید. البته ممکن است به زودی آموزش C و ++C را نیز در این سایت بگذاریم. ابتدا برای این که از ماوس استفاده کنیم باید بفهمیم که درایور ماوس نصب شده یا نه؟ اگر نصب نشده باشد نمی توان ماوس را فعال کرد. برای این کار از تابع شماره 00hex از وقفه 33hex استفاده می کنیم. اگر قبلا با وقفه ها کار کرده باشید حتما می دانید که شماره تابع وقفه در ثبات AH قرار می گیرد ولی توابع 33hex به جای AH از AX استفاده می کنند. یعنی برای فراخوانی این وقفه شماره تابع آن را در ثبات AX قرار می دهیم. پس از فراخوانی این وقفه اگر مقدار ثبات AX برابر 0000hex باشد یعنی درایور ماوس نصب نشده و ما نمیتوانیم از ماوس استفاده کنیم. پس از این کار باید نشانگر ماوس را د ر صفحه ظاهر کنیم. نشانگر ماوس دقیقا در وسط صفحه ظاهر خواهد شد. اگر در حالت متنی باشیم این نشانگر به صورت یک مستطیل و اگر در حالت گرافیکی باشیم نشانگر به صورت یک فلش کوچک نشان داده خواهد شد. برای ظاهر کردن کافی است از تابع شماره 01 وقفه 33h استفاده کنیم. برنامه زیر هم درایور ماوس را تشخیص داده و هم آن را در حالت متنی نشان میدهد:

#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main()
{ union REGS r;
clrscr();
r.x.ax= 0;
int86(0x33,&r,&r);
if(r.x.ax==0)
{
printf("No Mouse Available.....");
getch();
exit(1);
}
r.x.ax=1;//place 01 in AX register
int86(0x33,&r,&r);//showing the mouse pointer
printf(“press any key to exit…”);
getch();
}

تابع مفید دیگری برای کار با ماوس تابع 02 از وقفه 33hex میباشد. این تابع نشانگر ماوس را پنهان می کند. فرض کنید می خواهید مانند برنامه Paint وقتی ماوس را میکشید یک خط هم با آن کشیده شود. در این حالت اگر نشانگر ماوس دیده شود بعضی از نقاط خط پاک خواهند شد و بهتر است که در این مواقع نشانگر را پنهان کنیم. بعدا مثال کاملتری برایتان خواهم نوشت. برای کار با ماوس ما باید بدانیم که نشانگر اکنون د رکجای صفحه می باشد یعنی مختصات (x,y) آن را بدست آوریم. برای این کار از تابع شماره 03 استفاده می کنیم. که پس از فراخوانی تابع ثبات CX حاوی مختصات افقی(x) و DX حاوی مختصات عمودی نشانگر خواهد بود. کار مهم دیگر تشخیص کلیدهای فشرده شده ماوس است. تابع 03 همچنین تعیین می کند که کدام کلید از ماوس فشرده شده است. این کلیدها را ثبات BX تعیین میکند. فقط همین کافی است که بدانید پس از فراخوانی وقفه اگر BX برابر با 00000001)Hex (باشد کلید چپ ماوس فشار داده شده است. راجع به فشار دادن کلیدهای دیگر اگر علاقه مند بودید به من ایمیل بزنید تا نحوه تشخیص آنها را هم بنویسم. مثال زیر نحوه کار را مشخص می کند:< /P>< /P>

#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main() {
union REGS i,o;
clrscr();
i.x.ax=0;
int86(0x33,&i,&o);
if(o.x.ax==0) {
printf("No Mouse Available...");
exit(1);
}
i.x.ax=1;
int86(0x33,&i,&o);
gotoxy(25,23);
printf("Press any key to exit...");
while(!kbhit())
{
i.x.ax=3;
int86(0x33,&i,&o);
gotoxy(2,2);
printf("x->co-ordinate=(%d) y->co-ordinate=(%d) ",o.x.cx,o.x.dx);
if(o.x.bx==0x01) printf(“Right button of mouse pressed.”); }
i.x.ax=2; int86(0x33,&i,&o);
}

برای پایان کار می خواهیم یک برنامه که ابزار pencil برنامه های گرافیکی را شبیه سازی می کند بنویسیم. برای این کار ما ابتداصفحه را درحالت گرافیکی قرار می دهیم برای این کهبرنامه زیر کار کند در دستور initgraph(&gd,&gm,""); در داخل کوتیشن مسیرفایلهای .bgi را بنویسید.

#include <CONIO.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <GRAPHICS.H>
#include <DOS.H>
union REGS i,o;
main() {
int show_mouse();
int hide_mouse();
int get_mouse_pos(int *,int *,int *);
int gd=DETECT,gm,button,x1,y1,x2,y2;
initgraph(&gd,&gm,"");
i.x.ax=0; int86(0x33,&i,&o);
if(o.x.ax==0)
{ printf("No Mouse is available..");
exit(1);
restorecrtmode();
}
outtextxy(230,400,"Press any key to exit....");
while(!kbhit())
{
show_mouse(); get_mouse_pos(&x1,&y1,&button);
x2=x1;
y2=y1;
while(button==1) {
hide_mouse();
line(x1,y1,x2,y2);
x1=x2;
y1=y2;
get_mouse_pos(&x2,&y2,&button); }
}
restorecrtmode();
} show_mouse()
{
i.x.ax=1; int86(0x33,&i,&o);
}
hide_mouse()
{
i.x.ax=2; int86(0x33,&i,&o);
}
get_mouse_pos(int *x,int *y,int *button)
{
i.x.ax=3;
int86(0x33,&i,&o);
*x=o.x.cx;
*y=o.x.dx; *button=o.x.bx&1;
}

 لطفا اگر علاقه مند بودید که بیشتر راجع به ماوس بدانید و یا اگر سوالی داشتید با من تماس بگیرید.

برنامه نویسی ماوس در Turbo C

با توجه به این که برنامه های تحت داس رابط ضعیفی نسبت به ویندوز و لینوکس و... دارند ما حداقل باید برنامه هایمان را به ماوس مجهز کنیم تا این نقص تا حدودی برطرف شود. مخصوصا اگر بخواهیم یک برنامه گرافیکی بنویسیم برنامه مان بدون ماوس غیر قابل استفاده خواهد بود. خب بهتره بریم سر اصل مطلب. در این مقاله فعال کردن ماوس در زبان C توضیح داده شده. البته ما ماوس را با استفاده از وقفه ها که در تمام کامپیوترهای IBM یکی هستند فعال می کنیم و کدهای ارائه شده با کمی تغییر در پاسکال و بیسیک نیز کار خواهند کرد. اگر شما با زبان C آشنایی ندارید ممکن است این کدها برایتان ناآشنا باشند. پس بهتر است از خواندن این مقاله صرفنظر کنید. البته ممکن است به زودی آموزش C و ++C را نیز در این سایت بگذاریم. ابتدا برای این که از ماوس استفاده کنیم باید بفهمیم که درایور ماوس نصب شده یا نه؟ اگر نصب نشده باشد نمی توان ماوس را فعال کرد. برای این کار از تابع شماره 00hex از وقفه 33hex استفاده می کنیم. اگر قبلا با وقفه ها کار کرده باشید حتما می دانید که شماره تابع وقفه در ثبات AH قرار می گیرد ولی توابع 33hex به جای AH از AX استفاده می کنند. یعنی برای فراخوانی این وقفه شماره تابع آن را در ثبات AX قرار می دهیم. پس از فراخوانی این وقفه اگر مقدار ثبات AX برابر 0000hex باشد یعنی درایور ماوس نصب نشده و ما نمیتوانیم از ماوس استفاده کنیم. پس از این کار باید نشانگر ماوس را د ر صفحه ظاهر کنیم. نشانگر ماوس دقیقا در وسط صفحه ظاهر خواهد شد. اگر در حالت متنی باشیم این نشانگر به صورت یک مستطیل و اگر در حالت گرافیکی باشیم نشانگر به صورت یک فلش کوچک نشان داده خواهد شد. برای ظاهر کردن کافی است از تابع شماره 01 وقفه 33h استفاده کنیم. برنامه زیر هم درایور ماوس را تشخیص داده و هم آن را در حالت متنی نشان میدهد:

#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main()
{ union REGS r;
clrscr();
r.x.ax= 0;
int86(0x33,&r,&r);
if(r.x.ax==0)
{
printf("No Mouse Available.....");
getch();
exit(1);
}
r.x.ax=1;//place 01 in AX register
int86(0x33,&r,&r);//showing the mouse pointer
printf(“press any key to exit…”);
getch();
}

تابع مفید دیگری برای کار با ماوس تابع 02 از وقفه 33hex میباشد. این تابع نشانگر ماوس را پنهان می کند. فرض کنید می خواهید مانند برنامه Paint وقتی ماوس را میکشید یک خط هم با آن کشیده شود. در این حالت اگر نشانگر ماوس دیده شود بعضی از نقاط خط پاک خواهند شد و بهتر است که در این مواقع نشانگر را پنهان کنیم. بعدا مثال کاملتری برایتان خواهم نوشت. برای کار با ماوس ما باید بدانیم که نشانگر اکنون د رکجای صفحه می باشد یعنی مختصات (x,y) آن را بدست آوریم. برای این کار از تابع شماره 03 استفاده می کنیم. که پس از فراخوانی تابع ثبات CX حاوی مختصات افقی(x) و DX حاوی مختصات عمودی نشانگر خواهد بود. کار مهم دیگر تشخیص کلیدهای فشرده شده ماوس است. تابع 03 همچنین تعیین می کند که کدام کلید از ماوس فشرده شده است. این کلیدها را ثبات BX تعیین میکند. فقط همین کافی است که بدانید پس از فراخوانی وقفه اگر BX برابر با 00000001)Hex (باشد کلید چپ ماوس فشار داده شده است. راجع به فشار دادن کلیدهای دیگر اگر علاقه مند بودید به من ایمیل بزنید تا نحوه تشخیص آنها را هم بنویسم. مثال زیر نحوه کار را مشخص می کند:< /P>< /P>

#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main() {
union REGS i,o;
clrscr();
i.x.ax=0;
int86(0x33,&i,&o);
if(o.x.ax==0) {
printf("No Mouse Available...");
exit(1);
}
i.x.ax=1;
int86(0x33,&i,&o);
gotoxy(25,23);
printf("Press any key to exit...");
while(!kbhit())
{
i.x.ax=3;
int86(0x33,&i,&o);
gotoxy(2,2);
printf("x->co-ordinate=(%d) y->co-ordinate=(%d) ",o.x.cx,o.x.dx);
if(o.x.bx==0x01) printf(“Right button of mouse pressed.”); }
i.x.ax=2; int86(0x33,&i,&o);
}

برای پایان کار می خواهیم یک برنامه که ابزار pencil برنامه های گرافیکی را شبیه سازی می کند بنویسیم. برای این کار ما ابتداصفحه را درحالت گرافیکی قرار می دهیم برای این کهبرنامه زیر کار کند در دستور initgraph(&gd,&gm,""); در داخل کوتیشن مسیرفایلهای .bgi را بنویسید.

#include <CONIO.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <GRAPHICS.H>
#include <DOS.H>
union REGS i,o;
main() {
int show_mouse();
int hide_mouse();
int get_mouse_pos(int *,int *,int *);
int gd=DETECT,gm,button,x1,y1,x2,y2;
initgraph(&gd,&gm,"");
i.x.ax=0; int86(0x33,&i,&o);
if(o.x.ax==0)
{ printf("No Mouse is available..");
exit(1);
restorecrtmode();
}
outtextxy(230,400,"Press any key to exit....");
while(!kbhit())
{
show_mouse(); get_mouse_pos(&x1,&y1,&button);
x2=x1;
y2=y1;
while(button==1) {
hide_mouse();
line(x1,y1,x2,y2);
x1=x2;
y1=y2;
get_mouse_pos(&x2,&y2,&button); }
}
restorecrtmode();
} show_mouse()
{
i.x.ax=1; int86(0x33,&i,&o);
}
hide_mouse()
{
i.x.ax=2; int86(0x33,&i,&o);
}
get_mouse_pos(int *x,int *y,int *button)
{
i.x.ax=3;
int86(0x33,&i,&o);
*x=o.x.cx;
*y=o.x.dx; *button=o.x.bx&1;
}

 لطفا اگر علاقه مند بودید که بیشتر راجع به ماوس بدانید و یا اگر سوالی داشتید با من تماس بگیرید.

ADO / ADO.net

ارتباط به منابع داده در ADO.NET
 
بمنظوراتصال به یک منبع داده ، می بایست در ابتدا یک Net Data Provider . ، انتخاب گردد . Data Provider ، کلاس های لازم بمنظور اتصال به یک منبع داده ، خواندن اطلاعات ، ویرایش ، بهنگام سازی و انجام عملیات متفاوت بر روی داده ها را ارائه می نماید . در این مقاله به تشریح انواع Data Provider پرداخته و با نحوه انتخاب مناسب آنان بمنظور استفاده در برنامه ها ، آشنا خواهیم شد .

NET Data Provider . چیست؟
NET Data Provider .، یک Component کلیدی ارائه شده بهمراه معماری ADO.NET بوده که امکان ارتباط بین یک منبع داده و یک Component ، یک سرویس وب XML و یا یک برنامه را فراهم می نماید. یک NET Data Provider .، امکان اتصال به منبع داده ، بازیابی داده ها ، انجام عملیات بر روی داده ها و بهنگام سازی منبع داده را فراهم می نماید. بهمراه فریمورک دات نت ، Provider های زیر ارائه شده است :

SQL Server .NET Data Provider

OLE DB .NET Data Provider

در آینده برای سایر منابع داده ، NET Data Provider . مربوطه ایجاد و در دسترس عموم برنامه نویسان قرار خواهد گرفت. هر Provider ، مسئولیت پیاده سازی کلاس های عمومی ADO.NET را برعهده خواهد داشت . دستاورد رویکرد فوق ، ارتباط با منابع داده متفاوت با استفاده از یک روش یکسان از طریق محیط های برنامه نویسی خواهد بود .

کلاس های NET Data Provider .
ADO.NET ، از NET Data Provider . ، بمنظور ارتباط به منبع داده ، بازیابی ، عملیات برروی داده ها و بهنگام سازی منبع داده استفاده می نماید . هر Provider ، بگونه ای طراحی می گردد که دارای حجم اندکی بوده و یک لایه حداقل بین کد های نوشته شده و منبع داده را ایجاد نمایند . ( افزایش کارائی بدون قربانی نمودن پتانسیل ها !)

فریمورک دات نت ، دارای دو Data Provider است :

SQL Server .NET . امکان دستیابی بهینه به SQL Server 2000 و بانک های اطلاعاتی SQL Server 7.0 را فراهم می نماید. بدین منظور می بایست از namespace با نام System.Data.Sqlclient بهمراه برنامه ها، استفاده گردد . Provider فوق، نسبت به OLE DB .NET Data Provider ، دارای کارآئی بمراتب بیشتری است (برای ارتباط با منبع داده از لایه های اضافه دیگر نظیر: OLE DB و یا ODBC استفاده نمی گردد ).

OLE DB .NET . امکان دستیابی به SQL Server 6.5 و یا نسخه های قبل از آن ، بانک های اطلاعاتی نظیر اوراکل ، Sybase ، DB2/400 و اکسس ماکروسافت را فراهم می نماید . بمنظور استفاده از Provider فوق ، می بایست از namespace با نام System.Data.OleDb بهمراه برنامه ها ، استفاده گردد .

علاوه بر موارد فوق ، ماکروسافت در صدد ارائه یک ODBC .NET Data Provider برای دستیابی به سایر منابع داده است .
ADO.NET ، از یک مدل شی گراء در رابطه با NET Data Providers . استفاده می نماید . در SQL Server .NET Data Provider ، اسامی کلاس ها با پیشوند Sql آغاز می گردد . مثلا" کلاس Connection ، SqlConnection نامیده می شود. در OLE DB .NET Data Provider ، اسامی کلاس ها با پیشوند OleDb ، آغاز می گردد . مثلا" کلاس Connection دارای نام OleDbConnection ، می باشد. چهار کلاس اساسی زیر، سهم عمده ای در شکل دهی یک NET Data Provider . را برعهده دارند .

XxxConnection . کلاس فوق ، بمنظور ایجاد یک Connection به یک منبع داده خاص استفاده می گردد . مثلا" کلاس SqlConnection ، باعث اتصال به منابع داده SQL Server ، می گردد .

XxxCommand . کلاس فوق ، بمنظور اجرای یک دستور از طریق یک منبع داده ، استفاده می گردد . مثلا" کلاس SqlCommand ، امکان اجرای Stored Procedure و عبارات SQL در رابطه با یک منبع داده SQL Server ، را فراهم می نماید .

XxxDataReader . از کلاس فوق ، بمنظور خواندن اطلاعات از یک منبع داده بصورت فقط خواندنی و Forward-only ، استفاده می گردد . مثلا" کلاس SqlDataReader ، امکان خواندن سطرهائی از جداول در رابطه با یک منبع داده SQL Server را فراهم می نماید . کلاس فوق، بعنوان خروجی متد ExecuteReader از کلاس XxxCommand ، برگردانده می شود. ( اغلب بعنوان ماحصل اجرای یک عبارت SELECT SQL )

XxxDataAdapter . کلاس فوق ، از اشیاء XxxCommand استفاده تا یک DataSet را حاوی داده های مورد نظر نماید. در این راستا ، امکان بهنگام سازی اطلاعات نیز فراهم می گردد . مثلا" کلاس SqlDataAdapter ، امکان مدیریت ارتباط بین یک Dataset و داده های ذیربط در یک منبع داده SQL Server را فراهم می نماید.

نحوه انتخاب یک Data Provider
انتخاب یک NET Data Provider . مناسب برای یک برنامه، بستگی به نوع منبع داده ئی دارد که قصد ارتباط با آن وجود دارد.

نحوه مراجعه به یک NET Data Provider .
با استفاده از Solution Explorer در ویژوال استودیو دات نت ، می توان مدیریت مراجعات به اسمبلی هائی که مسئولیت NET Data Provider . را بر عهده دارند ، انجام داد . اسمبلی System.Data.dll ( بصورت فیزیکی یک فایل DLL است ) مسئولیت پیاده سازی SQL Server .NET Data Provider و OLE DB .NET Data Provider را از طریق Namespace های System.Data.SqlClient و System.Data.OleDb ، بر عهده داشته و اسمبلی System.Data.Odbc.dll چنین رسالتی را در رابطه با ODBC .NET Data Provider ، انجام خواهد داد . اسمبلی فوق ، در زمان نصب ویژوال استودیو دات نت ، نصب نخواهد شد . برای دریافت اسمبلی فوق ، می توان از طریق آدرس : http://msdn.microsoft.com/download ، اقدام و پس از کلیک نمودن بر روی NET Framework .، گزینه ODBC .NET Data Provider را انتخاب کرد . بدین ترتیب، زمینه دریافت فایل فوق فراهم می گردد . پس از دریافت اسمبلی فوق ، می توان بصورت دستی (Manaually) در یک پروژه به آن مراجعه و از ODBC .NET Data Provider فوق ، استفاده کرد .

SQL Server .NET Data Provider
Provider فوق ، لایه ای نازک بین یک برنامه و SQL Server ایجاد می نماید. با توجه به اینکه این Provider ، از پروتکل اختصاصی خود ( TDS: Tabular Data Stream ) بمنظور ارتباط با یک سرویس دهنده SQL استفاده می نماید ، حجم آن اندک و دستیابی به سرویس دهنده SQL مستقیما" و بدون استفاده از لایه های اضافه دیگر ، انجام می گیرد . بدین ترتیب کارائی و قابلیت توسعه سیستم ، بهبود پیدا خواهد کرد .

OLE DB .NET Data Provider
Provider فوق ، بمنظور اتصال به یک منبع داده از OLE DB و COM بصورت ذاتی استفاده می نماید . بنابراین می بایست از یک OLE DB Provider استفاده گردد که خود از OLE DB .NET Data Provider استفاده می نماید . بمنظور استفاده از OLE DB .NET Data Provider ، می بایست نوع Provider بصورت یک رشته ، مشخص گردد . واژه Provider در رشته فوق بیانگر نوع OLE DB منبع داده ئی است که به آن متصل می گردیم .
مثلا" "Provider = MSDAORA" ، شما را به یک بانک اطلاعاتی اوراکل متصل می نماید . در زمانیکه از SQL Server .NET Data Provider ، استفاده می شود ، نیازی به استفاده از واژه Provider نخواهد بود ( فرض می شود که SQL Server 7.0 و یا قبل از آن باشد) . جدول زیر نمونه هائی در این زمینه را نشان می دهد :

مثال
منبع داده

Provider = SQLOLEDB;Data Source = Tehran ;Initial
Catalog = pubs;User ID = sa ; Password = 999; SQL Server 6.5

Provider = MSDAORA ; Data Source = ORACLE817 ; User
ID = OLEDB ; Password = OLEDB ; Oracle server

Provider = Microsoft.Jet.OLEDB.4.0;
Data Source = C:MydbFirstdb.mdb ;
Microsoft Access database


ODBC .NET Data Provider
Provider فوق ، بمنظور اتصال به یک منبع داده از توابع API مربوط به ODBC بصورت ذاتی استفاده می نماید. این Provider ، بصورت یک اسمبلی مجزاء و با نام System.Data.Odbc.dll ، پیاده سازی شده و بصورت پیش فرض در تمپلیت های پروژه در ویژوال استودیو دات نت ، انتخاب نشده و می بایست بصورت دستی به آن مراجعه گردد .

مثال
Provider/Driver
منبع داده

Driver ={Microsoft ODBC for Oracle };
Server = ORACLE817;UID=OLEDB;
PWD = OLEDB; ORA ODBC Oracle Server

Driver = {Microsoft Access Driver (*.mdb)};
DBQ = C:MydbFirstdb.mdb ; Jet ODBC Microsoft Access database


خلاصه
برای انتخاب یک NET Data Provider . ، موارد زیر پیشنهاد می گردد :

اگر منبع داده از نوع SQL Server 7.0 و یا SQL Sever 2000 می باشد ، SQL Server .NET Data Provider انتخاب گردد .
اگر منبع داده از نوع SQL Server 6.5 و قبل از آن باشد ، OLE DB .NET Data Provider انتخاب گردد .
اگر منبع داده شامل هر نوع منبع داده نامتجانس باشد که امکان دستیابی به آن از طریق OLE DB Provider ، وجود داشته باشد ،
از OLE DB .NET Data Provider استفاده گردد .

اگر منبع داده شامل هر نوع منبع داده نامتجانس باشد که امکان دستیابی به آن از طریق ODBC driver ، وجود داشته باشد ،
از ODBC .NET Data Provider استفاده گردد .

در بخش دوم این مقاله به بررسی نحوه تعریف یک Connection خواهیم پرداخت .
 
 
 
 
 

در این مقاله شما در مورد کار با با پایگاه داده در ASP.NET آشنا خواهید شد. بدین معنا که در صدد هستیم تا رویه ای کلی از مفاهیم، روشها وابزارهای مورد استفاده در ASP.NET جهت برقراری ارتباط با پایگاه داده، نشان دادن داده ها، دستکاری داده ها، بهنگام سازی و... توسط اشیایی چون مهیا کننده های بانک های اطلاعاتی، DataSetها XML، و ... معرفی می شود.

اگر تا بحال با پایگاه داده کار نکرده اید شاید provider یک پایگاه داده برای شما نامفهوم باشـد. بطور خلاصه راهی را که باید طی کرد تا به پایگاه داده متصل شده، آنرا باز کرده و داده ها را دستکاری کرده و دستورات را اجرا نمود، بوسیله یک تهیه کننده اطلاعات مشخص می شود. در ASP.NET معمولا از دو روش برای این کار استفاده می شود. روش اول اینکه اگر پایگاه داده شما از نوع SQL Server باشد بایستی با مدل SQLClient کار کرد و اگر پایگاه داده شما غیر از SQL Server باشد (در حال حاضر) باید از روش دیگر یعنی مدل OleDb استفاده نمود. بعنوان مثال اگر پایگاه داده شما Oracle ،Sybase و یا Access باشد باید از روش OleDb استفاده کنید.

روش کار بدین صورت است که ابتدا بایستی فضانام زیر را در صفحاتی که از بانک اطلاعاتی استفاده می شود فراخوانی کرد:

<% @ Import NameSpace="System.Data" %>
<% @
Import NameSpace="System.Data.OleDb" %>

برای برقراری ارتباط با پایگاه معمولا از عبارت زیر استفاده می شود:

Dim ObjConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; DataSource=e:dbusers.mdb”)

که قسمت DataSource آدرس فایل پایگاه داده است که در اینجا یک بانک Access است. همانگونه که ملاحظه می کنید از رشته ارتباطی یا Connection String بعنوان پارامتر استفاده شده است و بوسیله متد Open ارتباط باز می شود:

objConn.Open()

لازم به توضیح است که در پایان کار بوسیله متد Close ارتباط را خاتمه می دهیم.

بمحض ارتباط با پایگاه داده می توان دستورات را به آن فرستاد. این کار معمولا بوسیله شی OleDbCommand انجام می شود. جهت انجام این کار می توان یک دستور SQL یا نام یک روال ذخیره شده (Stored Procedure) را مشخص نمود و بنا به مقتضیات می توان اعمال مختلفی را روی پایگاه پیاده نمود:

Dim objCommand As New OleDbCommand ( "Select * From users", objConn )

ملاحظه می کنید که کلاس Command از دو پارامتر رشته SQL و نام رشته ارتباطی برای فرستادن دستورات به پایگاه داده استفاده می کند. برای مثال آنچه را که در عبارت فوق دیدید می توان به بخشهای کوچکتر زیر تقسیم کرد.

ابتدا تعریف شی:

Dim objCommand As New OleDbCommand()

سپس نسبت دادن آن به رشته ارتباطی جهت برقراری ارتباط پایگاه:

objCommand.Connection= objConn

مشخص کردن عملیات مورد نظر بوسیله دستورات SQL:

objCommand.CommandText="Select * From Users"

حتی می توانید عملیات فوق را بصورت ذیل انجام دهید:

Dim objCommand As New OleDbCommand( SQL string, Connection string )

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

- از ExecuteNonQuery زمانی استفاده می شود که قصد برگرداندن داده ها از پایگاه مورد نظر نباشد مثلا در مواقعی که از دستورات SQL جهت درج (Insert) و بهنگام سازی (Update) استفاده شود.

objCommand.ExecuteNonQuery

- از ExecuteReader برای خواندن و برگرداندن اطلاعات از پایگاه استفاده می کنیم.

Dim ObjRead As OleDbDataReader
objRead=objCommand.ExecuteReader

- برای دستکاری یک تک مقدار مشخص و مورد نظر از متد ExecuteScalar استفاده می شود.

برای خواندن داده ها معمولا از کلاس DataReader استفاده می شود -برای خواندن نه برای اضافه کردن یا بروز کردن- این شئ بصورت مستقیم به پایگاه داده دسترسی دارد و فقط خواندنی (Read Only) است. البته این خاصیت محدودیتی برای آن است اما برای خواندن ساده داده روشی کامل بشمار می رود.

Dim objReadaer As OleDbDataReader
objReader=objCommand.ExecuteReader
Whlie objReader.Read
Response.write(objReader.GetString(0)& " <br> " ) 
End While

عبارت فوق جهت نمایش و چاپ داده ها بکار می رود. متد Read خواندن را تا زمانیکه به پایان نتایج نرسد ادامه می دهد و عبارت objReader.GetString(0) برای برگرداندن نسخه رشته ای ستونهای رکورد کاربرد دارد. در لیست زیر چند متد دیگر برای برگرداندن مقادیر داده ای متغیرها آمده است:

GetBoolean(x) مقدار منطقی را بر می گرداند.
GetChar(x) مقدار کاراکتری را برمی گرداند.
Get DataTypeColumn(x) نوع داده را در ستون برمیگرداند.
GetString(x) مقداررشته ای را برمی گرداند.

در این بخش شما به دانسته های بخش اول نیاز دارید. شئ بعدی که مورد بحث قرار می گیرد کلاس Data Adapter است. OleDBDataAdapter اطلاعات را می گیرد و یک ارتباط منطقی بین داده ها و کلاس Dataset ایجاد میکند. بطور کلی میتوان گفت Data Adapter در نظر اول معادل Data Command می باشد. روش استفاده از Data Adapter ها بطور معمول بصورت زیر تعریف می شود:

Dim objAdapter As New OleDBDataAdapter("Select * From Users",objConn)

 

ملاحظه می کنید که شئ Adapter از دو پارامتر- یکی رشته دستورات SQL و دیگری رشته ارتباطی - برای فرستادن دستورات به پایگاه داده استفاده می کند. بطور معمول DataAdapter برای پرکردن DataSetها و بروز کردن پایگاه بوسیله یک DataSet و اجرا کردن دستورات بکار می رود. اکنون نمای کلی از کاربرد فوق را در زیر می بینید:

Dim ds As DataSet = New DataSet()
objAdapter.Fill(ds,"Users")

 

متد Fill جهت اجرای دستور تنظیم شده در Data Adapter بکار می رود. بعبارت دیگر اطلاعات واکشی شده از پایگاه داده در یک جدول با نامی که ما تعیین می کنیم (Users) ذخیره می شود.
نکته ضروری اینست که تکنیک
Mappings در اکثر مواقع کارساز است. Mappings عبارت است از ساختن یک نام مستعار (Alias) برای نام جداول در یک Dataset. این aliasها هیچگونه تاثیری در منبع داده ندارد و وقتی که بوسیله DataAdapter فرستاده می شود بصورت خودکار بنام پیش فرض تبدیل میشود. این تکنیک باعث خوانایی کد و راهنمایی برنامه نویس در ارجاع های بعدی وتشخیص جداول فراخوانی شده میشود.

objAdapter.TableMappings.Add("adbtable","Users")

with objAdapter.tableMapping(0).ColumnMappings

     .Add("PID","ID"

     .Add("LAstName","Lnam"(

     .Add("StreetAddress","Addy"(

End with

objAdapter.Fill(ds

در تکنیک فوق بجای استفاده از عبارت ds.Tables("adbtable") میتوانیم Ds.Tables("Users") را بکار ببریم. در بخشهای آینده دیگر فواید استفاده از Mappings آمده است. همچنین کلاس CommandBuilder برای بهنگام کردن یک بانک که بوسیله Dataset صورت گرفته یک شیوه صحیح بشمار میرود:

Dim cmdBLD As New OleDBCommandBuilder(objAdapter)

 

که در عبارت فوق شئ objAdapter بعنوان پارامتر به دستور CommandBuilder فرستاده شده و سپس بوسیله متد Update منبع داده بهنگام می شود:

objAdapter.Update(ds,"Users")

 

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

 

<%@ Import NameSpace="System.data" %>

<%@ Import NameSpace="System.Data.OleDB" %>

 

<Script Language="VB" Runat="Server">

 

Sub Page_Load( Sender As Object, E As EventArgs)

    Dim objConn As New OleDBConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:dbusers.mdb")

 

    objConn.Open()

    Dim ds As DataSet=New DataSet

    Dim objAdapter As New OleDBDataAdapter("Select * From Users",objConn)

    Dim objcmdBLD As New OleDBCommandBuilder(objAdapter)

    Obj.Adapter.Fill(ds,"Users")

End Sub

 

</Script>

 

 

 

 

 

 
مقایسه ADO و ADO.NET
 
 
 

شرکت مایکروسافت در ویژوال بیسیک ورژن 3 که در سال 1993 ارائه داد از Jet که هسته اصلی MS Access بود برای ایجاد ارتباط با بانکهای اطلاعاتی استفاده نمود البته برای استفاده بهتر برنامه نویسان ، Jet را در غالب مجموعه Object هائی تحت عنوان (Data Access Object ) آورد. در نسخه 4 و 5 ویژوال بیسک ، ماکروسافت روشی دیگر برای ارتباط با بانکهای اطلاعاتی تحت عنوان Remote Data Object = RDO را مطرح ساخت این روش برای برنامه نویسی Client / Server روش مناسبی بود.

در دوم سپتامبر سال 1998 وقتی ماکروسافت ویژوال بیسیک ورژن 6 را ارائه داد روش جدیدی تحت عنوان ( Activex Data Object ) ADO را مطرح ساخت در این روش که پایه و اساس آن OLEDB بود ماکروسافت بر خلاف DAO و RDO که ساختاری پیچیده و سلسله مراتبی داشتند، از ساختاری ساده و مجزا ( غیر سلسله مراتبی ) استفاده کرد و در واقع ADO هم شامل Object هائی است که برنامه نویس بتواند از آنها برای ایجاد ارتباط با بانکهای اطلاعاتی و انجام عملیات روی آنها استفاده کند و در تاریخ 13 February سال 2002 که ماکروسافت نسخه نهائی Visual Basic.Net را ارائه داده روشی جدید برای کار با بانکهای اطلاعاتی تحت عنوان ADO.Net را آورده است. این نسخه از ویژوال بیسیک برخلاف نسخه‎های قبل بطور کامل مباحث OOP را پشتیبانی می‎کند ( FULL OOP ) در واقع ADO.Net هم مانند ADO و RDO و ADO شامل ساختاری برای ارتباط و انجام عملیات روی بانکهای اطلاعاتی است. ADO.net همانند RDO و DAO و برخلاف ADO دارای ساختار سلسله مراتبی می‎باشد. در این مقاله می‎خواهیم به مقایسه ADO و ADO.net بپردازیم. ADO در ورژنهای مختلفی در این چند سال اخیر به بازار آمده است با آمدن SQL Server 2000 ورژن جدید ADO یعنی ورژن 2.6 از این محصول ارائه شد و اکنون هم ADO 2.6 در سایت ماکروسافت قابل Download می‎باشد.

آخرین ورژن ADO شامل 9 تا Object است که عبارتند از :

Connection
Command
Recordset
Parameter
Field
Error
Property
Record
Stream

آبجکت Connection امکان ارتباط با Data Source که شامل بانک اطلاعاتی است را فراهم می‎سازد. بعنوان مثال اگر بخواهیم از آبجکت Recordset برای اضافه و یا حذف و یا تغییر در محتوای رکوردی استفاده کنیم این آبجکت از Connection برای ایجاد ارتباط با بانک اطلاعاتی مثلاً SQL Server استفاده می‎کند اما همانطور که گفته شد و در شکل ملاحظه می‎شود ساختار آبجکتهای ADO بصورت سلسله مراتبی نیست و می‎‎توان مثلا Recordset ای ایجاد نمود که مستقل از آبجکت Connection بتواند با بانک اطلاعاتی ارتباط برقرار نماید.

در ADO علاوه بر آبجکتها، چهار Collection هم دیده می‎شود که عبارتند از :

Parameters
Fields
Properties
Errors

که هرکدام از آنها شامل آبجکتهائی از همان نوع هستند بعنوان مثال ساختاری که برای Recordset کشیده شده بیان کننده آن است که این آبجکت شامل Collection های Fields و Properties بوده و مثلاً Collection مربوط به Fields شامل آبجکتهای فیلد است.

آبجکت فیلد اطلاعاتی را راجع به یک ستون از Recordset در خود نگه داشته است.

در ADO آبجکت Command هم وجود دارد که از آن می‎توان برای اجرای یک فرمان SQL استفاده نمود البته بهترین روش برای اجرای Stored Procedure نیز استفاده از متد Execute مربوط به همین آبجکت است .

بعنوان مثال :

Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

cn.Open " Provider = sqloledb ; Data Source=serverName ; Initial Catalog = northwind ", "sa" , "password"
cmd.ActiveConnection = cn
cmd.CommandText = "sp_who"
cmd.CommandType = adCmdStoredProc

Set rs = cmd.Execute
Debug.Print rs(0)
rs.Close

از آبجکت Parameter هم برای مشخص کردن مقادیر پارامترهای ورودی یک ‌ Stored Procedure استفاده می‎کنیم.

آبجکت Property برای استفاده از Dynamic Property استفاده می‎شود که Property هایی هستند که وابسته به  Provider بوده و استاندارد نیستند .

از Record برای دسترسی به یک سطر از Recordset و ویژگیهای مربوط به آن سطر استفاده می‎کنیم .و آبجکت Stream هم به منظور ذخیره و بازیابی اطلاعات بصورت باینری در یک فیلد از Record در نظر گرفته شده است.

تا اینجا باساختار ADO آشنا شدیم حال به تشریح ADO.net می‎پردازیم .

ADO.Net مجموعه‎ای از Class های Interface ها و دستوراتی جهت مدیریت و کار با بانکهای اطلاعاتی است. در بحث Net . مجموعه‎ای از Class های مربوط به هم در یک غالب تحت عنوان ‌ Name Space ارائه شده است Net. شامل تعدادی Name Space است که در غالب .Net Framework قرار دارد. تمام ساختار ‌ ADO.net در چهار NameSpace قرار دارد که عبارتند از :

System.Data.SqlClient.
System.Data.OleDb.
System.Data.Odbc.
System.Data.

اگر بخواهیم از بانکهای SQL Server استفاده کنیم System.Data.SqlClient بهترین انتخاب است در این NameSpace امکاناتی فراهم شده تا بتوانیم Application های بنوسیم و در آنها با SQL Server ارتباط برقرار نمائیم بطوریکه برنامه‎ها از Performance بالائی برخوردار باشند.

در صورتی که کاربر بخواهد از بانکهای رابطه ‎ای دیگر نظیر Oracle استفاده کند میتواند از System.Data.OleDb بهره گیرد.

System.Data.Odbc برای ارتباط با بانکهای اطلاعاتی از طریق ODBC میباشد System.Data هم شامل Provider های خاص نظیر DataSet و DataTable است. ADO.net نیز شامل Object ها و Collection هائی است که از مهمترین آنها می‎توان موارد ذیل را شمرد:

OleDBConnection
OleDBCommand
OledbDataReader
OleDBDataAdapter
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
DataTable
DataRelation

OleDBConnection آبجکتی است شبیه به آبجکت Connection در ‌ ADO ، که امکان ایجاد ارتباط با بانک را فراهم می‎سازد این آبجکت متدهایی برای اجرای فرامین SQL نیز داراست .OleDBCommand هم مشابه آبجکت Command در ‌ ADO می‎باشد.

از این آبجکت نیز برای اجرای Stored Procedure و اجرای فرامین SQL استفاده می‎شود. آبجکت بعد OledbDataReader است که برای گرفتن اطلاعات از ‌Database استفاده می‎شود. البته لازم به ذکر است Resultset ای که با این روش ساخته می‎شود بصورت ReadOnly و Forwardonly می‎باشد. OleDBDataAdapter آبجکت جدیدی در Ado.net است که خود شامل چهار آبجکت برای انجام فرامین SQL می‎باشد که عبارتند از :

SelectCommand
InsertCommand
UpdateCommand
DeleteCommand

که به ترتیب برای واکشی اطلاعات، اضافه نمودن اطلاعات جدید به داخل بانک ، به هنگام سازی اطلاعات و حذف اطلاعات استفاده می‎شود. این آبجکت به همراه آبجکت Dataset استفاده می‎شود و برای پرکردن Recordset موجود در Dataset بکار می‎رود.

آبجکت بعدی Dataset است که مهمترین آبجکت در Ado.net می‎باشد این آبجکت شامل دو Collection به نام های ‌ DataTables و DataRelations است. همانطور که می‎دانید در ADO هم آبجکت Recordset داشتیم اینجا مجموعه‎ای از Recordset ها در داخل یک DataTables نگه داشته می‎شود و می‎توان بین DataTable های مختلف رابطه نیز ایجاد نمود که این روابط هم داخل یک مجموعه‎ای با نام DataRelations نگه داشته می‎شود. در واقع DataTable در ADO.net معادل همان RecordSet در ADO می‎باشد.

تعریف کلی از اکسسAccess

تعریف کلی از اکسسAccess

اکسس ابزاری برای تولید بانکهای اطلاعاتی رابطه ای است. بانکهای اطلاعاتی امکان گردآوری انواع اطلاعات را برای ذخیره ‌سازی ،جستجو و بازیابی فراهم می‌کند.

اجزا بانک اطلاعاتی اکسس عبارتند از:

DataBase:

1.
Table
2.
Query
3.
Form
4.
Report
5.
Macros
6.
Modules

• ‏‏
Table :(جدول ) هر جدول برای نگهداری داده‌های خام بانک اطلاعاتی است.داده‌ها را شما در جدول وارد می‌کنید.جداول سپس این داده‌ها را به شکل سطرها و ستونهایی سازماندهی میکند.

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

Form :متداولترین روش استفاده از فرمها،برای ورود و نمایش داده‌ها است.

Report :گزارش ها می‌توانند بر اساس جدول ،پرس‌وجوها باشند ،قابلیت گزارش چاپ داده‌ها می‌باشدگزارشها را می‌توان بر اساس چند جدول و پرس‌وجو تهیه نمود تا رابطه بین داده‌ها را نشان داد.

Macro :ماکروها به خودکار کردن کارهای تکراری ،بدون نوشتن برنامه‌های پیچیده یا فراگیری یک زبان برنامه نویسی ، یاری می‌کند، در واقع ماکروها یکسری قابلیت‌هایی هستند که امکان سریع سازی را فراهم می‌سازند.

Modules : محیط بسیار قوی و با کیفیت برای برنامه‌نویسی محاسبات و عملیات پیچیده روی سیستم بانک اطلاعاتی.

-----------------------------------

الف ‌- تعریف دادهData :
هرگونه اطلاعات لازم و کاربردی درباره یک موجودیت را یک داده می‌گویند.

ب‌- تعریف
Fild :
به هر ستون یک جدول که در بر گیرنده کلیه اطلاعات مربوط به آن ستون می‌باشد و بخشی از یک موجودیت را تشگیل میدهد فیلد گفته می‌شود.

ت‌- تعریف
Record :
به هر سطر یک جدول که اطلاعات مربوط به یک موجودیت را نشان می‌دهد ، رکورد گویند.

ث‌- تعریف پایگاه داده‌ای ارتباطی:
پایگاه داده‌های ارتباطی، مجموعه‌ای از جدول‌های داده است که یک فیلد مشترک در هر یک از جدولهای موجود دارد و از طریق آن می‌توان داده‌ها را بهم ربط داد.به این مدل از پایگاه داده‌ها ، پایگاه داده‌های ارتباطی
RelationShip می‌گویند.