/ در آموزش ویژوالبیسیک, اشتراک رایگان, ویژوالبیسیک / توسط
آخرین زمان ویرایش:

مجموعه سورس کدهای ویژوالبیسیک ۶ قسمت ۵

جهت مطالعه و دسترسی به سورس ها به ادامه مطلب مراجعه نمائید

قفل نرم افزاری ویژوال بیسیک

سلام به همگی!
قفل گذاری نرم افزاری معمولا سه مرحله داره
۱- ایجاد کد قفل روی کامپیوتر
۲- فرمول قفل
۳- چکینگ کد در زمان اجرای نرم افزار
مرحله اول توسط یک برنامه انجام میشه که بهش میگن Key Generator . این برنامه رو مینویسیم تا یک کد روی هارد دیسک کامپیوتر ایجاد کنه که بعدا بشه چکش کرد. معمولا این کد با استفاده از مشخصات کامپیوتر مثل شماره سریال هارد دیسک و یا مادربورد و یک فرمول ایجاد میشه.

مثلا این برنامه یک فایل در درایو C ایجاد میکنه که یک کد رو که از سریال نامبر هارد و فرمول دلخواه شما بدست میاد توش مینویسه. خوب این مسلمه که این کد فقط مختص همین کامپیوتره و روی هرکامپیوتر دیگه ای یک عدد دیگه بدست میاد و این کلید قفل گذاری نرم افزاریه!

Dim fso As New FileSystemObject, drv As Drive, s As String

Set drv = fso.GetDrive(fso.GetDriveName(“c :”))

HDD_Serial = FormatNumber(drv.SerialNumber, 0 )

S1 =””

For i = 1 To Len(HDD_Serial )

 If Mid(HDD_Serial, i, 1) <> “,” Then S1 = S1 + Mid(HDD_Serial, i, 1 )

Next i

HDD_Serial = Trim(S1 )

Code1 = ( Val(HDD_Serial) * 3 + 1350) / 5

Open “c:Serial.sn” For Output As #1

 Print #1, Code1

Close #1

عدد Code1 که توی فایل Serial.sn نوشته شده همون کلید شماست برای ورود به نرم افزار. حالا فقط کافیه که موقع اجرای نرم افزار بتونید با همون فرمول این عدد رو چک کنید و بفهمید که keygenerator شما این عدد رو نوشته یا یکی شیطون شده و یه عدد از خودش توی این فایل نوشته! خوب، بقیه قسمتهای دیگه نرم افزار رو میذارم به عهده خودتون! چون یه کمی هم از ذهنتون کار بکشین بد نیست!


 آشنایی با رکوردست و متدهای مهم آن

» همانطور که میدانید پردازش اطلاعات و داده ها در پایگاه داده عبارت است از ایجاد رکورد جدید برای ثبت اطلاعات جدید ، حذف رکورد اطلاعاتی ، ویرایش اطلاعات و داده ها و بسیاری کارهای دیگر . کنترل داده علاوه بر این که خصوصیتهایی برای ایجاد ارتباط با پایگاه داده دارد خاصیتی به نام RecordSet دارد که که بیشترین متدهای پردازش بر روی پایگاه داده را در خود جای داده است . با این خاصیت بیشتر آشنا می شویم :

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

_ Move : با استفاده از این متد ما میتوانیم به رکورد مورد نظر حرکت کنیم . روش استفاده از این متد به صورت زیر است :

( شماره رکورد ) 

Data1.RecordSet.Move

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

_ MoveFirst : با استفاده از این متد ما میتوانیم به اول لیست یا جدول تغییر مکان دهیم . روش استفاده از این متد :

Data1.RecordSet.MoveFirst

_ MoveLast : این متد هم رفتن ما را به آخرین رکورد جدول فراهم می کند و روش استفاده از آن به صورت زیر است :

Data1.RecordSet.MoveLast

_ MoveNext : از این متد برای رفتن به رکورد بعدی استفاده می شود . نکته ای که در مورد این متد وجود دارد این است که برای استفاده از این متد باید رکورد بعدی موجود باشد وگرنه پیغام خطا صادر خواهد شد. روش استفاده :

Data1.RecordSet.MoveNext

_ MovePreivous : این متد هم برای برگشت به رکورد قبلی استفاده می شود که در این مورد هم باید رکورد قبلی موجود باشد . روش استفاده :

Data1.RecordSet.MovePrevious

_ EOF : این متد مشخص میکند که آیا اشاره گر در رکورد آخر قرار دارد یا خیر که در صورت قرار داشتن در رکورد آخر مقدار True و در غیر این صورت مقدار False به خود خواهد گرفت :

A = Data1.RecordSet.Eof

که مقدار A با توجه به موقعیت اشاره گر یکی از دو مقدار True یا False خواهد شد .

_ BOF : این متد هم مانند متد قبلی عمل می کند ولی با این تفاوت که قرار داشتن اشاره گر در ابتدای لیست را مشخص می کند .

A = Data1.RecordSet.Bof

_ FindFirst : از این متد برای جستجوی اولین رکوردی که با ضابطه ما مطابقت دارد استفاده می شود . برای مثال اگر ما در لیست دنبال شخصی با اسم ” Mohammad ” باشیم برای جستجوی آن باید از کد زیر استفاده کنیم :

Data1.RecordSet.FindFirst ( “Name= ‘Mohammad ‘”)

از ‘ ‘ برای جستجو در فیلد رشته ای استفاده می کنیم ، یعنی برای جستجوی فیلدهای عددی نباید از این علامتها استفاده کنیم این جستجو می تواند ضابطه پیچیده تر داشته باشد مانند :

Data1.RecordSet.FindFirst ( “Name= ‘Mohammad’ AND Family= ‘Daryabiyan‘”)

در واقع این ضابطه به صورت کلی باید یک رشته باشد . از Or و And برای ایجاد ضابطه های طولانی تر و دقیقتر هم میتوانیم استفاده کنیم .

_ FindLast : این متد برای پیدا کردن آخرین رکورد موجود در لیست که با ضابطه و شرط ما همخوانی دارد استفاده می شود و طریقه استفاده از آن مانند متد FindFirst است :

Data1.RecordSet.FindFirst ( “Name= ‘Mohammad’ AND Family= ‘Daryabiyan ‘”)

_ FindNext : این متد هم برای یافتن رکورد بعدی استفاده می شود . باید توجه داشت که برای استفاده از این متد حتما باید قبل از آن از متد FindFirst استفاده کرده باشید .

Data1.RecordSet.FindNext  ( “Name= ‘Mohammad’ AND Family= ‘Daryabiyan‘”)

_ FindPrevious : از این متد هم برای یافتن رکورد قبلی استفاده می شود .

Data1.RecordSet.FindPrevious  ( “Name= ‘Mohammad’ AND Family= ‘Daryabiyan‘”)

_ NoMatch : این متد مشخص می کند که جستجوی ما چه حاصلی در بر داشته است . اگر جستجوی ما به نتیجه نرسیده باشد مقدار آن True خواهد بود و در غیر این صورت False خواهد شد . برای مثال :

Data1.RecordSet.FindFirst ( “Name= ‘Mohammad’ AND Family= ‘Daryabiyan ‘”)

If  Data1.RecordSet.NoMatch  Then

 “شخص مورد نظر شما در لیست یافت نشد”MsgBox

Else

 ” شخص مورد نظر شما در لیست موجود است”MsgBox

End If

 

_ AddNew : از این متد برای ایجاد رکورد جدید در جدول استفاده می شود .

Data1.RecordSet.AddNew

_ Delete : از این متد هم برای حذف رکورد مورد نظر استفاده می شود .

Data1.RecordSet.Delete

_ Edit : این متد قابلیت ویرایش جدول را فعال می کند و ما میتوانیم محتویات رکوردها را تغییر دهیم :

Data1.RecordSet.Edit

_ Update : از این متد برای ذخیره کردن رکورد ایجاد شده و یا ویرایش شده استفاده می کنیم . البته قبل از این متد باید یکی از متدهای AddNew یا Edit اجرا شده باشد :

Data1.RecordSet.Update

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

A = Data1.RecordSet.RecordCount

_Filter : از این متد برای نمایش دادن اطلاعات خاصی که ما برای آن ضابطه تعیین می کنیم استفاده می شود . البته تأثیر این متد در استفاده از کنترل جدول نمایانتر است :

Data1.RecordSet.FindFirst “Name= ‘Mohammad‘”

در این مثال رکوردهایی نمایش داده خواهند شد که فیلد نام آنها برابر با ‘Mohammad ‘ باشد . در این متد هم می توانیم از OR و AND برای دقیقتر کردن ضابطه استفاده کنیم .

