初级问题!(20分)

  • 主题发起人 woyeah2000
  • 开始时间
W

woyeah2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ACCESS,其中CONSTRACT设成了主键,可还有一个元素COERDNO不许重复,所以我写的代码
如下:
procedure TFrmCarManage.BtnSaveClick(Sender: TObject);
begin
if (DBEcz.Text='') or (DBEczNo.Text='') or (DBEName.Text='') or (DBEMoney.Text='') or (DBEContract.Text='') then
begin
Application.MessageBox('输入数据不能为空','系统提示');
exit;
end
else begin
TblCar.First;
while not TblCar.Eof do
begin
if DBEczNo.Text=TblCar.FieldValues['CardNo'] then
Application.MessageBox('输入的帐号或卡号已存在','系统提示');
TblCar.Next;
end
我发现了问题,这个一执行就提示重复,是不是我写的不对,其中DBEczNo.TEXT指向的都是
已存在的记录啊,如我想实现不能重复,应该如何写?
还有,设成主键后,输入重复后的异常应如何写?

谢谢,分不多了,少给点
 
先到你的表里select一下,如果有数据则表示重复。
with query1 do
begin
close;
sql.text := 'select count(*) from orders where id=' + sid;
open;
end;
if query1.fields[0].asinteger>0 then
begin
showmessage('有重复记录');
end;
 
异常怎么写?
 
98. Delphi中获得BDE、ADO的错误号
Delphi的数据库对象,如Ttable和TadoTable有以下一些Error事件:OnDeleteError、OnDeleteErro、OnPostError。这些事件的定义如下,都是数据集错误:
type TDataSetErrorEvent = procedure(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction) of object;
property OnPostError: TDataSetErrorEvent;

在这些事件在EdatabaseError中是无法得到错误号的,其中只有Message属性。在发生BDE错误时可如下得到错误号:
if E is EDBEngineError then
showmessage(inttostr(EDBEngineError(E).Errors[0].ErrorCode));
也可以这么写:
if E is EDBEngineError then
showmessage(inttostr((E As EDBEngineError).Errors[0].ErrorCode));
但在发生ADO错误时不能这样: E is EadoError。
其实Ado错误在数据集相应的数据库连接中都有:TadoConnection.Errors。
procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction);
var
i:integer;
begin
memo1.Lines.Add(inttostr(table1.Connection.errors.count ));
for i:=0 to AdoConnection1.errors.count-1 do
begin
memo1.Lines.Add('number:'+inttohex(AdoConnection1.errors.Number,8 ));
memo1.Lines.Add('NativeCode:'+inttostr(AdoConnection1.errors.NativeError ));
memo1.Lines.Add(inttostr(AdoConnection1.errors.HelpContext ));
memo1.Lines.Add(AdoConnection1.errors.Source );
memo1.Lines.Add(AdoConnection1.errors.SQLState );
memo1.Lines.Add('Description:'+AdoConnection1.errors.Description );
end;
memo1.Lines.Add('error Msg :'+e.message);
end;
NativeError是Foxpro的原生错误号,非常详细,一般用这个来判断发生的错误。Number是Sql错误号,是大的分类,一般一个Number和多个NativeError对应。
这些错误码的信息在文档Drvvfp.hlp中都有。

 
多人接受答案了。
 
顶部