Saya pernah mengalami suatu kejadian seperti ini, jam dan tanggal komputer client tidak sesuai dengan tanggal sekarang (mungkin baterei CMOS perlu diganti), akibatnya, tanggal surat jalan mundur dari waktu sekarang. Padahal nomor bukti surat jalan tersebut otomatis. Nah untuk masalah seperti ini, menyamakan jam komputer client dan server SQL terkadang diperlukan oleh program.
Pertama-tama saya melakukan query untuk mendapatkan data jam dan tanggal ke server:
with AdoQuery1 do begin
Close;
SQL.Clear;
SQL.Add('Select Convert(Varchar(10), GetDate(),111) ');
Open;
end;
Perintah query diatas akan menghasilkan field seperti ini
with AdoQuery1 do begin
Thn := StrToInt(Copy(Fields[0].AsString,1,4));
if copy(Fields[0].AsString,6,1) = '0' then
Bln := StrToInt(copy(Fields[0].AsString,7,1))
else
Bln := StrToInt(Fields[0].AsString);
if copy(Fields[0].AsString,9,1) = '0' then
Tgl := StrToInt(copy(Fields[0].AsString,10,1))
else
Tgl := StrToInt( copy( Fields[0].AsString,9,2));
end;
Begitu juga dengan jam. Jam, Menit, Detik, dan Mili adalah variabel bertipe Word
with AdoQuery1 do begin
Jam := StrToInt(Copy(Fields[1].AsString,1,2));
Menit := StrToInt(Copy(Fields[1].AsString,4,2));
Detik := StrToInt(Copy(Fields[1].AsString,7,2));
Mili := StrToInt(Copy(Fields[1].AsString,10,2));
Menit := StrToInt(Copy(Fields[1].AsString,4,2));
Detik := StrToInt(Copy(Fields[1].AsString,7,2));
Mili := StrToInt(Copy(Fields[1].AsString,10,2));
end;
Sekarang lakukan persiapan untuk menuliskannya ke Windows. NewDateTime adalah variabel bertipe TSystemTime. Deklarasikan pada bagian Var terlebih dahulu.
FillChar(NewDateTime, SizeOf(NewDateTime), #0);
NewDateTime.wYear := Thn;
NewDateTime.wMonth := Bln;
NewDateTime.wDay := Tgl;
NewDateTime.wHour := Jam;
NewDateTime.wMinute := Menit;
NewDateTime.wSecond := Detik;
NewDateTime.wMilliseconds := 0;
Tulis ke Windows:
SetLocalTime(NewDateTime);
0 comments:
Posting Komentar