_ Sort : ما با این متد می توانیم اطلاعات و رکوردهای جدول خود را بر اساس یک فیلد مرتب سازی کنیم :

Data1.RecordSet.Sort

گزارش گیری از پایگاه داده در ویژوال بیسیک

» همانطور که شما عزیزان می دانید گزارشگیری می تواند یکی از ویژگیهایی باشد که یک برنامه پایگاه داده را کاملتر و قابل استفاده تر می کند و کاربران به استفاده از این نوع برنامه ها رغبت بیشتری دارند . یعنی به طور کلی امکان گزارشگیری در یک برنامه از مهمترین ویژگیهای آن است . از گزارشگیری بیشتر در چاپ استفاده می شود و کاربر می تواند قبل از چاپ اطلاعاتی را مشاهده و ارزیابی کند . در این درس من روش ساخت گزارش معمولی با استفاده از امکانات آماده خود ویژوال بیسیک را توضیح خواهم داد ، ولی اکتیوایکس های پیشرفته تری مانند کریستال ریپورت ( Crystal Report ) که توانایی ساخت گزارشهای جالبتر و بهتری را دارند نیز وجود دارند که خود شما باید پیگیر آنها باشید .

» قبل از شروع ساخت گزارش شما باید چند نکته در این مورد یاد بگیرید . در ایجاد یک گزارش معمولی ویژوال بیسیک از از رابط OLE DB برای برقراری ارتباط با پایگاه داده مورد نظر استفاده می کند . برای شروع شما VB خود را باز کرده و یک پروژه استاندارد ایجاد کنید . سپس برای ایجاد رابط از منوی Project گزینه Add Data Environment را انتخاب کنید . با زدن این گزینه فرمی به صورت زیر ایجاد می شود :

» همانطور که در تصویر می بینید این فرم از یک لیست درختی تشکیل شده که سر شاخه آن همان نام رابط است . شاخه Connections لیست ارتباطها با پایگاه داده ها را مشخص می کند . مثال Connection1 با یک پایگاه داده مرتبط است و حال این که Connection بعدی که ایجاد میکنید می تواند با یک پایگاه داده دیگر ارتباط برقرار کند . شاخه Commands هم جدول یا جدول های انتخابی از هر پایگاه داده را مشخص میکند که بیشترین کاربرد را دارد . حال به توضیح هر یک از این دو شاخه می پردازیم :

شاخه Connections : همانطور که گفته شد این ابزار یا شی ء پایگاه داده ای را که قرار است از آن گزارش تهیه شود مشخص می کند . برای مثال ما مراحل انتخاب یک پایگاه داده مراحل زیر را دنبال می کنیم :

۱ ) روی Connection1 راست کلیک کنید تا منویی باز شود . از این منو گزینه Properties را انتخاب کنید تا دیالوگ Data Link Properties نمایش داده شود . برگه اول این دیالوگ دارای یک لیست است.

۲ ) شما از این لیست گزینه Microsoft Jet 4.0 OLE DB Provider را انتخاب کرده و گزینه Next را بزنید تا برگه دوم این دیالوگ نمایش داده شود .

۳ ) در این مرحله پایگاه داده مورد نظر خود را انتخاب کنید . برای آگاهی از این که آیا اتصال به درستی انجام گرفته می توانید از دکمه Test Connection استفاده کنید . سپس دکمه OK را برای پایان این مرحله انجام دهید .

با انجام این مراحل ما توسط Connection1 به پایگاه داده مورد نظر خود متصل شدیم . حال زمان استفاده از شی ء Command است . برای ایجاد یک Command برای Connection1 روی Connection1 کلیک راست کرده و گزینه Add Command را بزنید . با این کار Command1 به لیست Command ها اضافه خواهد شد .

شاخه Commands : همانطور که گفته شد شی Command برای مدیریت جدول یا فیلد ها استفاده می شود . برای تنظیم این شی ء مراحل زیر را دنبال می کنیم :

۱ ) روی Command1 کلیک راست کرده و گزینه Properties را انتخاب کنید تا دیالوگ زیر نمایش داده شود :

در این دیالوگ اصلی ترین قسمت برگه General است که ما باید آن را تکمیل کنیم .

۲ ) در برگه General از کشوی DataBase Objects گزینه Table را انتخاب کنید تا در کشوی Object Name نام جدول های موجود در پایگاه داده قرار گیرد و شما جدول مورد نظر خود را انتخاب کنید . حتی شما می توانید با استفاده از دستورات SQL که در قسمت SQL Statement می نویسید جدول مورد نظر خود را انتخاب نمایید .

