جستجو در دیتابیس در b4a با سورس
منبع:gameover.blog.ir
برای اینکه دیتا بیس بسازید نیاز به نرم افزار navicat دارید که ورژن
premium رو از اینترنت دانلود کنید . اموزشم نمی خواد ور برید حله
-
یه کانکشن و سپس یه دیتا بیس و سپس یک جدول به نام table1 بسازید.
اسم دیتا بیس من db1.db هست که از نوع sql Lite 3 ایجادش کردم.
اسم جدول من table1 هست که دارای دو ستون esm و nomre هست و یه سری اسم و مقدار که داخلش ریختم :
دیتابیس ایجاد شده رو با نام db1.db در پوشه ی Files داخل پوشه ی پروژه ی خودتون بریزید.
سپس وارد b4a بشید و در بخش Files (پایین سمت راست) رفته و Sync رو بزنید
تا فایل های اضافه شده به پوشه ی Files رو داخل پروژه شناسایی و بار کنه.
به منوی Designers برید و یک اکتیویتی با نام main ایجاد کنید و یک
listView و یک کادر متن(EditText ) بسازید و همونجا از منوی
Tools->Generate members کدهای تعریف کادر متن و بقیه که لازم دونستید
generate کنید(متوجه نمی شید تیک بزنید و توی کدها نگاه کنید ببینید
رویدادها و متغیرهای لازم تعریف میشه)
کدهای Globals (بخش sub نه process) ما اینان:
Sub Globals
Private EditText1 As EditText
Private ListView1 As ListView
Dim SQL1 As SQL
Dim cursor1 As Cursor
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("main")
Activity.Color=Colors.RGB(26,188,156)'#1abc9c
Activity.Title="sajjad3011"
Activity.LoadLayout("main")
If File.Exists(File.DirInternal,"db1.db") = False Then
File.Copy(File.DirAssets,"db1.db",File.DirInternal,"db1.db")
End If
If SQL1.IsInitialized = False Then
SQL1.Initialize(File.DirInternal, "db1.db", False)
End If
DBload("")
End Sub
حالا باید کد رویداد EditText1_TextChanged رو بسازیم که وقتی توی کادر متنی ویرایش یا تغییراتی اعمال کردیم جستجو و نتیجه اون در لیست نمایان بشه:
Sub EditText1_TextChanged (Old As String, New As String)
DBload(New)
End Sub
اینم کد تابع یا ساب روتین یا روال DBload:
Sub DBload(q As String)
Private condition As String
q=q.Trim'remove spaces
condition="WHERE esm LIKE '%" & q & "%'"
ListView1.Clear'need to clear the list
cursor1 = SQL1.ExecQuery("SELECT * FROM table1 " & condition)
For i = 0 To cursor1.RowCount - 1
cursor1.Position = i
ListView1.AddSingleLine(cursor1.GetString("esm")& "|" &cursor1.GetString("nomre"))
ListView1.SingleLineLayout.ItemHeight = 40
ListView1.SingleLineLayout.Label.TextSize = 20
ListView1.SingleLineLayout.Label.TextColor = Colors.Black
ListView1.SingleLineLayout.Label.Color = Colors.White
Next
End Sub
با تابع Trim فضای خالی راست و چپ رشته ی ورودی که به جای q نشسته رو پاک می کنیم.
condition شرط رشته ای هست که پیوند میزنیم به متن SQL که قراره برای عمل پرس و جو یا query تولید بشه.
با دستور زیر q رو در like برای جستجو جاساز کردیم:
condition="WHERE esm LIKE '%" & q & "%'"
علامت & برای چسبودندن یا پیوند زدن دو عبارت رشته ای به هم بکار می ره.
سپس ابتدا لیست رو خالی کردیم :
ListView1.Clear
cursor1 = SQL1.ExecQuery("SELECT * FROM table1 " & condition)
cursor1.RowCount تعداد کل سطرهای یافت شده طبق جستجو رو بر می گردونه.
پس آخرین سطر اندیسش یکی کمتر از تعداد هست.
واسه همین توی حلقه ی For از 0 تا cursor1.RowCount - 1 تکرار رو انجام می دیم و سطر به سطر میایم ستون ها رو می خونیم(ستون های esm و nomre) و ب علامت "|" از هم جدا کردیم برای زیبایی نمایش در listView :
For i = 0 To cursor1.RowCount - 1
cursor1.Position = i
ListView1.AddSingleLine(cursor1.GetString("esm")& "|" &cursor1.GetString("nomre"))
ListView1.SingleLineLayout.ItemHeight = 40
ListView1.SingleLineLayout.Label.TextSize = 20
ListView1.SingleLineLayout.Label.TextColor = Colors.Black
ListView1.SingleLineLayout.Label.Color = Colors.White
Next
-
بعد از اجرا می تونید تایپ کنید و مثل pmd dictionary کار می کنه. بقیشو بدو
-
اینم سورس که خودم ساختم:
http://s5.picofile.com/file/8157708068/search_db.zip.html
اگه بخواید مرتب سازی هم انجام بده مثلا بر حسب ستون esm باید order by esm رو به آخر query(بازجست) اضافه کنید:
یعنی اینطوری:
cursor1 = SQL1.ExecQuery("SELECT * FROM table1 " & condition & "ORDER BY esm")
تابع file.copy میاد یه فایل (در اینجا db1.db که اسم بانک اطلاعاتی ما هست و جدول table1 در اون هست) رو کپی می کنه از مکان اول به مکان مقصد.
file.dirAssets آدرس پوشه ی files داخل خود پروژه رو میده که توی apk پک و بسته بندی میشه و توی اندروید بعد از نصب unPack خواهد شد. و در حقیقت دیتابیس db1.db رو به صورت SQL lite 3 در نرم افزار premium navicat ساختیم و جدول table1 رو هم براش ایجاد کردیم و دیتابیس رو با نام db1.db ذخیره کردیم در پوشه ی Files پروژمون
File.DirInternal هم پوشه ی داخلی اندروید رو چک می کنه که آیا قبلا دیتابیس رو ما کپی کرده بودیم یا خیر؟
اگه کپی کرده بودیم دیگه کپی نکن.
البته می تونیم شرط اول رو برداریم و همیشه بگیم هر وقت یه چیز جدید نصب کردیم تو بیا دیتابیس آپدیت شده ی جدید رو کپی کن.
دلیل اینکه کپی می کنه هم اینه که توی پوشه ی داخلی باشه سرعت کار کمی بالا می ره یا دلایل امنیتی دیگه
-
تمام خط های فوق واسه اتصال به بانک db1.mdb بود.
--
اما بعدش اید جدول رو بخونیم و دستورات SQL برای انتخاب سطرها و ویرایش و آپدیت و درج و مرتب سازی و ... که اینا همشو نمی شد یه جا نوشت چون کثیف کاری میشد.
برای همن منظور یه ساب روتین(sub یا روال یا تابع یا procedure هم می گن) نوشتیم به اسم DBload("") که بیاد اطلاعات جدول رو لود کنه و کدهای لازم رو داخلش نوشتیم و فقط اسمشو صدا زدیم که خودش اونو اجرا کنه به همین سادگی
در مورد چپ و راست چین کردن باید خصوصیات EditText یا ListView یا Label یا حالا غیره رو تغییر بدی که اونو بعدا در بخش دیگه ای بپرس چون الان ذهنم درگیره.
اما این که از word بخونه کار منطقی نیست باید بریزی توی یه ساختار جدولی یال فایل های متنی یا دیتابیس و بهترین کار اینه که با نرم افزارهای مختلف یا ببری به XML (زبان انتقال و حمل داده ها) و بعدش ببری که اکسل یا اکسس یا SQL و ... که اونم الان نمی دونم و بحثش نیست.
شما کارهایی که میخوای بکنی اینه که لغات زبانی PDF یا word ای که توی نت پیدا کردی(مثل من و ... ) رو میخوای ببری به access و اونا همه چیزو آماده نذاشتن تا ما سریع به پول برسیم.
پس باید زحمت بکشید خودتون دستی یکی دو ماه وقت بذارید بکوب یه چیز خوب بسازید یا اینکه یه سری دیتابیس های حاوی لغات رو از تولید کننده ها بخرید ولی ارزشش رو داره.
-
البته ایده های بسیاری هست که باید تمرکز کرد روی برنامه نویسی و طراحی.
-
امیدوارم انشاء ا... با تلاش و مشورت راه براتون باز بشه. بازم سوالی بود بپرسید
خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1