Konu: Tek kullanıcı projeler için SqLite
Vfp ile ilk büyük projemi 2000 senesinde gerçekleşdirdim.
Ve her proje gibi bu da başlangıçta düşünen hedefden çok başka yerlere doğru ilerledi.
En büyük sıkıntım veritaban oldu.
O günden beri XBASE tabanlı veritaban kullanmamaya gayret gösteriyorum ( onun yerine Firebird veya MySQL kullanıyorum ).
Ama bazen, "tek kullanıcı" bir proje için, bu tür veritabanları kullanmak, onu kurmak, bakım vermek çok anlamsız oluyor. Ama insan okadar çabuk SQL bazında düşünmeye alışıyorki, XBASE komutları kullanmak zor geliyor.
Geçenlerde sık sık ismini duyduğum SqLite veritabanını bir projede kullandım.
Ve çok memnun kaldığım.
Uyarı: SqLite sadece tek kullanıcı için tasarlanmışdır
SqLite: http://www.sqlite.org/download.html
Ordan "Precompiled Binaries For Windows" bölümdem sqlite-3_6_21.zip (270kByte) (veya şu an ne güncelse) onu indiriniz.
İçindeki sqlite3.exe isimli dosyayı C:\Windows\system32 altında kopyalayınız. Herhangi başka biryerde olabilir, ama o zaman yerini %PATH% 'a eklemeniz lazım.
Sıra ODBC sürücüde: http://www.ch-werner.de/sqliteodbc/
Son sürümü (Current version) sqliteodbc.exe indiriniz ve kurunuz.
System32 altına epey birşeyler kuruyor; gerekli olan asıl sadece sqlite3odbc.dll.
Programınızı başka bir bilgisayara kurarken, size 2 dosya lazım: sqlite3.exe ve sqlite3odbc.dll.
sqlite3odbc.dll sisteme şu komut ile tanıtıyoruz:
rundll32 "C:\WINDOWS\system32\sqlite3odbc.dll",install quiet
Şimdi veritabanı yaratıyoruz. Buda command prompt ile yapılıyor:
sqlite3 "C:\Program Files\xxxx\yyy\Data\test.db" "select 1;"
sqlite test.db isimli bir dosya yaratıyor. Boyutu sıfır.
Vfp ile veritabana bağlanmak için:
#DEFINE FALSE .F.
#DEFINE TRUE .T.
#DEFINE SQLITE_CONNECTION "DRIVER=SQLite3 ODBC Driver;Database=Data\test.db;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"
* Bağlantı kuruyoruz
nSQL = SQLSTRINGCONNECT( SQLITE_CONNECTION )
IF TYPE("nSQL") == "L" OR nSQL < 1
nSQL = 0
AERROR(ErrorArray)
RETURN FALSE
ENDIF
LOCAL nAntw, cSQL
cSQL = "CREATE TABLE IF NOT EXISTS Kullanici ("
cSQL = cSQL + "id_nr INTEGER PRIMARY KEY, "
cSQL = cSQL + "kullanici VARCHAR(8) DEFAULT '' NOT NULL,"
cSQL = cSQL + "parola VARCHAR(8) DEFAULT '' NOT NULL,"
cSQL = cSQL + "sifre VARCHAR(6) DEFAULT '' NOT NULL)"
nAntw = SQLEXEC(nSql, cSQL)
IF nAntw != 1
AERROR(ErrorArray)
MESSAGEBOX(ErrorArray(2))
RETURN FALSE
ENDIF
* Kullanıcı tabloya birşeyler ekliyoruz
cSQL = "INSERT INTO Kullanici VALUES( NULL, "Mehmet K", "password_1", "password_2")
nAntw = SQLEXEC(nSql, cSQL)
IF nAntw != 1
AERROR(ErrorArray)
MESSAGEBOX(ErrorArray(2))
RETURN FALSE
ENDIF
* veya değişkenlerle:
LOCAL cName, cPwd_1, cPwd_2
cName = "Ali Veli"
cPwd_1 = "gizli"
cPwd_2 = "çok gizli"
cSQL = "INSERT INTO Kullanici VALUES( NULL, ?cName, ?cPwd_1, ?cPwd_2)
nAntw = SQLEXEC(nSql, cSQL)
IF nAntw != 1
AERROR(ErrorArray)
MESSAGEBOX(ErrorArray(2))
RETURN FALSE
ENDIF
* Sorgulamak:
Local cName
cName = "Ali Veli"
cSQL = "Select * From Kullanici Where kullanici = ?cName", "qTmp")
nAntw = SQLEXEC(nSql, cSQL)
IF nAntw != 1
AERROR(ErrorArray)
MESSAGEBOX(ErrorArray(2))
RETURN FALSE
ENDIF
IF Reccount("qTmp") == 0
Messagebox("Kullanici bulunamadi.")
ENDIF
Messagebox(qTmp.kullanici)
USE IN "qTmp"
* ve bağlantıyı kapatiyoruz
=SQLDISCONNECT(nSql)