Turning gears are the logo of co-scripts

 

Pek çok SQL sunucuda oluşturulan tablolarda sürekli ve düzenli olarak kayıtları takip eden bir nirengi noktasına ihtiyaç duyulur. Genellikle bu otomatik artması için "auto increment" özelliği olan * bir alan olarak, genellikle de "id" adı verilen INTEGER veri tipinde bir alandır.

Ancak deneme yanılma yaparken çok farklı yerlere giden veya herhangi bir nedenle güncellenmesi en azından sıfırlanması gereken id alanı sorun olur. Biraz google araması bizi sonuca ulaştırır ve birden çok çözümü vardır.

Ancak bu yazıda SQLite tablolarında bu nasıl pratikçe yapılır ondan bahsetmek istedim.

SQLite tablolardaki uç değerleri (en çok artan key -primary key- değerleri gibi)  özel bir tabloda tutar (sqlite_sequence). Şurada detaylı bilgi mevcut.

Bu tablo yine herhangi bir tablo gibi sql ile güncellenebilir, silinebilir veya modifiye edilebilir.

Diyelim "evrak_tipleri" isminde, ofisimizdeki evrak tiplerini tuttuğumuz bir tablo olsun. Tabloyu silmek ve id değerini 2 den başlayacak şekilde yine auto increment olarak ayarlamak istiyoruz.

