我在学习一个DELPHI的MDI的数据库管理程序,在登录到主窗口后,点击人事管理下的添加新员工时,出现提示: project personnel.exe raised exception class evarianterror with message 'invalid type conversion'.process stopped.
use step or run to continue.
程序代码如下:
procedure TF_add.AddInit;
var
counter:integer;
id:String;
begin
With DataModule1 do
begin
//生成员工号
T_counter.Filter:='ID=''P''';
T_counter.Filtered:=True;
T_counter.Open;
counter:=T_counter['COUNTER_VALUE'];
T_counter.Close;
id:='00000'+IntToStr(counter);
id:='P'+Copy(id,length(id)-4,5);
//增加新记录
T_add_user.Open;
T_add_user.Append;
T_add_user['ID']:=id;
T_add_user['SEX']:='M';
T_add_user['STATE']:='T';
i_passwd.Text:=id;
end;
end;procedure TF_add.FormCreate(Sender: TObject);
begin
F_main.M_add.Enabled:=False;
F_main.TB_add.Enabled:=False;
Width:=272;
Height:=469;
With DataModule1 do
begin
if not T_department.Active then T_department.Open;
if not T_job.Active then T_job.Open;
if not T_edu_level.Active then T_edu_level.Open;
end;
AddInit;
end;
----------
数据库如下:
SQL Statement
/* Table: PERSON, Owner: MISDBA */
CREATE TABLE PERSON (ID CHAR(6) NOT NULL,
PASSWD CHAR(20) NOT NULL,
AUTHORITY CHAR(1) DEFAULT '0',
NAME VARCHAR(10),
SEX CHAR(1) DEFAULT 'M' NOT NULL,
BIRTHDAY TIMESTAMP,
DEPARTMENT CHAR(3),
JOB CHAR(3),
EDU_LEVEL CHAR(1),
SPECIALTY VARCHAR(20),
ADDRESS VARCHAR(50),
TEL VARCHAR(20),
EMAIL VARCHAR(50),
STATE CHAR(1) DEFAULT 'T',
REMARK VARCHAR(4000),
CONSTRAINT PERSON_ID PRIMARY KEY (ID));SQL Statement
/* Table: PERSONNEL, Owner: MISDBA */
CREATE TABLE PERSONNEL (ID INTEGER NOT NULL,
PERSON CHAR(6) NOT NULL,
CHANGE CHAR(1) NOT NULL,
RECORD_TIME TIMESTAMP NOT NULL,
DESCRIPTION VARCHAR(4000),
CONSTRAINT PERSONEL_ID PRIMARY KEY (ID));SQL Statement
/* Table: DEPARTMENT, Owner: MISDBA */
CREATE TABLE DEPARTMENT (ID CHAR(3) NOT NULL,
NAME VARCHAR(20) NOT NULL,
MANAGER CHAR(6),
INTRO VARCHAR(4000),
CONSTRAINT DEPARTMENT_ID PRIMARY KEY (ID));SQL Statement
/* Table: EDU_LEVEL, Owner: MISDBA */
CREATE TABLE EDU_LEVEL (CODE CHAR(1) NOT NULL,
DESCRIPTION VARCHAR(20) NOT NULL,
CONSTRAINT EDU_LEVEL_CODE PRIMARY KEY (CODE));SQL Statement
/* Table: JOB, Owner: MISDBA */
CREATE TABLE JOB (CODE CHAR(3) NOT NULL,
DESCRIPTION VARCHAR(20) NOT NULL,
CONSTRAINT JOB_CODE PRIMARY KEY (CODE));SQL Statement
/* Table: PERSONNEL_CHANGE, Owner: MISDBA */
CREATE TABLE PERSONNEL_CHANGE (CODE CHAR(1) NOT NULL,
DESCRIPTION VARCHAR(20),
CONSTRAINT PERSONNEL_CHANGE_CODE PRIMARY KEY (CODE));SQL Statement
/* Table: COUNTER, Owner: MISDBA */
CREATE TABLE COUNTER (ID CHAR(1) NOT NULL,
COUNTER_VALUE INTEGER,
DESCRIPTION VARCHAR(10),
CONSTRAINT COUNTER_ID PRIMARY KEY (ID));SQL Statement
/* ForeignKey DEPARTMENT */
ALTER TABLE PERSON
ADD CONSTRAINT DEPARTMENT
FOREIGN KEY (DEPARTMENT)
REFERENCES DEPARTMENT;
/* ForeignKey EDU_LEVEL */
ALTER TABLE PERSON
ADD CONSTRAINT EDU_LEVEL
FOREIGN KEY (EDU_LEVEL)
REFERENCES EDU_LEVEL;
/* ForeignKey JOB */
ALTER TABLE PERSON
ADD CONSTRAINT JOB
FOREIGN KEY (JOB)
REFERENCES JOB;
/* CheckConstraint SEX */
ALTER TABLE PERSON
ADD CONSTRAINT SEX
CHECK (SEX='M' OR SEX='F');
/* CheckConstraint STATE */
ALTER TABLE PERSON
ADD CONSTRAINT STATE
CHECK (STATE='T' OR STATE='F');
/* ForeignKey CHANGE */
ALTER TABLE PERSONNEL
ADD CONSTRAINT CHANGE
FOREIGN KEY (CHANGE)
REFERENCES PERSONNEL_CHANGE;
/* ForeignKey PERSON */
ALTER TABLE PERSONNEL
ADD CONSTRAINT PERSON
FOREIGN KEY (PERSON)
REFERENCES PERSON;
/* ForeignKey MANAGER */
ALTER TABLE DEPARTMENT
ADD CONSTRAINT MANAGER
FOREIGN KEY (MANAGER)
REFERENCES PERSON;
如果把AddInit 注释掉程序就不会出此提示,请问是哪里错了啊!!!
菜鸟呈上!
use step or run to continue.
程序代码如下:
procedure TF_add.AddInit;
var
counter:integer;
id:String;
begin
With DataModule1 do
begin
//生成员工号
T_counter.Filter:='ID=''P''';
T_counter.Filtered:=True;
T_counter.Open;
counter:=T_counter['COUNTER_VALUE'];
T_counter.Close;
id:='00000'+IntToStr(counter);
id:='P'+Copy(id,length(id)-4,5);
//增加新记录
T_add_user.Open;
T_add_user.Append;
T_add_user['ID']:=id;
T_add_user['SEX']:='M';
T_add_user['STATE']:='T';
i_passwd.Text:=id;
end;
end;procedure TF_add.FormCreate(Sender: TObject);
begin
F_main.M_add.Enabled:=False;
F_main.TB_add.Enabled:=False;
Width:=272;
Height:=469;
With DataModule1 do
begin
if not T_department.Active then T_department.Open;
if not T_job.Active then T_job.Open;
if not T_edu_level.Active then T_edu_level.Open;
end;
AddInit;
end;
----------
数据库如下:
SQL Statement
/* Table: PERSON, Owner: MISDBA */
CREATE TABLE PERSON (ID CHAR(6) NOT NULL,
PASSWD CHAR(20) NOT NULL,
AUTHORITY CHAR(1) DEFAULT '0',
NAME VARCHAR(10),
SEX CHAR(1) DEFAULT 'M' NOT NULL,
BIRTHDAY TIMESTAMP,
DEPARTMENT CHAR(3),
JOB CHAR(3),
EDU_LEVEL CHAR(1),
SPECIALTY VARCHAR(20),
ADDRESS VARCHAR(50),
TEL VARCHAR(20),
EMAIL VARCHAR(50),
STATE CHAR(1) DEFAULT 'T',
REMARK VARCHAR(4000),
CONSTRAINT PERSON_ID PRIMARY KEY (ID));SQL Statement
/* Table: PERSONNEL, Owner: MISDBA */
CREATE TABLE PERSONNEL (ID INTEGER NOT NULL,
PERSON CHAR(6) NOT NULL,
CHANGE CHAR(1) NOT NULL,
RECORD_TIME TIMESTAMP NOT NULL,
DESCRIPTION VARCHAR(4000),
CONSTRAINT PERSONEL_ID PRIMARY KEY (ID));SQL Statement
/* Table: DEPARTMENT, Owner: MISDBA */
CREATE TABLE DEPARTMENT (ID CHAR(3) NOT NULL,
NAME VARCHAR(20) NOT NULL,
MANAGER CHAR(6),
INTRO VARCHAR(4000),
CONSTRAINT DEPARTMENT_ID PRIMARY KEY (ID));SQL Statement
/* Table: EDU_LEVEL, Owner: MISDBA */
CREATE TABLE EDU_LEVEL (CODE CHAR(1) NOT NULL,
DESCRIPTION VARCHAR(20) NOT NULL,
CONSTRAINT EDU_LEVEL_CODE PRIMARY KEY (CODE));SQL Statement
/* Table: JOB, Owner: MISDBA */
CREATE TABLE JOB (CODE CHAR(3) NOT NULL,
DESCRIPTION VARCHAR(20) NOT NULL,
CONSTRAINT JOB_CODE PRIMARY KEY (CODE));SQL Statement
/* Table: PERSONNEL_CHANGE, Owner: MISDBA */
CREATE TABLE PERSONNEL_CHANGE (CODE CHAR(1) NOT NULL,
DESCRIPTION VARCHAR(20),
CONSTRAINT PERSONNEL_CHANGE_CODE PRIMARY KEY (CODE));SQL Statement
/* Table: COUNTER, Owner: MISDBA */
CREATE TABLE COUNTER (ID CHAR(1) NOT NULL,
COUNTER_VALUE INTEGER,
DESCRIPTION VARCHAR(10),
CONSTRAINT COUNTER_ID PRIMARY KEY (ID));SQL Statement
/* ForeignKey DEPARTMENT */
ALTER TABLE PERSON
ADD CONSTRAINT DEPARTMENT
FOREIGN KEY (DEPARTMENT)
REFERENCES DEPARTMENT;
/* ForeignKey EDU_LEVEL */
ALTER TABLE PERSON
ADD CONSTRAINT EDU_LEVEL
FOREIGN KEY (EDU_LEVEL)
REFERENCES EDU_LEVEL;
/* ForeignKey JOB */
ALTER TABLE PERSON
ADD CONSTRAINT JOB
FOREIGN KEY (JOB)
REFERENCES JOB;
/* CheckConstraint SEX */
ALTER TABLE PERSON
ADD CONSTRAINT SEX
CHECK (SEX='M' OR SEX='F');
/* CheckConstraint STATE */
ALTER TABLE PERSON
ADD CONSTRAINT STATE
CHECK (STATE='T' OR STATE='F');
/* ForeignKey CHANGE */
ALTER TABLE PERSONNEL
ADD CONSTRAINT CHANGE
FOREIGN KEY (CHANGE)
REFERENCES PERSONNEL_CHANGE;
/* ForeignKey PERSON */
ALTER TABLE PERSONNEL
ADD CONSTRAINT PERSON
FOREIGN KEY (PERSON)
REFERENCES PERSON;
/* ForeignKey MANAGER */
ALTER TABLE DEPARTMENT
ADD CONSTRAINT MANAGER
FOREIGN KEY (MANAGER)
REFERENCES PERSON;
如果把AddInit 注释掉程序就不会出此提示,请问是哪里错了啊!!!
菜鸟呈上!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货