1 Son düzenleyen, Mehmet K (05.01.2010 11:30:40)

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:

Visual Fox Pro
#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)
Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

2

Re: Tek kullanıcı projeler için SqLite

Mehmet;

Eğer "tek kullanıcı" lı bir programsa xbase yani DBF fazla fazla yeterli değilmi?!

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3 Son düzenleyen, Mehmet K (05.01.2010 13:45:16)

Re: Tek kullanıcı projeler için SqLite

Tabiki. Ama yukarda belirtiğim gibi: sürekli SQL komutlarla çalışınca, insan ister istemez SQL mantığı ile düşünmeye başlıyor ve XBASE kullanmak zor gelmeye başlıyor.

Edit:
Küçümsememek gereken bir konu daha var. Diyelim proje birden boyutunu değiştirdi. Sadece #DEFINE 'i değiştirerek aynı programla herhangir bir kod değişikliği yapmadan istediğim bir MySQL veya Firebird veritabanına bağlanırım.

Visual Fox Pro
MySQL:

#DEFINE SQLITE_CONNECTION "DRIVER={MySQL ODBC 3.51 Driver};server=localhost;Port=3306;uid=username;pwd=my_password;database=testdb"
 
Firebird:
#DEFINE SQLITE_CONNECTION "DRIVER={"XTG Systems Interbase6 ODBC driver};DB=localhost;uid=username;pwd=mypassword;CHARSET=WIN1254;"
Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

4

Re: Tek kullanıcı projeler için SqLite

Mehmet;

HazırFireBird kullanan birisini bulmuşken bir soru: Firebird hakkındaki yorumların nedir?

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5

Re: Tek kullanıcı projeler için SqLite

Mehmet,
Paylastigin icin oncelikle tesekkurler. Negatif fikirleri de yazmanin faydasi baskalarinin vakit kaybini engellemek acisindan onemli olabilir diye dusundugumden yaziyorum (ticari urun olsaydi, olumsuz fikirlerimi beyan etmek yerine sessiz kalmak gibi bir huyum vardir ama bu acik kaynak).
SqLite'i ben de kullanmaya kalkmistim (ozellikle Vista'da kullanicilarin 'lokal' degerlerini saklamak icin) ama biraktim. Benim hosuma gitmeyen eksileri:

-OleDb surucusu yok(tu - belki simdi vardir)
-IDE'si yok
-Ayni makinede multiple process kullanimi DBF'e cok benziyor, DBF gibi dosya bazli olunca alternatif olmuyor (DBF'i hem ODBC hem de OleDb ile kullanabildigimden SqLite'dan daha efektif VFP kullanan birisi icin - databaseler arasinda gecis hic de sadece bir #define degistirmek kadar basit olmasini ben cok isterdim ama kazin ayagi gercekte oyle degil. Buna en yakin CursorAdapter, onda da olmuyor gene:).
-SQL CE gibi multiple process/cross domain/replication vs destekleyen C/S bir cozum varken neden SqLite kullanayim. Tek kullanicili bir uygulamanin datasi herhalde SQL CE ve/veya SQL SE sinirlarini gecmez. Gerci .Net ile kullanildiginda paralel islemlerden yararlanmasi artisi olacak ama eksileri daha cok.

Olumsuz beyanlar icin ozur dilerim.

6

Re: Tek kullanıcı projeler için SqLite

ugurlu2001 yazdı:

Mehmet;

HazırFireBird kullanan birisini bulmuşken bir soru: Firebird hakkındaki yorumların nedir?

Çok memnunum.
Şu an bir devlet dairesinde 3. senedir bir programın çalışıyor. Sonderece vazat bir bilgiişlemleri olmasına ramen, tıkır tıkır çalışıyor. "Kurdum ve unutum" diyebilirim.
Tek dezavantajı: ODBC desteği biraz problemli olabiliyor.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

7

Re: Tek kullanıcı projeler için SqLite

Merhaba Cetinbasoz

cetinbasoz yazdı:

-IDE'si yok


http://www.sqlite.org/cvstrac/wiki?p=ManagementTools
http://en.wikipedia.org/wiki/SQLite
Ayrıca ODBC sürücünin içinden galiba bir IDE çıkıyor.

cetinbasoz yazdı:

Olumsuz beyanlar icin ozur dilerim.

big_smile rica ederim. Istersen SqLite kullanan kurumlara bir göz at: http://www.sqlite.org/famous.html

cetinbasoz yazdı:

-SQL CE gibi (...) varken

Mümkün oldukca MS ürünleri kullanmiyorum. Örneğin kendi makinemde MS-Office, vs. yoktur. 
Visual FoxPro? FoxPro ile ilk ilker programlarımı yazmaya başladığımda, Microsoft ürünü değildi. Sonra satın alındı.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

8

Re: Tek kullanıcı projeler için SqLite

Bende oyle MS kullanmiyorum hevesi yok, Ben kullaniyorum, en basta da Windows ve VFP. Verdigin linktekilerin hicbirisinin SQLite'i VFP ile kullandigini sanmam:) .Net olsa eyvallah, EF destegini bile verdiler.

9

Re: Tek kullanıcı projeler için SqLite

Verdiğim linkte herhangi birileri SqLite 'ı Vfp ile birlikte kullandığını bende sanmiyorum. SqLite daha çok C ve C++ ile kullanılıyor.
Ama Vfp ile kullanmak mümkün.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

10

Re: Tek kullanıcı projeler için SqLite

bence sqlexpress kullanmak daha iyi. en azından proje büyüdüğünde hiç kod değişikliği yok. sadece paralı sql serveri kuruyorsun. herşey bitiyor... hatta sql server in hiç denemedim ama bir de portable versiyonu da var galiba hiç install bile istemeyen.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

11

Re: Tek kullanıcı projeler için SqLite

SQL CE (tek bir data dosyasi, tek ya da cok kullanicili), SQL server client suruculer. Ustelik hem SQL CE, hem express merkezi bir baba SQL servera replikasyon baglantisi yapabiliyor.

12

Re: Tek kullanıcı projeler için SqLite

Ek bilgi SQL CE 4GB a kadar veri saklayabiliyor SQLExpress gibi

http://www.soykansoft.com/images/twitter.jpghttp://www.soykansoft.com/images/wp.jpg

13

Re: Tek kullanıcı projeler için SqLite

Bu konuda ben Mehmet Bey 'e katılıyorum. Şu anda üstünde çalıştığım projede VFP, C++, C#, PHP, Java yazılımları ile birlikte database tarafında SQLite, MySQL, Firebird, PostgreSQL ve VFP kullanıyorum. Crosscheck autonticationlar olması nedeniyle biraz karışık ve hybrid bir yazılım oldu. Başlangıçta SQLExpress 2008 ile başlamıştım. Ancak, locallerde tek kullanıcılı DB ye ihtiyacım olduğundan ve daha basit deploy edebildiğimden ben de SQLite ı tercih ettim. Ayrıca SQLite ı mozilla firefox eklentisi ile kullanarak IDE sorunu da çekmiyorum. Bu arada benden başka birinin daha VFP ile birlikte SQLite kullyor olmasına sevindim.

Tekin Başöz
Yapay Zeka Ltd.

14

Re: Tek kullanıcı projeler için SqLite

Merhaba Tekin
Firefox 'un bir SqLite addon'u olduğunu bilmiyordum. Hemen yükledim .... çok pratik ama türkçe karakterler bozuk çıkıyor. Sendedemi öyle?

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

15

Re: Tek kullanıcı projeler için SqLite

Evet haklısın. Ancak, ben Türkçe karakter hiç kullanmadığım için açıkçası üstünde hiç durmadım.

Tekin Başöz
Yapay Zeka Ltd.

16

Re: Tek kullanıcı projeler için SqLite

Ben IDE olarak SqLite-Browser kullaniyorum. Çok menunum.
Vers.1.3'e kadar standalone çalışıyordu.
Son versiyonda birkaç dll'e ihtiyacı var.
http://sourceforge.net/projects/sqlitebrowser/files/

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

17 Son düzenleyen, ugurlu2001 (04.09.2015 13:20:53)

Re: Tek kullanıcı projeler için SqLite

Merhaba Arkadaşlar;

Sqlite 'a normal bir şekilde bağlanabiliyorum. Select, Insert ve Update kısımlarında da sorun yok.

Türkçe karakterlerde ise sorun yaşıyorum. Insert ettiğim veriyi herhangi bir editörden görüntülediğimde gayet normal  görünüyor. Yani Türkçe karakterlerde  sorun yok. Editör olarak SqliteStudio kullanıyorum.

Ancak Veriyi VFP içerisinde bir cursor a aldığımda ise türkçe karakterler bozuk görünüyor.

Sorunun çözümü için önerisi olan arkadaşlara şimdiden teşekkür ederim.

Sevgiler...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

18

Re: Tek kullanıcı projeler için SqLite

Visual Fox Pro
Strconv(field_name,11)

İpucu için Mehmet 'e teşekkürler smile

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

19

Re: Tek kullanıcı projeler için SqLite

Uğur, ben SqLite'i çok büyük projelerde kullanıyorum ve senin belirtiğin problem hiç bir yerde karşıma çıkmadı. Yani strconv() kullanmaya gerek yok.
Sende başka bir sorun olması lazım. Bana PM olarak database'i gönderebilirmisin lütfen.

Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

20

Re: Tek kullanıcı projeler için SqLite

Gönderdiğin veritabanı inceledim.
Orda dikkatimi çeken: SqLiteDataBrowser ile veritabanı incelediğimde, table'deki türkçe karakterleri okuyabiliyorum.  Onlar bende hepsi bozuk gözüküyor.
Soru: sen tabloya yazarken, Vfp program içindenmi yazdın? Yoksa dışardan, örneğin SqLiteDataBrowser veya benzer bir araç kullanarakmı?
Ekteki resimlere bir göz atarsan, demek istediğimi belki daha iyi anlatmış olurum.

İleti eklentileri

ugur1.png
ugur1.png 11.32 kb, dosya hiç indirilmedi. 

ugur2.png
ugur2.png 27.84 kb, dosya hiç indirilmedi. 

Bu iletideki eklenti/leri indirmeye yetkiniz yok.
Bir projenin bitmesi için 3 seçenek vardır: hızlı, ucuz, iyi. Bu seçeneklerden iki tanesini seçiniz.

21

Re: Tek kullanıcı projeler için SqLite

Merhaba Mehmet;

Sqlite deki verileri VFP nin içersinden yazıyorum. Bu kısımda hiç bir sorun yok.

SqliteStudio ile veritabanına yazdığım bilgiler normal görünüyor. Yani Türkçe karakterlerde sorun yok.

Ne zaman Sqlite DB deki verileri tekrar Foxpro ile okumak istiyorum 'Select * From  TabloAdi'... İşte o zaman Türkçe karakterler saçmalıyor.

Yarın sana bendeki görünüme ait resimleri post ederim ...

Sevgiler ...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

22 Son düzenleyen, ugurlu2001 (09.09.2015 09:43:18)

Re: Tek kullanıcı projeler için SqLite

Konu biraz çetrefilli hale geldi.

Şöyle ki;

Eğer SQLite bağlantısını form içinden yapıyorsam;  Insert ve sonrasındaki Select komutlarında giden-gelen data foxpro da normal görünüyor. Bu kısımda; SQLite içerisinde ki data, herhangi bir editörle görüntülendiğinde Türkçe karakterler bozuk oluyor. Gerçi editörlerle bağlantı kısmı beni ilgilendirmiyor.

Eğer; SQLite bağlantısını, bir PRG içerisinden CLASS tanımlaması ile yapıp, Insert ve sonrasında Select yaptığımda Insert edilen sonrasında SELECT yapılan data içindeki Türkçe karakterler tuhaf görünüyor.  Codepage için StrConv(data_field,11) kullanmadan Türkçe karakterleri normal görüntülemiyorum.

Mehmet sağolsun, zaman ayırıp basit bir örnek gönderdi, Form üzerinde herşeyin normal olduğunu o sayede farkettim.

Çetin Üstat a da ayrıca teşekkür ediyorum, hatırı sayılır bir zaman ayırıp, semptomun teşhisinde yardımcı oldu. Ayrıca şu iki komut ile bir yol gösterdi.

Özetle, sorun temelde, UTF tipindeki karakterlerde, Foxpro nun yetersiz kalması. Yoksa eski bir teknoloji olması mı demeliydim?

Visual Fox Pro
Cursorsetprop("MapVarchar",.F.,0)

Cursorsetprop("MapBinary",.F.,0)

Sorunun tam çözümünü bulursam burada sizlerle paylaşacağım.

Sevgiler

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

23 Son düzenleyen, ugurlu2001 (09.09.2015 11:57:21)

Re: Tek kullanıcı projeler için SqLite

Ve sonunda SQLite deki Türkçe sorunun kaynağını buldum....

Saçma sapan denicek türde bir durum var.

Şimdi sorun; problemi nasıl çözeğimle ilgili. Açıkçası aklıma mantıklı bir çözümde gelemiyor.

Öncelikle semptomu şöyle izah edeyim, sonra örneği paylaşayım :

Eğer Sqlite içerisine yazılacak "Türkçe Karakter içeren" veri  doğrudan TEXT in içerisine yazılıyorsa; Veriyi SELECT ile aldığınızda, Türkçe karakterler hatalı görünüyor:

Visual Fox Pro
=SqlExec(nconnectionNo, [ Insert Into table_name (field_name) Values ("ÇçÖöİiŞşÜüĞğIı") ] )

Şayet Sqlite içerisine "Türkçe Karakter içeren" veri Parametre ile yazılıyorsa, bu şekilde Sqlite den SELECT ile veri çektiğinizde Normal görünüyor:

Visual Fox Pro
m.lcString = "ÇçÖöİiŞşÜüĞğIı"

=SqlExec(nconnectionNo, [ Insert Into table_name (field_name) Values (?lcString) ] )

Şimdi sorum şu:
Eğer Insert işlemini doğrudan TEXT ile yaparsam ( yani parametre kullanmadan TEXT / ENDTEXT ) içerisinde; bu sorunun önüne nasıl geçebilirim?

Sevgiler....

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü