The Way Of Life
Google

Sunday, June 12, 2022

Cara Membuat Query Dengan SQL Server Untuk Visualisasi Data


Kali ini saya akan berbagi tips untuk membuat query / SQL dengan SQL Server agar data yang kita ambil bisa untuk digunakan dalam membuat Visualisasi Data dengan Google Data Studio.

Contoh yang saya gunakan adalah menggunakan database dari program yang dibuat oleh pihak lain bukan database dari program yang kita buat sendiri, meskipun tips ini juga bisa digunakan untuk database yang kita buat sendiri. Dan tentunya akan lebih mudah karena kita akan sangat paham dengan desain database yang kita buat.

Langkah Pertama yaitu  Tentukan data apa saja yang diperlukan.

Contoh : Kita akan membuat visualisasi data untuk grafik nilai pelajaran tiap siswa per kelas dalam 1 tahun ajaran ( Semester 1 dan Semester 2 ) tahun 2021 s/d 2022. Kemudian data apa saja yang perlu kita tampilkan, misal kita memerlukan data nama siswa, nilai, kelas, dan kapan ( tanggal ) nilai tersebut diberikan.

 Langkah kedua yaitu Mapping Data.

Pada sebagian besar program atau aplikasi yang menggunakan database akan menggunakan Relational Database, yang akan menggunakan field primary key untuk menghubungkan data dari tabel satu dengan tabel lainnya. Contoh : pada database program untuk system informasi sekolah kita mempunyai table Siswa yang mempunyai field primary key : kodesiswa, dan kodesiswa akan menjadi foreign key pada table lainnya dan biasanya berulang. Seperti gambar di bawah ini:

 

Primary Key dan Foreign Key

Temukan dan Catat tabel dan field yang diperlukan.

Tips untuk mencari field (primary key) dengan cepat pada database SQL Server anda bisa menggunakan Query / SQL di bawah ini:

 SELECT Table_Name, Column_Name

FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_CATALOG = ‘NamaDatabase’

AND COLUMN_NAME LIKE '%NamaField%'

 Jika tabel dalam database menggunakan schema maka anda perlu membuat Query lagi dengan mencari tabel yang sudah anda temukan pada langkah pertama. Seperti dibawah ini:

 SELECT SCHEMA_NAME(T.SCHEMA_ID) AS SCHEMA_NAME,

       T.NAME AS TABLE_NAME,

       T.CREATE_DATE,

       T.MODIFY_DATE

FROM SYS.TABLES T

WHERE T.NAME LIKE  '%NamaTabel%'

ORDER BY TABLE_NAME;

Setelah selesai menemukan daftar tabel dan field yang anda perlukan adalah:

Langkah ketiga : Membuat Query / SQL

Sebelum anda membuat query / SQL anda perlu mengetahui bagaimana sebuah perintah SQL / Query dijalankan, agar anda dapat membuat query dengan benar dan menghasilkan data yang tepat. 

Berikut ini adalah urutan Proses Query  :

  1. Mengambil Data (FROM, JOIN)
  2. Filter Data (WHERE)
  3. Grouping Data(GROUP BY)
  4. Group Filter (HAVING)
  5. Memilih data yang akan ditampilkan (SELECT)
  6. Mengurutkan Data & Memilah/Membagi data (ORDER BY & LIMIT )

Dari urutan di atas, maka sebuah query akan mengambil data terlebih dahulu dengan mengeksekusi perintah FROM dan JOIN ( jika ada), kemudian mem-filter data yang diambil dengan perintah WHERE dan seterusnya. Artinya memilih tabel kemudian field yang benar adalah hal penting dan utama dalam membuat query, karena jika salah tabel kemudian salah memilih field yang tentu saja pasti salah, maka data yang dihasilkan hanya merupakan data sampah.

Untuk perintah JOIN, anda juga harus paham dengan berbagai tipe JOIN(INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN), karena akan menghasilkan hasil yang berbeda. Anda bisa mempelajarinya di sini dahulu. Karena jika anda tidak paham, ketika ada kesalahan hasil data, anda akan sulit memperbaiki perintah SQL-nya. Anda bisa membayangkan, proses mengambil data ini seperti menambang "emas" dari tumpukan data.

Pada program atau datatabase  yang dibuat oleh pihak lain, meskipun anda diberi akses untuk menjalankan query / SQL biasanya anda tidak diberi akses untuk membuat view atau tabel temporary. Tetapi jika database ini adalah buatan anda sendiri tentu tidak menjadi masalah untuk membuat query yang lebih kompleks. Oleh karena itu yang akan saya bagikan disini adalah membuat query dengan teknik yang sederhana yaitu dengan perintah SELECT, INNER JOIN, WHERE, GROUP BY, CASE. Selain lebih mudah dipahami oleh diri kita sendiri, juga mudah dipahami oleh teman yang lain.

Misal pada Langkah kedua kita sudah mendapatkan tabel dan field yang kita perlukan, misal Tabel : SISWA ( field : KodeSiswa, NamaSiswa ), PELAJARAN( KodePelajaran, NamaPelajaran), TRANSAKSINILAISISWA ( KodeSiswa, , KodePelajaran, Nilai, Tanggal). Gunakan INNER JOIN atau perintah JOIN yang lain untuk menghubungkan antara primary key dan foreign key antar tabel. Untuk ini anda harus paham bagaimana dan dimana aplikasi menyimpan data di tabel dan menggunakan field apa saja. Misal ada field untuk menyimpan status siswa tersebut aktif atau tidak , ini tentu saja harus anda tambahkan dalam query setelah perintah WHERE: misal StatusSiwsa = 1 ( True ).

SELECT NamaSiswa, NamaPelajaran,Nilai, Tanggal

FROM Siswa AA

INNER JOIN TransaksiNilaiSiswa BB on BB.KodeSiswa = AA.KodeSiswa

INNER JOIN Pelajaran CC ON CC.KodePelajaran = BB.KodePelajaran

WHERE BB.Tanggal BETWEEN ‘2021-mm-dd’ AND ‘2022-mm-dd’

Hasil Query di atas akan menghasilkan data seperti di bawah ini , yang bisa digunakan untuk Visualisasi Data pada Goole Data Studio

 

Hasil Query

Salah satu masalah yang sering muncul pada query / SQL menggunakan INNER JOIN adalah munculnya data double. Tentu saja anda harus memahami cara kerja query dan paham koneksi antar data. Solusinya biasanya anda harus mengurangi pengkoneksian data dengan INNER JOIN yang berulang menggunakan primary key atau foreign key yang sama pada tabel yang  berbeda, karena akan memunculkan data yang sama lebih dari satu.
Dan dari sini anda akan mengetahui apakah desain database tersebut dibuat menggunakan teknik normalisasi data atau tidak, karena jika tidak akan timbul banyak redudansi data sehingga andapun akan kesulitan dalam membuat query untuk menghasilkan data yang valid.

Langkah keempat: Cek apakah data hasil dari query sudah valid, untuk langkah ini anda bisa mengecek dengan metode sampling ataupun random cek. Apalagi untuk database yang dibuat oleh pihak lain, anda harus yakin dahulu data yang dihasilkan sudah valid, sehingga anda tidak menarik data sampah dari query yang anda buat. Karena data yang salah akan menghasilkan analisa dan keputusan yang salah.

Pada prakteknya tentu anda harus menggunakan sedikit improvisasi, tetapi menggunakan metode yang sama. Jadi anda harus menguasai inti dari metode ini, sehingga bisa diaplikasikan di berbagai kasus yang berbeda. Di bawah ini saya mencontohkan dengan data yang real sehingga bisa menjadi gambaran yang lebih jelas.

 

Contoh Implementasi


Semoga Bermanfaat.


Software :

Google Data Studio

Microsoft SQL Server 2019

SQL Server Management Studio 18


Labels: , , ,

Thursday, May 25, 2017

Multiple-step operation generated errors. Check each status value.


Kali ini saya akan sharing ringan untuk pengecekan error yang muncul pada Ms Visual Basic 6.
Error yang muncul kali ini adalah "Multiple-step operation generated errors. Check each status value." Setelah saya trace masalahnya adalah karena besarnya text yang akan dimasukan ke tabel lebih besar dari besar field yang ada pada database. Berikut potongan source code-nya.

oRS.Open "SELECT TOP 1 * FROM t_kuesioner1", oConn, adOpenDynamic, adLockPessimistic
oRS.AddNew
oRS.Fields("keterangan").Value = Text1(1).Text 

.......
oRS.Update
oRS.Close


Nilai Text1(1).Text lebih panjang dari field keterangan di tabel t_kuesioner1




Oleh karena itu solusinya adalah, field keterangan ditambah length secukupnya, atau dibatasi batas inputan pada text1(1).text sehingga tidak lebih panjang dari lebar field-nya.

Semoga bermanfaat.







Labels: , ,

Thursday, January 26, 2017

Dual Connection


Kali ini saya akan membagikan tips singkat, bagaimana membuat suatu aplikasi database menggunakan Visual Basic 6 yang terkoneksi dengan 2 database berbeda. Kasusnya adalah aplikasi ini bisa digunakan "offline" dan "online". "Offline" yang dimaksudkan di sini adalah aplikasi dibawa secara mobile menggunakan laptop. Kemudian posisi "Online" adalah aplikasi terkoneksi dengan database pusat ketika laptop tersebut ada pada jaringan kantor pusat. Pada saat "online" aplikasi bisa melakukan sinkronisasi data ( upload dan download ) sehingga data di kedua database sama. Database yang digunakan adalah Ms SQL Server 2000 untuk server pusat dan Ms Access untuk server lokal ( offline ). Database Ms Access digunakan karena instalasi yang sederhana, tidak serumit instalasi Ms SQL Server. Berikut langkah - langkah yang perlu dilakukan :

1. Pertama yang kita buat adalah connection string untuk kedua engine database tersebut.

Untuk SQL Server :
LogonStr = "PROVIDER=SQLOLEDB.1;DATA SOURCE= " & IPServer & ";initial catalog= " & DatabaseName & " ;User ID=user;Password=password;"

Untuk Ms Access :
LogonStr2 = "PROVIDER=Microsoft.ACE.OLEDB.12.0; Data Source=" & App.Path & "\databasename.accdb"

2. Engine SQL pada kedua database tersebut ada beberapa perbedaan, oleh karena itu ada beberapa penulisan query ( SQL ) yang harus disamakan. Karena kebetulan kedua database dibuat oleh Microsoft maka tidak terlampau sulit untuk membuat penyeragaman.Salah satunya adalah SQL untuk menghapus record :

Jika pada SQL Server cukup : DELETE table_name WHERE..
di Ms Access harus menggunakan FROM : DELETE FROM table_name WHERE.., maka anda harus menambahkan FROM pada semua SQL untuk menghapus record.

Juga pada SQL yang menggunakan INNER JOIN lebih dari table, pada SQL Server kita bisa langsung membuat query tambah separator seperti dibawah ini :

SELECT  *
FROM t_table_a aa
INNER JOIN t_table_b bb ON bb.code_b = aa.code_a
INNER JOIN t_tabel_c cc ON cc.code_c = aa.code_a

Pada Ms Access :

SELECT  *
FROM   (( t_table_a aa
INNER JOIN t_table_b bb ON bb.code_b = aa.code_a)
INNER JOIN t_tabel_c cc ON cc.code_c = aa.code_a)

3. Sinkronisasi.
Pada sinkronisasi, perlu diperhatikan aturan sikronisasi. misal aturannya untuk data master di server tidak boleh dihapus hanya boleh ditambah, maka pada saat sinkronisasi dari lokal ke server hanya bisa menambah tidak boleh menghapus, kemudian baru mengambil data master dari server yang baru. Dan masih banyak lagi, tergantung kebutuhan masing masing.

Kebetulan untuk Ms Access yang saya gunakan adalah Ms Access 2007, maka dibutuhkan driver untuk koneksi database bisa download pada link di bawah ini :

https://www.microsoft.com/en-us/download/details.aspx?id=23734
Office 2007


Tools :
Visual Basic 6.0
SQL Server 2000
Ms Access 2007


Labels: , , ,

Thursday, June 25, 2015

ASCII to Entities


Kali ini saya ingin berbagi pengalaman ringan tentang karakter ASCII yang bermasalah pada saat digunakan di aplikasi web. Belum lama ini mendapat pesanan aplikasi desktop dan web yang mengakses satu database yaitu Microsoft SQL Server. Pesanan awal adalah aplikasi desktop yang dibuat dengan Visual Basic 6, kemudian ada permintaan dibuatkan aplikasi web juga. Akhirnya kami buat menggunakan PHP dengan CodeIgniter Framework yang ditanam di Web Server Linux Ubuntu 12.04. Koneksi PHP ke database Ms SQL Server 2000 menggunakan FreeTDS. Pada saat development menggunakan OS Windows 7 semua berjalan lancar tanpa ada masalah, tetapi ketika diupload ke web server Linux Ubuntu muncul masalah pada saat saat menampilkan data, setelah kami trace menggunakan firebug di Firefox muncul error pada json_encode, seperti di bawah ini.



A PHP Error was encountered

Severity: Warning

Message: json_encode(): Invalid UTF-8 sequence in argument

Filename: controllers/trskegiatan.php

Line Number: 90





Hal itu terjadi karena pada salah satu record yang tampil yaitu  terdapat karakter ASCII yang jika muncul di web berupa  \r\n yang menyebabkan error pada argument json_encode. Biasanya data tersebut import dari data Excel dan sejenisnya sehingga kurang "bersih". Setelah googling dan berjibaku selama dua hari akhirnya muncul beberapa solusi. Seperti setting FreeTDS ditambah client charset = UTF-8 dan sebagainya ternyata kurang manjur, akhirnya "resep" yang manjur adalah menggunakan fungsi Framework CodeIgniter yaitu :

ascii_to_entities()

Converts ASCII values to character entities, including high ASCII and MS Word characters that can cause problems when used in a web page, so that they can be shown consistently regardless of browser settings or stored reliably in a database. There is some dependence on your server's supported character sets, so it may not be 100% reliable in all cases, but for the most part it should correctly identify characters outside the normal range (like accented characters). Example:

$string = ascii_to_entities($string);


Dengan fungsi tersebut maka semua karakter ASCII pada data yang bisa menyebabkan masalah di browser langsung dikonversi.
Semoga artikel ini bisa membantu rekan -rekan.
 
tools:
Sencha ExtJS
Microsoft SQL Server 2000
Visual Basic 6
Linux Ubuntu 12.04
FreeTDS
CodeIgniter PHP Framework

Labels: , , , ,

Saturday, August 30, 2014

Cannot Telnet port 1433 SQL Server

Masalah port 1433 tidak bisa ditelnet dari komputer lain membuat saya pusing selama hampir 1 minggu. Ms SQL Server saya masih tergolong jadul yaitu versi 2000. Saya membutuhkan port 1433 yang aktif karena saya mengakses dari mesin Linux Ubuntu menggunakan FreeTDS. Untuk aplikasi desktop tidak masalah karena koneksinya tidak menggunakan port 1433. Untuk pengecekan port terlihat dari log SQL Server, bahwa database server tidak 'listen' di port tersebut.


SQL Server hanya menenggunakan Shared Memory dan Named Pipes. Setting Server Network Utility juga sudah saya cek port 1433 dalam kondisi tercentang dan aktif. Bahkan telnet localhost 1433 pun pada komputer server sendiri tidak bisa. Akhirnya setelah berjibaku selama hampir 1 minggu, masalahnya SOLVED yaitu SQL Server harus diinstall Service Pack 4 agar bisa aktif port 1433.


Semoga bermanfaat bagi rekan rekan.


Ms SQL Server SP 4 Download

Labels: , ,

Thursday, July 10, 2014

Secret Project


Pesawat SR-71 BlackBird merupakan proyek rahasia Lockheed dari divisi Skunk Works di bawah kepemimpinan Kelly Johnson. Pesawat ini merupakan pesawat mata - mata yang bisa menembus kecepatan 3 kali kecepatan suara. Bodynya dibuat dari titanium untuk menahan panas karena kecepatannya yang sangat tinggi. Bahkan pilotnya punya harus mengenakan pakaian khusus seperti layaknya astronout. Dan berbagai fitur spesial ada di pesawat SR-71 BlackBird. Jika Lockheed punya proyek rahasia, kami pun pernah mempunyai "Proyek Rahasia".


Sekitar 2 tahun yang lalu team kami yang tergabung dalam team IT Development melakukan "proyek bawah tanah" yaitu melakukan konversi aplikasi dari berbasis desktop ke berbasis web. Awal pengembangan aplikasi berbasis web sebenarnya adalah ketidaksengajaan, karena awalnya kami ingin mengkonversi dari dekstop ke aplikasi android. Akan tetapi karena keterbatasan tampilan di aplikasi android yang tidak bisa mengakomodir kompleksitas inputan program,akhirnya kami memutuskan untuk membuat aplikasi berbasis web. Awalnya kami mencari berbagai framework, dan pilihan jatuh pada framework php CodeIgniter. Memang banyak artikel yang mengatakan CodeIgniter adalah framework php tercepat, akan tetapi kami memilihnya karena mudah digunakan dan sudah banyak dokumentasinya di internet, untuk cepat atau tidak kami belum pernah mengujinya dengan framework lain. Salah satu website yang kami tahu memakai CodeIgniter adalah website Kompas.Kemudian untuk tampilan kami mencari pemrograman web yang menyerupai desktop, karena input aplikasi desktop sebelumnya begitu kompleks, akhirnya kami memilih framework ExtJS sebagai interface aplikasi kami. Kami meriset tampilan dan mengkonversi algoritma dari visual basic ke ExtJS-CodeIgniter sekitar 1 tahun. Dan akhirnya aplikasi web yang kami kembangkan benar - benar menyerupai aplikasi desktop bahkan lebih baik (lebih rapi). Optimalisasi algoritma yang kami lakukan dalam pembuatan aplikasi web bisa membuat aplikasi web jauh lebih unggul dalam memproses informasi dari aplikasi desktop, reporting yang diproses dari 30 menit menjadi kurang dari 1 menit. Bahkan dengan aplikasi web tunggal kami bisa mengakses multi database yang terdiri dari multi company dalam group perusahaan tempat kami bekerja. Bahkan kami sempat ingin membuat buku ExtJS, karena ketika kami sedang mengembangkan aplikasi web tersebut ,dan saat ini ketika tulisan ini dibuat di pasaran sama sekali belum ada penulis yang membuat buku mengenai ExtJS, akan tetapi karena keterbatasan waktu akhirnya kami mengurungkan niat kami.


Kesulitan kami mengembangkan aplikasi web yang kompleks adalah banyak artikel di internet yang hanya "setengah hati" dalam memberikan tutorial, seperti bagaimana membuat "Hallo World", bagaimana membuat koneksi database dan selanjutnya tidak ada. Oh ya, kami membuat aplikasi kami terkoneksi dengan database server Microsoft SQL Server, bukan seperti aplikasi web berbasis PHP kebanyakan yang membuat aplikasi dengan database server MySQL. Hal ini dikarenakan aplikasi desktop berbasis Visual Basic dan Microsoft SQL Server. Adalah suatu kebanggaan bagi kami, bahwa kami telah membuat aplikasi berbasis web dengan kompleksitas yang cukup tinggi dan serupa dengan aplikasi dekstop. Tingkat kesulitan membuat aplikasi web cukup tinggi karena kami harus meninggalkan paradigma "compiler" menjadi paradigma "intrepreter". Kadang error yang muncul atau bahkan tidak muncul cukup membuat kami pusing, akan tetapi dengan kesabaran yang cukup akhirnya kami bisa "memahami" sifat dan karakter aplikasi web khususnya CodeIgniter - ExtJS - Microsoft SQL Server. Ketiga item tersebut bukan merupakan package yang dibuat oleh vendor yang sama, sehingga error handling kadang kurang informatif. Misal pada tampilan CodeIgniter hanya menampilkan pesan error tidak bisa melakukan INSERT pada table dan tidak ada informasi lain mengapa tidak bisa, ternyata pada table tersebut harus diberikan default value pada field-nya. Meskipun "Proyek Rahasia" kami sudah berfungsi dengan baik, akan tetapi karena para user belum  bisa menerima aplikasi "dari planet lain" ini maka produk "MasterPiece" kami hanya menjadi penghuni ruang hampa udara bernama hardisk di Web Server Linux Ubuntu kami. Proyek ini merupakaan lompatan besar bagi kami dalam menciptakan aplikasi berbasis web.

Untuk rekan rekan yang ingin berlajar ExtJS bisa belajar dari e-Book ExtJS in Action karya J Garcia tahun terbit 2011, ini merupakan salah satu buku yang terbaik di internet yang kami temukan untuk belajar ExtJS. Memang masih menggunakan ExtJS versi 3, tapi pada dasarnya hampir sama. Bab demi bab disampaikan secara detail , sangat berbeda dengan buku - buku lokal yang kadang hanya copas di internet dan jadi buku, kadang malah sangat dasar sekali dan tidak praktikal. Buku ini sangat mendalam, cocok  untuk yang serius ingin belajar ExtJS.

related links :
The Other Secret Project

tools :
Sencha ExtJS 4.2.2
CodeIgniter v2.1.3
Microsoft SQL Server 2000
Ubuntu 12.04 LTS

Labels: , ,

Sunday, September 01, 2013

Import file xls ke MySQL

Setelah mencari cara import file .xls ke database MySQL melalui Google, akhirnya saya menemukan caranya di link ini. Jika anda menggunakan database MS SQL Server hal itu tidak menjadi kendala karena pihak Microsoft telah memberi fasilitas ini sejak SQL Server 2000 bahkan mungkin dari SQL Server 7. Tetapi jika anda ingin mengimport data dari file Excel yang berektensi .xls melalui MySQL anda harus menyimpan dalam format .csv terlebih dahulu. Berikut caranya :
  1.  Simpan file xls ke dalam format .csv dengan cara pilih menu Save As -> Other Format -> CSV, misal nama file-nya produk.csv
  2. Buat database pada MySQL terlebih dahulu, misal kita ingin mengimport data produk, buat database dengan nama produk, kemudian buat table t_produk, kemudian buat field kode_produk, nama_produk.
  3. Kebetulan saya menggunakan MySQL Administrator yang merupakan tools official dari MySQL, pilih menu Tools -> MySQL Query Browser. Kemudian ketik script query seperti dibawah ini:
  LOAD DATA LOCAL INFILE 'D:\\data\\produk.csv' INTO TABLE produk.t_produk FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' (kode_produk, nama_produk); 

Kemudian jalankan Query tersebut.
Memang saya akui tools MySQL Administrator, kurang "manusiawi" atau istilah keren-nya kurang user friendly. Berbeda dengan tools pihak ketiga seperti Navicat, HeidiSQL yang jauh lebih "manusiawi". Cuman jika anda bisa menggunakan tools yang kurang "manusiawi", maka bisa dibilang anda "LAKI BANGET" :)