۳ ) سپس دکمه Apply و دکمه Ok را برای تکمیل این قسمت فشار دهید . برگه های دیگر این دیالوگ برای ساخت گزارشهای پیشرفته تر کاربرد دارند که ما از تکمیل این قسمت ها را به خود شما عزیزان واگزار می کنم .

» در این قسمت تنظیمات مربوط به رابط پایگاه داده به پایان رسید . حال برای ایجاد صفحه طراحی گزارش از منوی Project گزینه Add Data Report را انتخاب کنید . یک صفحه طراحی گزارش با جعبه ابزار مخصوص با نام Data Reprot1 در اختیار شما قرار داده می شود . در این قسمت دو روش برای طراحی گزارش وجود دارد :

روش اول این است که خود شما برای هر کدام از فیلدهایی که می خواهید در گزارش قید شوند یک Rpt Text Box و Rpt Lable قرار دهید و خواص هر کدام از آنها را به طور جداگانه تنظیم کنید .

روش دوم این است که فرم رابط یا Data Environment و DataReport1 را به صورت زیر قرار داده و با کشیدن و انداخت هر کدام از فیلد ها و یا کل جدول از فرم رابط بر روی فرم گزارش ، گزارش خود را تنظیم کنید .

مهم ترین قسمت : مهمترین قسمت این بخش مرتبط کردن فرم گزارش با فرم رابط است . برای این کار شما باید خواص DataReport1 یا همان فرم گزارش خود را به صورت زیر تنظیم کنید :

۱ ) خاصیت DataSource را برابر با DataEnvironment1 قرار دهید .

۲ ) خاصیت DataMember را برابر با Command1 قرار دهید .

حال گزارش شما برای نمایش آماده است . برای این کار شما باید در Form1 خود یک CommandButton قرار داده و کد زیر را در آن بنویسید :

Private Sub Command1_Click()

DataReport1.Show

End Sub

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

ذخیره کردن تصویر در پایگاه داده

» قطعاً همه برنامه نویسان مایلند که در برنامه های مربوط به پایگاه داده خود بتوانند تصویر را نیز ذخیره کنند چون این امر یکی از ویژگیهای خوب و کارآمد برنامه خواهد بود . برای همین من این بار می خواهم روش ذخیره کردن تصویر را در پایگاه داده به شما عزیزان آموزش دهم .

» همینطور که شما عزیزان برنامه نویس می دانید در پایگاه داده اکسس نوع مشخصی برای ذخیره کردن تصویر وجود ندارد که ما به طور اختصاصی از آنها استفاده کنیم ولی یک نوع داده به نام OLE Object وجود دارد که می تواند هر گونه داده ای مانند صدا و تصویر را پشتیبانی کند . برای شروع شما برنامه Access را باز کرده و این فیلد ها را در آن ایجاد نمایید :

ID => AutoNumber

Picture => OLE Object

حال این جدول را با نام Sample ذخیره کنید و پایگاه داده را با نام db.mdb ذخیره نمایید . حال بدون این که داده ای در در این جدول وارد کنید از Access خارج شده و ویژوال بیسیک عزیز خودمان را باز کنید .

» مواد لازم: ابزارهای مورد نیاز برای کار را به صورت جدول زیر بر روی فرم خود قرار داده و خاصیت های آنها را تنظیم کنید :

خاصیت DataField خاصیت DataSource نام کنترل
== == Data1
Id Data1 Text1
Picture Data1 Image1

 

خاصیت Caption خاصیت Name نام کنترل
New CmdNew Command 1
Cancel CmdCancel Command2
== CmdDialog Commondialog

کدهای زیر را برای ایجاد ارتباط با پایگاه داده در Form_Load بنویسید :

()Private Sub Form_Load

       “Data1.DatabaseName = App.Path & “db.mdb

Data1.RecordSource = “SELECT * FROM Sample

Data1.Refresh

End Sub

 

 » کد باز کردن کادر محاوره ای برای انتخاب عکس با دابل کلیک کردن بر روی ImageBox :

Private Sub Image1_DblClick()

CmDialog1.Filter = “(*.jpg)|*.jpg

CmDialog.ShowOpen

If CmDialog.FileName <> “” Then

Image1.Picture = LoadPicture(CmDialog.FileName)

End If

End Sub

» کد برای ایجاد رکورد جدید :

