在TCarDetail_Form的Edit控件里输入数据,用CarInfo_Manage.AddCar函数添加到数据库,在添加前CarInfo_Manage.GetCarByNo用查找重复键值总是提示重复,各函数的代码如下,请大家帮忙改错,谢谢
procedure TCarDetail_Form.Sav_BtnClick(Sender: TObject);
var
CarIn:TCarInfo;//TCarInfo类成员对应数据表各列
begin
CarIn:=TCarInfo.Create();
if
CarInfo_Manage.GetCarByNo(trim(edit1.Text))<>nil //查找重复键值
then
begin
messagebox(Handle,'车号重复,请重新输入','系统提示',MB_OK) ;
exit;
end else
if CarInfo_Manage.GetCarByNo(trim(edit1.Text))=nil
then begin
Assignment(CarIn) ;//将edit.text赋值到CarIn的成员
CarInfo_Manage.AddCar(CarIn);//执行T-SQL语句添加数据到数据库
Form_Car.Car_DataS.DataSet.Refresh;
end
end;
/////////////////
function AddCar(Car:TCarInfo):boolean;
var
sql:string;
begin
sql:='insert into 设备台帐登记表(牌证号码,购置日期,设备类型,车型,座位,燃油,资产编号,发动机功率,设备状态,原值,生产厂家,发动机号码,底盘号码)'+
'values('+''''+Car.CarNo+''''+','+''''+Car.BuyDate+''''+','+''''+Car.FixStyle+''''+','+''''+Car.CarStyle+''''+','+''''+Car.Seat+''''+','+''''+Car.Oil+''''+','+''''+Car.CapitalNo+''''+','+''''+(Car.Power)+''''+','+''''+Car.FixState+''''+','+''''+Car.Price+''''+','+''''+Car.Works+''''+','+''''+Car.MotorNo+''''+','+''''+Car.ChassisNo+''''+')';
result:=DAHelper.ExeSqlNoQuery(sql);
end;
/////////////////
function ExeSqlNoQuery(sql:string):boolean;
var
query:TADOQuery;
ref:integer;
begin
ref:=0;
//判断连接状态是否关闭, 若关闭则打开
if stClosed in Config.ADOCon.State then
Config.ADOCon.Open;
query:=TADOQuery.Create(nil);
query.Connection:=Config.ADOCon;
query.Close;
Config.ADOCon.BeginTrans;
try
query.SQL.Clear;
query.SQL.Add(sql);
//query.Open;
ref:=query.ExecSQL;//影响的行数
Config.ADOCon.CommitTrans;
except
Config.ADOCon.RollbackTrans;
query:=nil;
result:=false;
end;
if ref>0 then
result:=true
else
result:=false;
end;
procedure TCarDetail_Form.Sav_BtnClick(Sender: TObject);
var
CarIn:TCarInfo;//TCarInfo类成员对应数据表各列
begin
CarIn:=TCarInfo.Create();
if
CarInfo_Manage.GetCarByNo(trim(edit1.Text))<>nil //查找重复键值
then
begin
messagebox(Handle,'车号重复,请重新输入','系统提示',MB_OK) ;
exit;
end else
if CarInfo_Manage.GetCarByNo(trim(edit1.Text))=nil
then begin
Assignment(CarIn) ;//将edit.text赋值到CarIn的成员
CarInfo_Manage.AddCar(CarIn);//执行T-SQL语句添加数据到数据库
Form_Car.Car_DataS.DataSet.Refresh;
end
end;
/////////////////
function AddCar(Car:TCarInfo):boolean;
var
sql:string;
begin
sql:='insert into 设备台帐登记表(牌证号码,购置日期,设备类型,车型,座位,燃油,资产编号,发动机功率,设备状态,原值,生产厂家,发动机号码,底盘号码)'+
'values('+''''+Car.CarNo+''''+','+''''+Car.BuyDate+''''+','+''''+Car.FixStyle+''''+','+''''+Car.CarStyle+''''+','+''''+Car.Seat+''''+','+''''+Car.Oil+''''+','+''''+Car.CapitalNo+''''+','+''''+(Car.Power)+''''+','+''''+Car.FixState+''''+','+''''+Car.Price+''''+','+''''+Car.Works+''''+','+''''+Car.MotorNo+''''+','+''''+Car.ChassisNo+''''+')';
result:=DAHelper.ExeSqlNoQuery(sql);
end;
/////////////////
function ExeSqlNoQuery(sql:string):boolean;
var
query:TADOQuery;
ref:integer;
begin
ref:=0;
//判断连接状态是否关闭, 若关闭则打开
if stClosed in Config.ADOCon.State then
Config.ADOCon.Open;
query:=TADOQuery.Create(nil);
query.Connection:=Config.ADOCon;
query.Close;
Config.ADOCon.BeginTrans;
try
query.SQL.Clear;
query.SQL.Add(sql);
//query.Open;
ref:=query.ExecSQL;//影响的行数
Config.ADOCon.CommitTrans;
except
Config.ADOCon.RollbackTrans;
query:=nil;
result:=false;
end;
if ref>0 then
result:=true
else
result:=false;
end;
function GetCarByNo(CarNo:string):TADOQuery;
var
sql :string;
begin
sql:='select * from 设备台帐登记表 where 牌证号码='+''''+CarNo+'''';
result:=DAHelper.ExeSqlQuery(sql);
end;
{你用了不返回数据集的命令来执行要返回数据集的语句}
ADOQuery1.open;//是返回数据集的,你可以访问这个数据集
ADOQuery1.execsql;// 就是只执行你的SQL操作,并不返回数据集
当你要返回一个数据集时即,查询出一个数据结果时,要用open而不能用execsql;select的语句就要用open.
而当你要执行一个增加,删除,修改的语句时,要用execsql而不能用open.
你的GetCarByNo函数中也调用了ExeSqlQuery这个函数,而你要得到的是一个是否为空的判断,在AddCar这个函数中调用了ExeSqlQuery是插入一条记录,同一个函数要满足两种情况,不行,你要适当的修改一下.
var
query:TADOQuery;
ref:integer;
begin
ref:=0;
//判断连接状态是否关闭, 若关闭则打开
if stClosed in Config.ADOCon.State then
Config.ADOCon.Open;
query:=TADOQuery.Create(nil);
query.Connection:=Config.ADOCon;
query.Close;
Config.ADOCon.BeginTrans;
try
query.SQL.Clear;
query.SQL.Add(sql);
//query.Open;
ref:=query.ExecSQL;//影响的行数
Config.ADOCon.CommitTrans;
except
Config.ADOCon.RollbackTrans;
query:=nil;
result:=false;
end;
if ref> 0 then
result:=true
else
result:=false;
end;