单步也不行啊 var i : integer; begin with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('select Code from book '); Open; First; for i:=0 to RecordCount-1 do begin ComboBox1.Items.Add(FieldbyName('Code').AsString); Next; end; Close; end; end;procedure Tlendfrm.ComboBox1Change(Sender: TObject); var FDate : TDate; OwnTime : TDate; begin ReaderIDEdit.Text:=''; TotalEdit.Text:=''; OwnTimeEdit.Text:=''; FineEdit.Text:=''; if Length(ComboBox1.Text) = 10 then begin try with DataModuleADO.ADOTable1 do begin TableName:='book'; DBOutDate.DataField:= 'OutDate'; DBName.DataField:= 'Name'; DBAuthor.DataField:= 'Author'; DBPress.DataField:= 'Press'; DBCost.DataField:= 'Cost'; DBMemo.DataField:= 'Memo0'; Active:=True; if not Locate('code',ComboBox1.Text,[])then begin MessageDlg('没有数据或数据库操作失败',mtError,[mbok],0); Panel1.Visible := False; Exit; end; Panel1.Visible := True; end; except MessageDlg('数据操作出错',mtError,[mbok],0); end; try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('select * from Lend where Code = :Code'); Parameters.ParamByName('Code').Value := ComboBox1.Text; Open; if RecordCount <> 0 then begin FDate := FieldByName('OutDate').AsDateTime; OwnTime := Date - FDate; OwnTimeEdit.Text := FloatToStr(OwnTime); ReaderIDEdit.Text := FieldByName('ReaderID').AsString; label10.Visible := True; OwnTimeEdit.Visible := True; if StrToInt(OwnTimeEdit.Text)>60 then begin FineEdit.Visible := True; label11.Visible := True; FineEdit.Text := FloatToStr((StrToInt(OwnTimeEdit.Text)-60)*0.1); end; Button1.Enabled := False; Button2.Enabled := True; Button2.SetFocus; Close; end else begin ReaderIDEdit.SetFocus; Button1.Enabled := True; Button2.Enabled := False; end; end; except ReaderIDEdit.SetFocus; end; end; end; procedure Tlendfrm.Button1Click(Sender: TObject); var tempOwnBook : TOwnBook; begin if ReaderIDEdit.Text <>'' then begin try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('select Code from Lend where ReaderID =:ReaderID'); Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text; Open; canLand :=true; OwnBookForm.ListView1.Items.Clear; while not Eof do begin with ADOQuery1 do begin SQL.Clear; SQL.Add('select * from Book where Code =:Code'); Parameters.ParamByName('Code').Value := DataModuleADO.ADOQuery1.FieldByName('Code').AsString; Open; tempOwnBook.Code := FieldByName('Code').AsString; tempOwnBook.Name := FieldByName('Name').AsString; tempOwnBook.Price := FieldByName('Cost').AsString; try with ADOQuery2 do begin SQL.Clear; SQL.Add('select * from Lend where Code = :Code and ReaderID =:ReaderID'); Parameters.ParamByName('Code').Value := DataModuleADO.ADOQuery1.FieldByName('Code').AsString; Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text; Open; tempOwnBook.OwnDays := Round(Date-FieldByName('OutDate').AsDateTime); Close; end; except tempOwnBook.OwnDays := 0; end; Close; end; if tempOwnBook.OwnDays >60 then begin with OwnBookForm.ListView1.Items.Add do begin Caption := tempOwnBook.Code; SubItems.Add(tempOwnBook.Name); SubItems.Add(tempOwnBook.Price); SubItems.Add(IntToStr(tempOwnBook.OwnDays)); SubItems.Add(FloatToStr((tempOwnBook.OwnDays-60)*0.1)); end; CanLand := False; end; Next; end; Close; end; except CanLand := False; end; if CanLand = False then begin OwnBookForm.Caption := ReaderIDEdit.Text+'有以下书籍没按时归还'; OwnBookForm.ShowModal; Exit; end; try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('insert into Lend'+' values(:Code,:ReaderID,:OutDate)'); Parameters.ParamByName('Code').Value := ComboBox1.Text; Parameters.ParamByName('ReaderID').Value:=ReaderIDEdit.Text; Parameters.ParamByName('OutDate').Value := DateToStr(now);
ExecSQL; end; except MessageDlg('借书不成功',mtError,[mbok],0); end; Panel1.Visible := False; end else begin ShowMessage('请输入借书证号!'); ReaderIDEdit.Setfocus; end; end;procedure Tlendfrm.Button2Click(Sender: TObject); begin try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('delete from Lend where Code =:Code'); Parameters.ParamByName('Code').Value := ComboBox1.Text; ExecSQL; Close; end; except MessageDlg('还书不成功',mtError,[mbok],0); end; ReaderIDEdit.Text:=''; TotalEdit.Text:=''; OwnTimeEdit.Text:=''; FineEdit.Text:=''; Panel1.Visible := False; end; procedure Tlendfrm.Button3Click(Sender: TObject); begin close; end;procedure Tlendfrm.readeridEditChange(Sender: TObject); begin if Length(ReaderIDEdit.Text) = 10 then begin with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('select ReaderID from Reader where ReaderID =:ReaderID'); Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text; Open; if RecordCount =0 then begin Button1.Enabled := False; MessageDlg('借书证号<'+ReaderIDEdit.Text+'>不存在',mtError,[mbok],0); Close; Exit; end; Close; end; try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('select Count(ReaderID) from Lend where ReaderID =:ReaderID'); Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text; Open; TotalEdit.Text :=IntToStr(Fields[0].Value); Close; end; except TotalEdit.Text :='0'; end; Button2.Enabled:=False; Button1.Enabled := True; Button1.SetFocus; end; end;end.
var tempOwnBook : TOwnBook; begin if ReaderIDEdit.Text <>'' then begin try with DataModuleADO.ADOQuery1 do begin SQL.Clear; SQL.Add('select Code from Lend where ReaderID =:ReaderID'); Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text; Open; canLand :=true; OwnBookForm.ListView1.Items.Clear;
004DODDF 是发生错误的代码位置,000002F8 是指针指向的地址。
i : integer;
begin
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select Code from book ');
Open;
First;
for i:=0 to RecordCount-1 do
begin
ComboBox1.Items.Add(FieldbyName('Code').AsString);
Next;
end;
Close;
end;
end;procedure Tlendfrm.ComboBox1Change(Sender: TObject);
var
FDate : TDate;
OwnTime : TDate;
begin
ReaderIDEdit.Text:='';
TotalEdit.Text:='';
OwnTimeEdit.Text:='';
FineEdit.Text:=''; if Length(ComboBox1.Text) = 10 then
begin
try
with DataModuleADO.ADOTable1 do
begin
TableName:='book'; DBOutDate.DataField:= 'OutDate';
DBName.DataField:= 'Name';
DBAuthor.DataField:= 'Author';
DBPress.DataField:= 'Press';
DBCost.DataField:= 'Cost';
DBMemo.DataField:= 'Memo0'; Active:=True;
if not Locate('code',ComboBox1.Text,[])then
begin
MessageDlg('没有数据或数据库操作失败',mtError,[mbok],0);
Panel1.Visible := False;
Exit;
end;
Panel1.Visible := True;
end;
except
MessageDlg('数据操作出错',mtError,[mbok],0);
end; try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select * from Lend where Code = :Code');
Parameters.ParamByName('Code').Value := ComboBox1.Text;
Open; if RecordCount <> 0 then
begin
FDate := FieldByName('OutDate').AsDateTime;
OwnTime := Date - FDate;
OwnTimeEdit.Text := FloatToStr(OwnTime);
ReaderIDEdit.Text := FieldByName('ReaderID').AsString; label10.Visible := True; OwnTimeEdit.Visible := True; if StrToInt(OwnTimeEdit.Text)>60 then
begin
FineEdit.Visible := True;
label11.Visible := True;
FineEdit.Text := FloatToStr((StrToInt(OwnTimeEdit.Text)-60)*0.1);
end;
Button1.Enabled := False;
Button2.Enabled := True;
Button2.SetFocus;
Close;
end
else begin
ReaderIDEdit.SetFocus;
Button1.Enabled := True;
Button2.Enabled := False;
end;
end;
except
ReaderIDEdit.SetFocus;
end;
end;
end;
procedure Tlendfrm.Button1Click(Sender: TObject);
var
tempOwnBook : TOwnBook;
begin
if ReaderIDEdit.Text <>'' then
begin
try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select Code from Lend where ReaderID =:ReaderID');
Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text;
Open;
canLand :=true;
OwnBookForm.ListView1.Items.Clear;
while not Eof do
begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select * from Book where Code =:Code');
Parameters.ParamByName('Code').Value :=
DataModuleADO.ADOQuery1.FieldByName('Code').AsString;
Open;
tempOwnBook.Code := FieldByName('Code').AsString;
tempOwnBook.Name := FieldByName('Name').AsString;
tempOwnBook.Price := FieldByName('Cost').AsString; try
with ADOQuery2 do
begin
SQL.Clear;
SQL.Add('select * from Lend where Code = :Code and ReaderID =:ReaderID');
Parameters.ParamByName('Code').Value :=
DataModuleADO.ADOQuery1.FieldByName('Code').AsString;
Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text;
Open;
tempOwnBook.OwnDays := Round(Date-FieldByName('OutDate').AsDateTime);
Close;
end;
except
tempOwnBook.OwnDays := 0;
end;
Close;
end; if tempOwnBook.OwnDays >60 then
begin
with OwnBookForm.ListView1.Items.Add do
begin
Caption := tempOwnBook.Code;
SubItems.Add(tempOwnBook.Name);
SubItems.Add(tempOwnBook.Price);
SubItems.Add(IntToStr(tempOwnBook.OwnDays));
SubItems.Add(FloatToStr((tempOwnBook.OwnDays-60)*0.1));
end;
CanLand := False;
end;
Next;
end;
Close;
end;
except
CanLand := False;
end; if CanLand = False then
begin
OwnBookForm.Caption := ReaderIDEdit.Text+'有以下书籍没按时归还';
OwnBookForm.ShowModal;
Exit;
end; try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('insert into Lend'+' values(:Code,:ReaderID,:OutDate)');
Parameters.ParamByName('Code').Value := ComboBox1.Text;
Parameters.ParamByName('ReaderID').Value:=ReaderIDEdit.Text;
Parameters.ParamByName('OutDate').Value := DateToStr(now);
ExecSQL;
end;
except
MessageDlg('借书不成功',mtError,[mbok],0);
end; Panel1.Visible := False;
end
else begin
ShowMessage('请输入借书证号!');
ReaderIDEdit.Setfocus;
end;
end;procedure Tlendfrm.Button2Click(Sender: TObject);
begin
try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('delete from Lend where Code =:Code');
Parameters.ParamByName('Code').Value := ComboBox1.Text;
ExecSQL;
Close;
end;
except
MessageDlg('还书不成功',mtError,[mbok],0);
end; ReaderIDEdit.Text:='';
TotalEdit.Text:='';
OwnTimeEdit.Text:='';
FineEdit.Text:='';
Panel1.Visible := False;
end;
procedure Tlendfrm.Button3Click(Sender: TObject);
begin
close;
end;procedure Tlendfrm.readeridEditChange(Sender: TObject);
begin
if Length(ReaderIDEdit.Text) = 10 then
begin
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select ReaderID from Reader where ReaderID =:ReaderID');
Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text;
Open;
if RecordCount =0 then
begin
Button1.Enabled := False;
MessageDlg('借书证号<'+ReaderIDEdit.Text+'>不存在',mtError,[mbok],0);
Close;
Exit;
end;
Close;
end; try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select Count(ReaderID) from Lend where ReaderID =:ReaderID');
Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text;
Open;
TotalEdit.Text :=IntToStr(Fields[0].Value);
Close;
end;
except
TotalEdit.Text :='0';
end; Button2.Enabled:=False;
Button1.Enabled := True;
Button1.SetFocus;
end;
end;end.
tempOwnBook : TOwnBook;
begin
if ReaderIDEdit.Text <>'' then
begin
try
with DataModuleADO.ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select Code from Lend where ReaderID =:ReaderID');
Parameters.ParamByName('ReaderID').Value := ReaderIDEdit.Text;
Open;
canLand :=true;
OwnBookForm.ListView1.Items.Clear;