Private Sub CmdNew_Click()

Data1.Recordset.AddNew

CmdNew.Enabled = False

CmdSave.Enabled = True

CmdCancel.Enabled = True

Call Image1_DblClick

End Sub

» کد برای ذخیره کردن رکورد ایجاد شده :

Private Sub CmdSave_Click()

Data1.Recordset.Update

CmdNew.Enabled = True

CmdSave.Enabled = False

CmdCancel.Enabled = False

Data1.Recordset.MoveLast

End Sub

» کد برای صرف نظر کردن از رکورد ایجاد شده :

Private Sub CmdCancel_Click()

Data1.Recordset.CancelUpdate

CmdNew.Enabled = True

CmdSave.Enabled = False

CmdCancel.Enabled = False

End Sub

نکته : باید توجه داشته باشید که ذخیره کردن تصویر در پایگاه داده ظرفیت آن را به اندازه زیادی افزایش خواهد داد .

 انتقال اطلاعات از یک پایگاه به پایگاه داده دیگر

» شاید یکی دیگر از جنبه های برنامه نویسی پایگاه داده توانایی کپی کردن اطلاعات از پایگاه داده ای به پایگاه داده دیگر است که بیشترین کاربرد این عمل در پشتیبان گیری یا انتقال اطلاعات از جدول فرعی به جدول اصلی ( مادر ) مشخص می شود .

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

» برای مثال شما دو پایگاه داده با نام های mdb1 ( پایگاه داده مادر ) و mdb2 ( پایگاه داده فرعی ) که دارای ساختار یکسانی هستند را در نظر بگیرید . ما قصد داریم اطلاعات موجود در پایگاه داده فرعی را بر روی اطلاعات موجود در پایگاه داده مادر بیفزاییم . پس در این حالت اطلاعاتی باید از پایگاه داده فرعی یا رابط به پایگاه داده مادر کپی گردند که نظیری در پایگاه داده مادر ندارند تا به این صورت از ذخیره سازی داده های تکراری در پایگاه داده مادر جلوگیری شود .

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

» پایگاه داده مادر ( mdb1 ) :

–> یک جدول با نام Table1 دارای فیلد های زیر :

> ID : از نوع عددی به عنوان کلید

> Name : از نوع متن

> Family : از نوع متن

» پایگاه داده فرعی ( mdb2 ) :

–> یک جدول با نام Table2 دارای فیلد های زیر :

> ID : از نوع عدد

> Name : از نوع متن

> Family : از نوع متن

 » دستور :

 جدول فرعی  SELECT _ FROM ‘  مسیر و نام جدول اصلی ‘ IN   جدول اصلی INSERT INTO

_ در این دستور فقط مسیر و نام پایگاه داده مقصد ذکر می شود و پایگاه داده مبدا باید در اجرای برنامه گشوده شود . حال مثال را کامل می کنیم . ابتدا شما باید از دیالوگ References گزینه Microsoft DAO 3.51 Object Library را تیک بزنید و کد زیر را در دکمه ای قرار دهید :

Private Sub CmdCopy_Click()

Dim DBase As Database

Dim SQL As String

Set DBase = OpenDatabase(App.Path & “mdb2.mdb”, True, False)

SQL = ” INSERT INTO Table1 IN ‘” & App.Path & “mdb1.mdb’ SELECT * FROM Table2

DBase.Execute SQL

  ” vbInformation , ” Copy Completed   , ” عمل انتقال اطلاعات با موفقیت به پایان رسید” Msgbox

End Sub

_ در این مثال اطلاعات موجود در جدول پایگاه داده فرعی ( Table2 ) به جدول موجود در پایگاه داده مادر ( Table1 )بدون تکرار در فیلد ID کپی می شوند . با استفاده از این دستور حتی می توان اطلاعات موجود در یک پایگاه داده نوع دیگر مانند Excel را به پایگاه داده Access کپی کرد که انشا الله در قسمت کار با پایگاه داده Excel توضیح خواهم داد .

نوشته های مشابه

مجموعه سورس کدهای ویژوالبیسیک ۶ قسمت ۴

جهت مطالعه و دسترسی به سورس ها به ادامه مطلب مراجعه نمائید (بیشتر…)

دانلود کتاب آموزشی فتوشاپ قسمت اول

دانلود کتاب آموزشی در ادامه مطلب (بیشتر…)

 کانال تلگرام داده باران شارژ آنلاین

نظری بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *