Dalam menyimpan data kedalam database ada kalanya kita perlu untuk memvalidasi dulu sebelum benar-benar menyimpannya.
Misalnya data baru disimpan setelah semua/sebagian field diisi seperti gambar dibawah ini:
Untuk membuat record tidak bisa disimpan bila field belum diisi caranya dengan menambahkan klausa NOT NULL (saya yakin tidak asing lagi).
CREATE TABLE BIODATA ( ID INTEGER NOT NULL, "Nama Lengkap" VARCHAR(30) CHARACTER SET NONE NOT NULL, "Alamat" VARCHAR(50) CHARACTER SET NONE NOT NULL, "Tanggal Lahir" DATE DEFAULT CURRENT_DATE NOT NULL );
Sedangkan untuk membatasi input Tanggal kita menggunakan Check constraint.
ALTER TABLE BIODATA ADD CONSTRAINT "mulai 01/01/1910 s/d hari ini" CHECK ("Tanggal Lahir" between '01.01.1910' and current_date);
Pada sisi Delphinya untuk keperluan tersebut diatas kita memanfaatkan event OnFIBErrorEvent pada TpFibErrorHandler (komponen FIBPlus) dan OnPostError punya DataSet.
procedure TForm1.pFibEHFIBErrorEvent(Sender: TObject; ErrorValue: EFIBError; KindIBError: TKindIBError; var DoRaise: Boolean); var s: string; begin s:=ErrorValue.IBMessage; case ErrorValue.IBErrorCode of 335544347: // Not Null begin // Validation error for column Alamat, value "*** null ***". Delete(s,1,pos('column',s)+6); // hapus .. column SetLength(s,pos(', value',s)-1); // ambil nama fieldnya CariDBEdit(s); // fokus ke field ybs end; 335544558: // Check begin // Operation violates CHECK constraint mulai 01/01/1910 s/d hari ini on view or table BIODATA. Delete(s,1,pos('constraint',s)+10); // hapus .. constraint SetLength(s,pos('on view',s)-1); // ambil pesannya aja DBEdit3.SetFocus; // fokus manual krn sdh pasti ShowInfo(DBEdit3,s); // tampilkan pesan end; else ShowMessage(s); end; end;
procedure TForm1.tbPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin Action:=daAbort; end;
Source Code dapat didownload di https://www.box.com/s/0mmrv8i7776ikpxul06h
Semoga bermanfaat
mantap pak…!!! 😀