رفتن به مطلب

دیتابیس آفلاین


Mthzf1384

ارسال‌های توصیه شده

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

با آموزش دیتابیس آفلاین در خدمتتون هستم.

دیتابیس آفلاین خیلی کاربرد ها در برنامه های آفلاین و آنلاین داره به طور خیلی کلی شما میتونید اطلاعات رو در اون ذخیره کنید و هر موقع خواستید فراخوانی کنید(البته اطلاعات نه چندان مهم چون اطلاعات به راحتی میتوانند در دسترس باشند و برای اطلاعات مهم باید در دیتابیس آنلاین ذخیره کرد)

کار ما کلا با برنامه نویکت(navicat) و B4A هست اگر نویکت رو ندارید میتونید از لینک زیر اون رو دانلود کنید:

دانلود نسخه 32 بیتی

دانلود برای نسخه 64 بیتی

خب برسیم به آموزشمون:

  1. ابتدا برنامه نویکت رو باز کنید
  2. از قسمت conection گزینه چهارم یعنی SQLite رو انتخاب کنید
  3. در پنجره باز شده سه مورد مهم هست:( conection name , type , database file)
  • در conection name اسم اون دیتابیس در برنامه نویکت رو قرار بدید
  • در type اگر میخواهید دیتابیس جدیدی بسازید هم میتوانید گزینه دومی و هم گزینه سومی  را انتخاب کنید و اگر میخواهید دیتابیس از قبل موجود را به برنامه نویکت اضافه کنید گزینه اول را انتخاب کنید
  • اگر مورد دوم و سوم را انتخاب کردید در database file محل ذخیره دیتابیس رو قرار بدید(باید در پوشه فایل های برنامه اون رو قرار بدید) و اگر مورد اول باید آدرس اون دیتابیس ذخیره شده رو بزنید
  • در نهایت را ok بزنید 

       حالا دیتابیس شما ساخته شده اما هنوز قابل استفاده در B4A برای ذخیره اطلاعات نیست برای اینکه قابل استفاده بشه باید تیبل و فیلد ایجاد کنیم تا قابل استفاده بشه برای ذخیره اطلاعات.

خب حالا چطوری تیبل و فیلد ایجاد کنیم:

  1. ابتدا روی دیتابیس خودتون کلیک کنید تا رنگش آبی بشه
  2. روی main کلیک کنید تا باز بشه
  3. حالا در پنچره باز شده new tabel رو بزنید
  4. خب حالا باید فیلد هامون رو در داخل تیبل ایجاد کنیم
  5. برای ایجاد فیلد چهار تا قسمت خیلی مهمه (name , type , not null , key)
  6. name اسم فیلد هست و در B4A باهاش کار داریم
  7. Type محتوای ذخیره سازی هست اگر integer قرار دادید دیگه نمیتونید داخلش حروف تایپ کنید و به همین ترتیب
  8. اگر تیک not null رو بزنید دیگه هیچ فیلدی نمیتونه خالی از اطلاعات باشه
  9. اگر در key کلیدی قرار دادید دیگه اطلاعات هیچ دو فیلدی نمیتونن مثل هم باشن
  10. حالا به ترتیب هایی که ذکر شده هر تعداد فیلد هایی که خواستید رو بسازید و در نهایت دکمه save رو بزنید و اسم تیبل رو انتخاب کنید

توصیه: همیشه فیلد اول رو ID قرار بدید و not null و key رو براش فعال کنید

یادتون باشه ما با اسم تیبل و اسم فیلد ها کار داریم و شما برای دسته بندی راحت تر برنامتون میتونید چند تا تیبل و چند تا فیلد داشته باشید  به عنوان مثال اگه برنامه شما یک کتاب هست که تنظیمات هم داره شما بهتره اطلاعات تنظیمات را در یک تیبل و متن های کتاب رو در تیبل دیگه ای قرار بدید

خب الان میتونید اطلاعات رو در دیتابیس ذخیره کنید و در برنامه از اون استفاده کنید. ادامه آموزش را با یک مثال ادامه میدیم

میخواهیم یک برنامه با یک دکمه بسازیم که بشه رنگ دکمه رو کاربر تغییر بده و اون رنگ برای همیشه برای اون دکمه باقی باشه؛ در حالت بدون استفاده از دیتابیس و ذخیره سازی اطلاعات شما نمیتونید بیشتر از یه رنگ که توسط خودتون(نه کاربر) تعیین میشه قرار بدید ولی در این مورد کاربر هر بار میتونه رنگ دکمه رو تغییر بده و به راحتی ذخیره کنه و از این به بعد از اون استفاده کنه

برای این کار ابتدا یه دیتابیس ایجاد کنید با یک تیبل و چهار فیلد:

  • فیلد اول که طبق توصیه ID باید باشه
  • فیلد دوم Red باشه
  • فیلد سوم green باشه 
  • فیلد چهارم Blue باشه

 

در این فیلد ها میزان رنگ های Red , Green , Blue که توسط کاربر قرار داده شده رو ذخیره میکنیم برای مقدار پیش فرض Red رو 255، green , blue رو صفر، ID هم برابر با یک قرار بدید تا رنگ اولیه دکمه قرمز باشه

خب حالا که اطلاعات پیش فرض رو در دیتابیس ذخیره کردیم دیگه کار ما با برنامه ی نویکت تموم شده و باید بقیه کار ها رو در B4A انجام بدیم

روش اصولی استفاده از دیتابیس اینه که شما تمام کارهای مربوط به دیتابیس رو در داخل یک class module انجام بدید و بعد با activity اصلی ارتباط برقرار کنید

نکته: دیتابیس نمیتونه در dirassets باشه و باید قبل از هر گونه کاری روی دیتابیس اون رو در جای دیگری ذخیره کنید(من در dirinternal ذخیره میکنم)

خب حالا طبق مراحل زیر عمل میکنیم:

  1. تیک کتابخانه SQL را میزنیم 
  2. در class module  ایجاد شده از قبل در ساب class global یک متغیر از SQL تعریف میکنیم
  3. در ساب Initialize کد های زیر رو برای کپی دیتابیس و اینیشالایز SQL قرار میدیم:
If(File.Exists(File.DirInternal , "نام دیتابیس.db") = False)Then
	File.Copy(File.DirAssets , "نام دیتابیس.db" , File.DirInternal , "نام دیتابیس.db")
End If

If(sql1.IsInitialized = False)Then
	sql1.Initialize(File.DirInternal , "نام دیتابیس.db" , False)
End If

 به طور کلی برای گرفتن اطلاعات ما به یک متغیر از نوع Cursor برای خواندن فیلد ها نیاز داریم و باید اون رو با دستور Select مقدار دهی کنیم. فرمول کلی دستور select به صورت زیر است:

Dim cur as Cursor = sql1.ExecQuery("SELECT * FROM نام تیبل")

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

Dim cur as Cursor = sql1.ExecQuery("SELECT * FROM  نام تیبل WHERE ID = 1")

نکته خیلی مهم: در دستور بالا و به طور کلی در هر کوئری کلمات نباید کوچک نوشته شوند مانند SELECT و اگر به صورت select نوشته شد غلط است

در کد بالا cur فقط اطلاعات ID = 1 رو میگیره حالا اگر شما آیدی دیگه ای رو میخواهید میتونید جای یک هر مقداری قرار بدید

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

For i = 0 To cur.RowCount - 1
	cur.Position = i
Next

خب حالا باید اطلاعات رو از دیتابیس بگیریم و اون رو از کلاس ماژول به اکتیویتی اصلی انتقال بدیم برای این کار یه ساب با نام GetData میسازیم از نوع لیست و در اون سه مقدار R , G , B رو میگیریم مانند کد زیر:

Sub GetData As List
	Dim l As List
	l.Initialize
	Dim cur As Cursor = sql1.ExecQuery("SELECT * FROM TblColor")
	cur.Position = 0
	l.Add(cur.GetString("Red") &"#"& cur.GetString("Green") &"#"& cur.GetString("Blue"))
	Return l
End Sub

در کد بالا ما میزان رنگ ها رو به ترتیب درون لیست قرار دادیم و اون ها رو با یک # از هم جدا کردیم تا بتونیم در اکتیویتی اصلی اون ها رو از هم تشخیص بدیم

خب حالا اطلاعات رو آوردیم در کلاس ماژول حالا باید اون ها رو وارد اکتیویتی اصلی کنیم برای این کار ابتدا در ساب global یه متغیر از نوع کلاسمون تعریف میکنیم وقبل از هر کاری ساب initialize کلاس ماژول رو فراخوانی میکنیم تا دیتابیس آماده کار بشه 

کد زیر رو در اکتیویتی قرار میدیم تا اطلاعات در اکتیویتی اصلی بیاد و بتونیم تنظیمات پیش فرض رو اعمال کنیم:

Sub Globals
	Private Button1 As Button
	Dim mydb As MySql
	Dim l As List
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("Layout")
	mydb.Initialize
	l.Initialize
	l = mydb.GetData
	Dim s() As String = Regex.Split("#" , l.Get(0))
	Button1.Color = Colors.RGB(s(0) , s(1) , s(2))
End Sub

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

پیروز و سربلند باشید :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام خدمت همه دوستان عزیز

جلسه دوم

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

  • ابتدا با آپدیت آغاز میکنیم:

فرم کلی دستور update به صورت زیر است:

UPDATE نام تیبل SET نام فیلد = ?  WHERE ID = 1

در کد بالا میگیم آپدیت کن تیبل فلان در فیلد فلان وقتی که آیدی برابر یک هست

حالا میخواهیم این دستور را در بیسیک پیاده سازی کنیم همونطور که گفتم در یک کلاس ماژول تمام کار های مربوطه رو باید انجام بدیم و در اکتیویتی اصلی از اون استفاده کنیم:

Public Sub Update
	sql1.ExecNonQuery("UPDATE TblColor SET Blue = 255 WHERE ID = 1)
End Sub

حالا کافیه این ساب رو در اکتیویتی اصلی فراخوانی کنید

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

Public Sub UpdateAkharin(ID As Int)
	sql1.ExecNonQuery2("UPDATE TblColor SET Blue = ? WHERE ID = ?" , Array As String(255 , ID))	
End If

با این کار ما آیدی رو میتونیم در اکتیویتی اصلی مقدار دهی کنیم:

mydb1.Update(Btn.Tag)

اینگونه ما بدون دانستن آیدی و  خیلی دقیق آیدی مربوطه رو مقدار دهی کردیم

  • گاهی وقت ها نیاز است تا یک مقداری رو از داخل برنامه به دیتابیس بفرستیم برای این کار از کد زیر استفاده میکنیم:
INSERT INTO نام تیبل VALUES(1, 0 , 255 , 0)

در قسمت VALUES باید به ترتیب فیلدهامون مقادیر رو قرار بدیم

حالا باید این کد را در بیسیک هم پیاده سازی کنیم اینگونه:

Sub Insert
	sql1.ExecNonQuery2("INSERT INTO TblColor VALUES(? , ? , ? , ?)" , Array(2 , 255 , 0 , 255))
End Sub
  • گاهی اوقات هم نیاز است اطلاعات رو پس از منسوخ شدن از دیتابیس حذف کنیم

فرم کلی دستور delete:

DELETE FROM نام تیبل WHERE ID = 4

حالا باید این کد را در بیسیک هم پیاده سازی کنیم اینگونه:

Sub Delete
	sql1.ExecNonQuery("DELETE FROM TblColor WHERE ID = 3")
End Sub

اگر آیدی را هم نمیدونستید میتونید مثل قسمت update عمل کنید و آیدی را به طور دقیق بدهید.

خب این جلسه هم به اتمام رسید انشاءالله سعی میکنم سورس کد هایی رو برایتان قرار بدهم.

پیروز و سربلند باشید :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...