9 Agustus 2011

Memformat Nilai Date Time untuk Akses SQL di Delphi

Pernahkah anda mendapatkan sesuatu yang mengerikan seperti, "Parameter objek dengan benar didefinisikan namun informasi yang disampaikan tidak konsisten atau tidak lengkap diberikan."apakah itu merupakan Kesalahan JET?

Bila Anda perlu membuat  query againts SQL Access database di mana tanggal (atau waktu tanggal) nilai digunakan Anda perlu memastikan bahwa format yang benar digunakan(harus sesuai dengan format waktu pada komputer anda).

Sebagai contoh, dalam sebuah query SQL: "SELECT * FROM TBL MANA DateField = '10 / 12/2008 '" Anda ingin mendapatkan semua catatan dari tabel bernama Tbl mana tanggal yang umum bidang DateField sama dengan 10/12/2008.

Apakah baris di atas jelas? Apakah itu Desember, 10 atau Oktober, 12? Untungnya kami cukup yakin tahun dalam query adalah 2008:)

Haruskah bagian tanggal dari query ditetapkan sebagai MM / DD / YYYY atau DD / MM / YYYY atau mungkin YYYYMMDD? Melakukan pengaturan daerah berperan di sini?
MS Access, Jet, Tanggal Format Waktu
Bila menggunakan Akses dan JET (dbGo - ADO Delphi kontrol) format SQL untuk field tanggal harus * selalu * menjadi:
#YYYY-MM-DD#

Ada lagi yang mungkin bekerja dalam pengujian terbatas, tetapi sering dapat menyebabkan hasil yang tidak diharapkan atau kesalahan pada mesin pengguna.

Berikut adalah fungsi kustom Delphi dapat Anda gunakan untuk memformat nilai tanggal untuk permintaan akses SQL :
        function DateForSQL(const date : TDate) : string;   var   y, m, d : word; begin   DecodeDate(date, y, m, d) ;     result := Format('#%.*d-%.*d-%.*d#',[4, y, 2, m, 2, d]) ;
  end;

 Untuk "January 29, 1973" fungsi akan mengembalikan string '#1973-01-29#'.


Tidak ada komentar:

Posting Komentar