آموزش کار با پایگاه داده در B4A – قسمت چهارم(ارتباط با بانک)
سلام
خب رسیدیم به چهارمین و مهم ترین قسمت از آموزش کار با پایگاه داده در بیسیک فور اندروید، در این قسمت دیگه میخوایم بانکی رو که درست کردیم باهاش ارتباط برقرار کنیم و مقادیرش رو بخونیم، پس در ادامه با بپرسم همراه باشید.
جلسات قبلی:
- آموزش کار با پایگاه داده در B4A – قسمت اول(ساخت پایگاه داده)
- آموزش کار با پایگاه داده در B4A – قسمت دوم(درج اطلاعات)
- آموزش کار با پایگاه داده در B4A – قسوم سوم(آشنایی با دستورات SQL)
آموزش:
- ابتدا بیسیک فور اندروید را اجرا کنید، برای پروژه نامی انتخاب و ذخیره کنید.
- سپس فایل پایگاه داده در پوشه Files موجود در محل ذخیره پروژه قرار بدید.
فایل های پایگاه داده با پسوند db هستند.
میخوایم یک لیست ویو داشته باشیم و رکورد های پایگاه داده را در لیست ویو نمایش بدیم.
- پس به دیزاینر رفته و یک ListView اضافه کنید و به برنامه تعریفش هم کنید و سپس لایوت را ذخیره کنید.
- برای ارتباط با پایگاه داده از کتابخونه SQL استفاده می کنیم، که این کتابخونه به صورت پیشفرض در لیست کتابخونه ها وجود داره، پس کتابخانه SQL را هم به برنامه اضافه کنید.
- پس از اضافه کردن کتابخانه SQL نیاز داریم تا یک متغیر از نوع SQL تعریف کنیم، پس متغیری با نام دلخواه از نوع SQL تعریف می کنیم.
۱ |
Dim sql1 As SQL |
نام متغیر را sql1 گذاشتم.
از این قسمت به بعد کدهایی که گفته میشه را باید در Activity_Create بنویسید.
- برای اینکه کاربر بتونه از پایگاه داده استفاده کنه، نیاز داریم تا پایگاه داده را هنگام نصب به حافظه ی گوشی انتقال بدیم، برای این کار از کد زیر استفاده می کنیم:
۱ ۲ ۳ |
If File.Exists(File.DirInternal , "Learn.db") = False Then File.Copy(File.DirAssets , "Learn.db" , File.DirInternal , "Learn.db") End If |
به جای Learn نام فایل پایگاه داده را بنویسید.
- تا به این جای کار، فایل پایگاه داده را به حافظه گوشی انتقال دادیم، در مرحله بعد باید با پایگاه داده ارتباط برقرار کنیم، برای این کار از کد زیر استفاده می کنیم:
۱ |
sql1.Initialize(File.DirInternal , "Learn.db" , True) |
- برای نمایش مقادیر بانک نیاز داریم تا یک متغیر از نوع اشاره گر(Cursor) تعریف کنیم، پس متغیری از نوع Cursor با نام دلخواه تعریف می کنیم:
۱ |
Dim Cur As Cursor |
نام متغیر را Cur گذاشتم.
- حالا باید دستور Select را اجرا کنیم، همانطور که گفتیم میخواهیم مقادیر را در یک ListView نمایش دهیم، با استفاده از کد زیر دستور دریافت را به بانک ارسال می کنیم:
اگر با دستورات SQL آشنایی ندارید، به این لینک مراجعه کنید.
۱ |
Cur = sql1.ExecQuery("select * from TblDetails") |
TblDetails نام جدولی هست که در بانک داریم.
- و در نهایت با استفاده از کدهای زیر فیلدهای ستون Name از جدول TblDetails را نمایش میدهیم:
۱ ۲ ۳ ۴ ۵ |
ListView1.Clear() For i = ۰ To Cur.RowCount-۱ Cur.Position = i ListView1.AddSingleLine(Cur.GetString("Name")) Next |
توضیحات:
در خط اول Listview را خالی کردیم، در خط دوم یک حلقه قرار دادیم و مشخص کردیم به ازای هر رکورد یک آیتم به لیست ویو اضافه بشه.
پروژه را اجرا می کنیم و می بینیم که تمامی فیلد های ستون Name نمایش داده می شود.
امیدوارم با موفقیت شما هم تونسته باشید با بانک ارتباط برقرار کنید، نگران نباشید اگر موفق نشدید، در کنار شما هستیم، سوالات خود را در بخش پرسش و پاسخ سایت بپرسید.
هرگونه سوالی یا مشکلی در رابطه با مطلب فوق داشتید؛ در سایت بپرسید، پاسخگوی سوالات شما هستیم، برای پرسیدن سوال کلیک کنید.
موفق باشید.
دیدگاه ( 12 )
سلام ممنون بابت اموزش خوبتون.چجوری میشه تو یکی از فیلد های دیتابیس از طریق b4a عکس قرار داد؟
سلام، خوشحالیم که آموزش کمکتون کرده …
لطفا سوالتون رو در بخش پرسش و پاسخ سایت بپرسید
موفق باشید.
چشمتون بی بلا
سلام و خسته نباشید
یک سوال دیگر درباره دیتابیس
اگر وقت کردید و صلاح می دانید کوئری سرچ در دیتابیس انلاین یا سورسی در این باره بگذرارید یا راهنمایی بکنید. ممنون
انشاءالله چشم
سلام. خسته نباشید و همچنان سپاسگزار به خاطر زحمت های شما در سامان دادن به اموزش بیسیک فور اندروید
می خواستم بپرسم از نظر امنیتی، دیتابیس در فایل برنامه پیوست بشود بهتر است یا اینکه در هاست بارگزاری بشود.
شما اینجا نوشتید که دیتابیس به گوشی منتقل می شود، ایا همه اپلیکیشن ها اینطوری است، یا اینکه شما اینطور تصمیم گرفتید ؟ اگر دیتابیس در هاست باشد امنیتش بیشتر نیست؟ یا اینکه چاره ای جز ذخیره شدن آن در گوشی نداریم
سلام، باعث خوشحالیه که آموزش ها براتون مفید بوده
از نظر امنیتی بهتر است که از دیتابیس آنلاین استفاده بشه، تا کسی نتونه به دیتابیس شما دسترسی داشته باشه
وقتی از دیتابیس آفلاین استفاده بشه، برنامه ای که هم که مینویسید قطعا آفلاین هست(مثلا کتاب)، و برای اینکار حتما باید دیتابیس در کنار برنامه باشه(چاره ای جز ذخیره شدن آن در دیتابیس نداریم)
ولی از نظر امینتی اگه بخواید حساب کنید، استفاده از دیتابیس آنلاین امنیت برنامه بالاتر میره
موفق باشید
سلام
ممنون از آموزش خوبتون
یه سوال دارم، تغییر یا ویرایش مقادیر دیتابیس از طریق b4a چگونه امکان پذیره؟
مثلا فرض کنیم مقدار ردیف دوم دیتا بیس را میخواهیم با هر بار کلیک روی یک button تغییر کنه.
آیا امکانش هست؟ رهنمائی بفرمائید.
سپاس
سلام
سوالات خود را لطفا در بخش پرسش و پاسخ سایت بپرسید
سلام خسته نباشید خیلی خیلی ممنون بابت این آموزش
فقط یک چیزی
چطور میتونم رشته که از کاربر گرفتم از طریق txtbox و… رو برابر با
مثلا family بدم ؟
INSERT INTO TblDetails(ID , Name , Family) VALUES(“۵” , “SOLTANE” , “GHALBHA”)
سلام
با استفاده از Select میتونید
دستور کوئریش میشه این:
family که نام فیلد دیتابیس هست و nametextbox که باید نام تکست باکس رو قرار بدید.
سلام
چطوری میشه اطلاعات دیتابیس رو بجای لیست ویو رو لیبل نشون داد؟
منظورم اینه یه صفحه متنی ایجاد بشه نه لیست.
سلام
برای این کار باید از مولتی پنل استفاده کنید(در اینترنت جستجو کنید، سایت های همکار آموزش ها رو گذاشتن)
موفق باشید
یه سوال داشتم … چجوری یه رشته از یک activity به داخل activity دیگر بریزیم ؟ برای پروژه ی من میخوام با انتخاب اسم بانک مقدار اسم بانک در لیست ویو برای نمونه “ملی” داخل lable در activity دیگه بریزه ؟؟؟!!!
سلام
درون اکتویتی که میخواید اطلاعات رو نمایش بدید،؛ داخل همون اکتویتی بانک رو فراخوانی کنید و اطلاعات جدول مورد نظر رو نمایش بدید.
موفق باشید.
مشکل رو با استفاده از ExecNonQuery2 برطرف کردم
سپاس
موفق باشید
بسیار ممنون از پاسختون
ولی این کدها مال اکتیویتی تنظیمات هست و دیتابیس در اکتیویتی main کپی و ایجاد شده است
در اینجا هم در activity create اینیشیالایز شده و در رویداد کلیک یک باتن اقدام به ذخیره متغیر موردنظر کردم که متاسفانه اصلا ذخیره نمی شود
درضمن متغیری که میخواهم در دیتابیس قرار دهم بصورت عددی از ادیت تکست گرفته میشود
سلام
خوسحالم که آموزش براتون مفید بوده 🙂
تغییرات جدید در دیتابیس هم نباید ثبت بشه! به دلیل کد زیر:
در کد بالا گفته شده که اگه دیتابیسی با نام mydb در حافظه گوشی وجود داشت، دیگه دیتابیس جدید را که روش تغییرات انجام دادیم را در حافظه ی گوشی کپی نکن؛ در کد بالا باید if را حذف کنید، که کد به این شکل می شود:
حالا هر موقع که برنامه میخواد نصب بشه، دیتابیس هم تو حافظه ی گوشی کپی میشه(چه دیتابیس باشه، چه نباشه).
ولی وقتی که کار نوشتن برنامتون تمام شد، کد را به همراه if بزارید.
موفق باشید.
سلام
بسیار سپاسگزارم از آموزش خوبتون
خیلی به دردم خورد اما یه جا به مشکل برخوردم لطفا راهنمایی کنید.
برای قسمت تنظیمات برنامه از دیتابیس استفاده کردم درست طبق همین آموزشهای شما ولی مشکل اینجاست که تغییرات جدید در دیتابیس ذخیره نمی شود!!
برای خواندن از دیتابیس:(در خواندن از دیتابیس مشکلی نیست)
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout(“lsets”)
sql1.Initialize(File.DirInternal , “mydb.db” , True)
cur = sql1.ExecQuery(“SELECT Value FROM tblSets WHERE ID = 1”)
cur.Position = 0
alogin = cur.GetString(“Value”)
End Sub
برای نوشتن تغییرات در دیتابیس:
Sub saveset_Click
If sql1.IsInitialized=False Then
sql1.Initialize(File.DirInternal , “mydb.db” , True)
End If
cur = sql1.ExecQuery(“UPDATE tblSets set Value = ‘” & edt1.text & “‘ WHERE ID = 1”)
sql1.Close
End Sub