Sevdiğimiz bir sql bağlantısı yönetim programında (Navicat Premium veya Mozilla eklentisi olan (SQLite için) SQLite Manager add-on veritabanına bağlanıp sql komutlarıyla id bilgisini dilerek veya güncelleyerek istediğimizi yaparız.

	SELECT * FROM sqlite_sequence

ile tablo isimlerimizi ve RowID'leri tutan tabloya ulaşıyoruz. "name" ve "seq" adında iki alan göreceğiz. Name tablo isimlerini seq'de rowid sequence'lerini tutmaktadır.

	SELECT * FROM sqlite_sequence ss WHERE ss.name='evrak_tipleri'

ile evrak_tipleri tablosuna ait veriyi görebiliriz.

	UPDATE sqlite_sequence SET seq=0 WHERE name='evrak_tipleri'

ile evrak_tipleri tablosunun seq de yer alan rowid değeri sıfırlanmış oldu.

Bu işlemin otomatik arttırma algoritmasını bozabileceğini SQLite dökman sayfasında yazıyor. Çok ciddi bir veri işinde iseniz 2. bir alanda düzenli artan id'yi ayrıca tkaip etmenizde ve normal id ile arada bir kontrol ile test etmenizde fayda var.

Bu konuda ek bilgiler edindikçe bu yazıyı güncelleyeceğim.

VTleri lütfen kendi riskinizle kurcalayınız. Yedek alınız, sonra ah vah demeyiniz.

co-scripts tag image sqlitereset auto incrementreset idsqlite_sequenceseqreset id
ID:264 | Okunma:2944


 

SQL içerisinde bizi ek kod yazmaktan kurtaran pek çok hazır fonksiyon ve komut vardır. Bunlardan birisi de CONVERT (ve CAST)'tır.

Çok basit bir şekilde  CONVERT(sonuçVeritipi,BaşlangıçDeğeri,biçim) gibi gösterilebilir. İlk ağızdan şuradan bakabilirsiniz.

Örnek: "INSERT INTO kayitlar (adet,yenitarih) VALUES (5,CONVERT(smalldatetime,'"°isken&"',103)
103 tarih formatıdır. Belirtilen kaynakta çok güzel açıklanmış.

Şu bağlantıda çok güzel datetime örnekleri var.

co-scripts tag image convertcastsqldatatypeveritipi cevirimleriveri tipi cevirileri
ID:251 | Okunma:3943


 

Birbirinin aynı yapıda ve veri tiplerini içeren iki tablomuz var ve bunların tüm verisini içlerindeki bir alana göre sıralı almak istersek ne yapabiliriz?

SELECT * FROM ((select * from tablo_1) union (select * from tablo_2)) AS tablomuz order by tarih DESC

Çözümlerden birisi olabilir.

co-scripts tag image unionorder byselect
ID:222 | Okunma:1687


 

Rasgele kelimesi doğrudan veritabanını değil de yazılım dilini ilgilendiriyor gibi duruyor. Eskiden de öyleydi. Ancak MSSQL son iki sürümünde newID() komutuyla rasgele işini çocuk oyuncağı yaptı. Aşağıda basit bir örnek mevcut.

 

SELECT * FROM tabloAdi ORDER BY newID()
co-scripts tag image newid()mssqlrasgelerandomrasgele kayit almak
ID:142 | Okunma:1793


 

Merhaba, 

SQLite adının biraz berisinde bir server değil. Resmi sayfasında da dediği gibi kendinden barındırmalı, sunucusuz, ayar gerektirmeyen, transeksiyonel bir veri tabanı motoru olan bir yazılım kütüphanesidir. C ile yazılmıştır. En büyük özelliklerinden bir tanesi bir sunucuya ihtiyaç duymaksızın kullanılabilmesidir. Bir diğer büyük özelliği ise verileri tek bir dosyada barındırmasıdır. Kütüphaneleri 500 K'dan küçüktür. Verileri doğrudan SQL komutlarıyla girebileceğiniz gibi sürücüleri yardımıyla bir veritabanı olarakta kullanabilirsiniz. Hali hazırda pekçok bildik marka ürünlerinde SQLite kullanmaktadır.

Windows 32 kullandığınızı düşünerek yazıyorum. SQLite'i makinanıza kurun. Son derece basit bir kurulumu var. ODBC sürücüsünü de makinaya kurun. FireFox eklentisini kurduktan sonra FF içinden Araçlar>SQLite Manager seçeneğinden SQLite Manager'ı çalıştırabilirsiniz. Yeni veritabanı oluşturmayla ve tablo yaratarak alanlar eklemeyle ilgili seçenekleri zaten veritabanı uygulamalarından biliyorsunuzdur. Bu nedenle SQLite Manager de zorlanacağınızı sanmıyorum. Veritabanı .sqlite uzantısıyla saklanıyor. Eski sürümlerde sanırım uzantı farklıymış. SQLite Manager tamanını görebiliyor ve düzenleyebiliyor. 
Vereceğim örnekte vbscript kullarak HTA içerisinden kayıt ve okuma yapılabiliyor. Öncelikle bağlantı cümlesi geliyor

		Dim oCS
		oCS= "Driver={SQLite3 ODBC Driver};Database=kordas.sqlite;StepAPI=;Timeout="
		Dim oCNCT
		Set oCNCT = CreateObject( "ADODB.Connection" )
		oCNCT.Open oCS

Örnekteki kordas bizim veritabanı adımız. Çalıştığımız klasörde açıkça kordas.sqlite olarak görebiliriz. Bu dosyayı FF içindeki addon'u (SQLite Manager) kullanarak oluşturduk. Tüm tabloları ve tablo alanlarını (alan veri tipleri dahil) FF içinden yaparsak zaman kazanırız.

Daha sonra klasik sql cümlemizi çalıştırmanın zamanı geldi;

	Set verilerimiz = oCNCT.Execute("SELECT * FROM tablomuzunAdi")
Do While Not verilerimiz.eof
'istenilen veriler ve diğer işler
Loop
verilerimiz.movenext

Bunun gibi istenen diğer işler sql içerisinde yapılabiliyor. Bir SQL motorundan ne bekliyorsanız SQLite'da mevcut. Serverdaki bazı özellikleri kullanmıyorsanız ve özellikle taşınabilir ve masaüstü yazılımlarda kullanılabilir bir şey arıyorsanız SQLite tam size göre.

Burada ki vbscript kullanımını ve HTA içerisindeki örneği HTA ile ilgili ilerki bir  yazımda anlatacağım.

co-scripts tag image sqlitehtasqlite ve vbscriptsqlite adodb surucusu
ID:118 | Okunma:6592