線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1768
推到 Plurk!
推到 Facebook!

一個欄位驗證規則視另一欄位之值而決定可以嗎 ?

答題得分者是:timhuang
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-20 12:00:19 IP:211.73.xxx.xxx 未訂閱
我用delphi7 pro版的ado去存取由access 2000所建立之資料庫(.mdb),裡面有一銷售表它有兩個欄位,一是退貨數量欄位其驗證規則是>=0且不能是null,另一欄位是退貨日期,我希望它的驗證規則是假如退貨數量=0 退貨日期就=null,假如退貨數量>0 退貨日期就不可以是null,但退貨日期的驗證規則我一寫不出來,會的人可否告知怎麼寫,若根本不可以寫的話,也告知不能寫
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-20 14:47:56 IP:61.222.xxx.xxx 未訂閱
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Mask, DBCtrls; type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; ADOQuery1NUMBER: TFloatField; ADOQuery1DATE1: TDateTimeField; Label1: TLabel; DBEdit1: TDBEdit; Label2: TLabel; DBEdit2: TDBEdit; procedure DBEdit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBEdit1Change(Sender: TObject); begin IF NOT(ADOQUERY1.State IN [DSINSERT,DSEDIT]) THEN EXIT; IF (DBEdit1.Text='') OR (DBEdit1.Text='0') THEN DBEDIT2.Text:='' ELSE DBEDIT2.Text:=DATETOSTR(DATE); end;
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-20 22:42:56 IP:211.73.xxx.xxx 未訂閱
huangeider你好: 你說明的是在程式層次處理,這我知道該怎麼做,我問的是表層次處理,當我用access 2000去設計表時,每個欄位在此可指定欄位型態,每個欄位驗證規則是什麼,就像用sql建立table時,就可同時指定每個欄位的欄位型態,每個欄位驗證規則是什麼,當儲存表記錄若有違反欄位驗證規則就會有錯誤產生,不須程式寫程式碼去驗證錯誤.
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-20 22:59:46 IP:220.132.xxx.xxx 未訂閱
Hi, 是可以在 [退貨數量] 欄寫驗證規則為 >=0 沒問題, 但在[退貨日期]是沒辦法參考 [退貨數量] 來寫驗證規則, 簡單地說, 僅能設一些和常數的比較或布林運算, 但無法再檢查其他欄位, 這是 access 的限制, 在資料庫如 sql server 就可以實現, 但在 access 中應該是沒辦法!
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-20 23:11:51 IP:211.73.xxx.xxx 未訂閱
引言: Hi, 是可以在 [退貨數量] 欄寫驗證規則為 >=0 沒問題, 但在[退貨日期]是沒辦法參考 [退貨數量] 來寫驗證規則, 簡單地說, 僅能設一些和常數的比較或布林運算, 但無法再檢查其他欄位, 這是 access 的限制, 在資料庫如 sql server 就可以實現, 但在 access 中應該是沒辦法!
timhuang你好: interbase可以做到嗎?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-21 09:57:38 IP:203.95.xxx.xxx 未訂閱
Hi, 我對 interbase 不熟, 不過我可以舉個 sql server 的例子給你在 interbase 試試, 假設 [req] 是退貨數量, [red] 是退貨日期, 你可以在該 table 下一個 check constraint:    ([req] = 0 and [red] is null) or ([req] > 0 and [red] is not null)    若是用指令的話, 是這麼下,    
ALTER TABLE [dbo].[t_t3] ADD 
        CONSTRAINT [CK_t_t3] CHECK (([req] = 0 and [red] is null) or ([req] > 0 and [red] is not null))
系統時間:2024-06-28 8:34:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!