$ PureBasic ve SQLite ile Pratik Bir To-Do (Yapılacaklar) Uygulaması
PureBasic'in en güçlü yanlarından biri, harici bağımlılıklara ihtiyaç duymadan hızlı ve küçük masaüstü uygulamaları oluşturabilmesidir. Bu gücü, sunucusuz bir veritabanı motoru olan SQLite ile birleştirdiğimizde, verilerini tek bir dosyada saklayan, pratik ve tamamen yerel uygulamalar yapabiliriz. Bu makalede, bu ikiliyi kullanarak basit bir "Yapılacaklar Listesi" (To-Do) uygulaması yapacağız.
Neden SQLite?
SQLite, sunucu kurulumu gerektirmeyen, veritabanını tek bir dosyada tutan, C tabanlı bir kütüphanedir. PureBasic, SQLite komutlarını dahili olarak destekler. Bu, veritabanı işlemleri için harici bir DLL veya kütüphane eklemenize gerek olmadığı anlamına gelir. Bu kombinasyon, taşınabilir ve kurulum gerektirmeyen uygulamalar için mükemmeldir.
Uygulama Mimarisi
Uygulamamız şu temel bileşenlerden oluşacak:
- Veritabanı: Görevleri saklamak için
tasks.dbadında bir SQLite dosyası. - Ana Pencere: Görevleri listeleyeceğimiz ve yeni görevler ekleyeceğimiz ana arayüz.
- Arayüz Elemanları:
ListViewGadget: Mevcut görevleri göstermek için.StringGadget: Yeni bir görev metni girmek için.ButtonGadget: "Ekle" ve "Sil" işlemleri için.
- Fonksiyonlar: Veritabanından görevleri yükleyen, yeni görev ekleyen ve mevcut bir görevi silen yardımcı prosedürler.
PureBasic ve SQLite Kodu
Aşağıdaki tam kod, uygulamamızın tüm mantığını içermektedir. Kod, veritabanını açar, gerekli tabloyu oluşturur, arayüzü çizer ve olay döngüsünü yönetir.
;- Sabitler ve Global Değişkenler
Enumeration
#Window_Main
#List_Tasks
#Input_Task
#Button_Add
#Button_Delete
EndEnumeration
Global db
;- Prosedürler (Fonksiyonlar)
Procedure LoadTasks()
ClearGadgetItems(#List_Tasks)
If DatabaseQuery(db, "SELECT id, task FROM tasks ORDER BY id")
While NextDatabaseRow(db)
; ListView'e görevin metnini ekle, ID'sini de veri olarak ata
AddGadgetItem(#List_tasks, -1, GetDatabaseString(db, 1))
SetGadgetItemData(#List_tasks, CountGadgetItems(#List_tasks) - 1, GetDatabaseLong(db, 0))
Wend
FinishDatabaseQuery(db)
EndIf
EndProcedure
;- Ana Program Akışı
UseSQLiteDatabase() ; SQLite desteğini aktif et
dbFile.s = "tasks.db" ; Veritabanı dosyasının adı
If OpenDatabase(0, dbFile, "", "")
db = 0 ; Veritabanı bağlantı numarasını değişkene ata
; 'tasks' tablosu yoksa oluştur
DatabaseUpdate(db, "CREATE TABLE IF NOT EXISTS tasks (id INTEGER PRIMARY KEY, task TEXT)")
Else
MessageRequester("Hata", "Veritabanı açılamadı: " + dbFile)
End
EndIf
; Ana Pencere ve Arayüz Elemanları
OpenWindow(#Window_Main, 0, 0, 500, 400, "PureBasic To-Do Listesi", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#List_Tasks, 10, 10, 480, 300)
StringGadget(#Input_Task, 10, 320, 370, 25, "")
ButtonGadget(#Button_Add, 390, 320, 100, 25, "Ekle")
ButtonGadget(#Button_Delete, 10, 355, 100, 25, "Seçileni Sil")
LoadTasks() ; Program başlarken görevleri veritabanından yükle
;- Olay Döngüsü
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case #Button_Add
taskText.s = GetGadgetText(#Input_Task)
If taskText <> ""
; SQL Injection'a karşı parametre kullanımı
DatabaseUpdate(db, "INSERT INTO tasks (task) VALUES (?)")
SetDatabaseString(db, 0, taskText)
SetGadgetText(#Input_Task, "") ; Girdi alanını temizle
LoadTasks() ; Listeyi yenile
EndIf
Case #Button_Delete
selected = GetGadgetState(#List_Tasks)
If selected > -1
taskID = GetGadgetItemData(#List_Tasks, selected)
DatabaseUpdate(db, "DELETE FROM tasks WHERE id = ?")
SetDatabaseLong(db, 0, taskID)
LoadTasks() ; Listeyi yenile
EndIf
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
CloseDatabase(db) ; Program kapanırken veritabanı bağlantısını kapat