Berbeda lagi jika anda menggunakan Ms SQL Server, jelas disini Microsoft sangat memanjakan penggunanya, Anda hanya perlu klik kanan pada database, pilih source yaitu file .xls anda, kemudian pilih destination, yaitu table yang akan dituju, jika belum ada ada pilihan create destination table. Tekan OK, done. Disini bisa dibilang Microsoft sangat jago dalam membuat tools wizard yang user friendly. Semoga bermanfaat.

Tools : MySQL Workbench, Ms Office 2007, SQL Server 2000.


Labels: , , , ,

Friday, June 14, 2013

Run time Error – 2147217843 Login failed for user 'SA'


I want to share my experience, when i run my Visual Basic(VB6) app on Windows 7, my app gives me "Run time Error – 2147217843(80040e4d) Login Failed for user 'SA'". My app work fine on Windows XP, but on Windows 7 occurs that error message. First I'll try to connect via ODBC on Windows 7 to my database server, and it works fine. Second i check my app component like ocx and dll. Finally I trying to compile my app on Windows 7 machine, and i found strange case. 

I used connection string to connect database server, when my app open connection (conn.open), my connection string changes itself, and there is NO PASSWORD in there, so my code gives me an error "Run time Error – 2147217843(80040e4d) Login Failed for user 'SA'".

BEFORE conn.open

Provider=SQLOLEDB.1;Password=p455w0rd;User ID=SA;Initial Catalog=DB2;Data Source=192.168.x.x

AFTER conn.open

Provider=SQLOLEDB.1;User ID=SA;Initial Catalog=DB2;Data Source=192.168.x.x;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CCP-PC;Use Encryption for Data=False;Tag with column collation when possible=False;

After googling i found this link that help me out from my problem. This article told me that i should add attribute on my connection string with ; Persist Security Info=true. That because on Windows Vista or Windows 7 has new security fix, that caused error on connection string. Finally after i add ; Persist Security Info=true on my connection string, IT SOLVED my problems !

Sample connection string like below
Provider=SQLOLEDB.1;Password=p455w0rd;User ID=SA;Initial Catalog=DB2;Data Source=192.168.x.x;Persist Security Info=true 

related links:

Labels: , , ,

Sunday, April 28, 2013

CodeIgniter cannot Insert NULL on MSSQL



Recently, I experienced a strange case when i was porting a desktop application to a web application. I am using CodeIgniter / PHP framework as a front end and for back end I am  using ExtJS, for Database Server I am using the Microsoft SQLServer.
When I run the store procedure from CodeIgniter,
the result  from stored procedures are not completed.But  if I run it from  Query Analyzer , it run perfectly and produces a perfect result . If in Query Analyzer success with 221 rows, in CodeIgniter / PHP only success with 107 rows. First analysis is due to time out, then I fix this by editing php.ini and increase the time out setting and the problems still occurs.

mssql.connect_timeout
mssql.timeout 

max_execution_time
max_input_time
 Then I optimize store procedures that previously when I run it, it takes almost 2 minutes to about 24 second, but it doesn't help.  I was desperate, until I tried to connect query using pure php command , that use  mssql_, from there I found out that there is an error that  CodeIgniter cannot insert NULL for a particular table.   

$proc = mssql_init('Store_Procedure_Name', $conn);
mssql_execute($proc);



And the error does not appear when I run it using modules from CodeIgniter, finally I fixed some code in stored procedures which is INSERT NULL value.  

ISNULL(field_name,' ') 

Finally IT SOLVED!, the store procedure runs perfectly when executed using CodeIgniter.

Some tips to avoid cases such as the above are:
1. Avoid NULL
value posibility on INSERT query you created.
2. Create 
query as simple as possible , that will help you when debuging in the future.

The conclusion is CodeIgniter refused INSERT NULL but will not display an error, while in Query Analyzer is  allow that to happen. This case maybe can make you confused when you convert from desktop applications to web applications. I hope these tips useful for you.

Labels: , , , ,