unit HSS_Form;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TFlatButtonUnit, ComCtrls, ExtCtrls,DB,ADODB;type
THSS_F = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
HSXX_LV: TListView;
QD_FBtn: TFlatButton;
QX_FBtn: TFlatButton;
procedure HSXX_LVDblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure QX_FBtnClick(Sender: TObject);
procedure QD_FBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
HSS_F: THSS_F;implementation
uses
IniFiles, TSJH_Form, Share_Unit;{$R *.dfm}
//***********************************************************************************
procedure THSS_F.FormDestroy(Sender: TObject);
begin
HSS_F:=nil;
end;
//***********************************************************************************procedure THSS_F.FormCreate(Sender: TObject);
var
HSXX_Q:TADOQuery;
Book:TListItem;
begin
HSXX_Q:=TADOQuery.Create(nil);
HSXX_Q.Connection:=Connect;
HSXX_Q.SQL.Add('Select A.图书编号,还书日期,书名,数量 From 借阅信息 A,图书信息 B ');
HSXX_Q.SQL.Add('Where A.用户帐号=:用户帐号 and A.图书编号=B.图书编号');
HSXX_Q.Parameters.ParamByName('用户帐号').Value:=BH;//TTSJH_F(Share_JSHS).TSBH_FE.Text; ////JSHS_F.TSBH_FE.Text;后面的不能用
HSXX_Q.Open;
if not(HSXX_Q.Bof and HSXX_Q.Eof) then
while not HSXX_Q.Eof do
begin
if HSXX_Q.FieldByName('还书日期').IsNull then //显示没有还的书的信息
begin
Book:=HSXX_LV.Items.Add;
Book.Caption:=HSXX_Q.FieldValues['图书编号'];
Book.SubItems.Add(HSXX_Q.FieldValues['书名']);
Book.SubItems.Add(HSXX_Q.FieldValues['数量']);
end;
HSXX_Q.Next;
end;
FreeAndNil(HSXX_Q);
end;
//***********************************************************************************
procedure THSS_F.HSXX_LVDblClick(Sender: TObject);
var
HSXX_Q:TADOQuery;
SH:String;
TS:Integer;
MyIniFile:TiniFile;
FJ,FJDay:Double;
begin
SH:=HSXX_LV.Selected.Caption;
TTSJH_F(Share_JSHS).HSSL_FE.Text:=HSXX_LV.Selected.SubItems[1]; HSXX_Q:=TADOQuery.Create(nil); //查询此图书的基本信息
HSXX_Q.Connection:=Connect;
HSXX_Q.SQL.Add('Select * From 图书信息 A Where A.图书编号=:图书编号');
HSXX_Q.Parameters.ParamByName('图书编号').Value:=SH;
HSXX_Q.Open; TTSJH_F(Share_JSHS).HSBH_FE.Text:=SH;
TTSJH_F(Share_JSHS).HSSM_FE.Text:=HSXX_Q.FieldValues['书名'];
TTSJH_F(Share_JSHS).HSZZ_FE.Text:=HSXX_Q.FieldValues['作者'];
TTSJH_F(Share_JSHS).HSCBS_FE.Text:=HSXX_Q.FieldValues['出版社'];
TTSJH_F(Share_JSHS).HSDJ_FE.Text:=HSXX_Q.FieldValues['定价']; HSXX_Q.Close; //读取借书者的姓名和到期的时间
HSXX_Q.SQL.Clear;
HSXX_Q.SQL.Add('Select A.书名,B.到期日期 From 用户 A,借阅信息 B Where A.用户帐号=:用户帐号 and 还书日期 is Null');
HSXX_Q.SQL.Add(' and A.用户帐号=B.用户帐号');
HSXX_Q.Parameters.ParamByName('用户帐号').Value:=BH;//TTSJH_F(Share_JSHS).TSBH_FE.Text; //用户ID号
HSXX_Q.Open;
TTSJH_F(Share_JSHS).HSXM_FE.Text:=HSXX_Q.FieldValues['姓名'];
TS:=Date-HSXX_Q.FieldValues['到期日期'];
if TS<0 then TS:=0; //天数为负,表示按时归还
TTSJH_F(Share_JSHS).HSCGTS_FE.Text:=IntToStr(TS); if TS>0 then //计算罚金
begin
MyIniFile:=TiniFile.Create(Application.ExeName+'set.ini');
FJDay:=MyIniFile.ReadFloat('set','FJDay',0.5);
FreeAndNil(MyIniFile);
end;
FJ:=FJDay*TS*(StrToInt(HSXX_LV.Selected.SubItems[1]));
TTSJH_F(Share_JSHS).HSFJ_FE.Text:=FloatToStr(FJ);
FreeAndNil(HSXX_Q);
close;
end;
//***********************************************************************************
procedure THSS_F.QX_FBtnClick(Sender: TObject);
begin
close;
end;procedure THSS_F.QD_FBtnClick(Sender: TObject);
begin
HSXX_LVDblClick(HSXX_LV);
end;end.
工程1.exe检测到错误类EAccessViolation,错误信息:'Access violation at address 00403DD8 in module '1.exe'.Read of address 0000001C'.进程终止.使用单步或运行继续运行.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TFlatButtonUnit, ComCtrls, ExtCtrls,DB,ADODB;type
THSS_F = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
HSXX_LV: TListView;
QD_FBtn: TFlatButton;
QX_FBtn: TFlatButton;
procedure HSXX_LVDblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure QX_FBtnClick(Sender: TObject);
procedure QD_FBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
HSS_F: THSS_F;implementation
uses
IniFiles, TSJH_Form, Share_Unit;{$R *.dfm}
//***********************************************************************************
procedure THSS_F.FormDestroy(Sender: TObject);
begin
HSS_F:=nil;
end;
//***********************************************************************************procedure THSS_F.FormCreate(Sender: TObject);
var
HSXX_Q:TADOQuery;
Book:TListItem;
begin
HSXX_Q:=TADOQuery.Create(nil);
HSXX_Q.Connection:=Connect;
HSXX_Q.SQL.Add('Select A.图书编号,还书日期,书名,数量 From 借阅信息 A,图书信息 B ');
HSXX_Q.SQL.Add('Where A.用户帐号=:用户帐号 and A.图书编号=B.图书编号');
HSXX_Q.Parameters.ParamByName('用户帐号').Value:=BH;//TTSJH_F(Share_JSHS).TSBH_FE.Text; ////JSHS_F.TSBH_FE.Text;后面的不能用
HSXX_Q.Open;
if not(HSXX_Q.Bof and HSXX_Q.Eof) then
while not HSXX_Q.Eof do
begin
if HSXX_Q.FieldByName('还书日期').IsNull then //显示没有还的书的信息
begin
Book:=HSXX_LV.Items.Add;
Book.Caption:=HSXX_Q.FieldValues['图书编号'];
Book.SubItems.Add(HSXX_Q.FieldValues['书名']);
Book.SubItems.Add(HSXX_Q.FieldValues['数量']);
end;
HSXX_Q.Next;
end;
FreeAndNil(HSXX_Q);
end;
//***********************************************************************************
procedure THSS_F.HSXX_LVDblClick(Sender: TObject);
var
HSXX_Q:TADOQuery;
SH:String;
TS:Integer;
MyIniFile:TiniFile;
FJ,FJDay:Double;
begin
SH:=HSXX_LV.Selected.Caption;
TTSJH_F(Share_JSHS).HSSL_FE.Text:=HSXX_LV.Selected.SubItems[1]; HSXX_Q:=TADOQuery.Create(nil); //查询此图书的基本信息
HSXX_Q.Connection:=Connect;
HSXX_Q.SQL.Add('Select * From 图书信息 A Where A.图书编号=:图书编号');
HSXX_Q.Parameters.ParamByName('图书编号').Value:=SH;
HSXX_Q.Open; TTSJH_F(Share_JSHS).HSBH_FE.Text:=SH;
TTSJH_F(Share_JSHS).HSSM_FE.Text:=HSXX_Q.FieldValues['书名'];
TTSJH_F(Share_JSHS).HSZZ_FE.Text:=HSXX_Q.FieldValues['作者'];
TTSJH_F(Share_JSHS).HSCBS_FE.Text:=HSXX_Q.FieldValues['出版社'];
TTSJH_F(Share_JSHS).HSDJ_FE.Text:=HSXX_Q.FieldValues['定价']; HSXX_Q.Close; //读取借书者的姓名和到期的时间
HSXX_Q.SQL.Clear;
HSXX_Q.SQL.Add('Select A.书名,B.到期日期 From 用户 A,借阅信息 B Where A.用户帐号=:用户帐号 and 还书日期 is Null');
HSXX_Q.SQL.Add(' and A.用户帐号=B.用户帐号');
HSXX_Q.Parameters.ParamByName('用户帐号').Value:=BH;//TTSJH_F(Share_JSHS).TSBH_FE.Text; //用户ID号
HSXX_Q.Open;
TTSJH_F(Share_JSHS).HSXM_FE.Text:=HSXX_Q.FieldValues['姓名'];
TS:=Date-HSXX_Q.FieldValues['到期日期'];
if TS<0 then TS:=0; //天数为负,表示按时归还
TTSJH_F(Share_JSHS).HSCGTS_FE.Text:=IntToStr(TS); if TS>0 then //计算罚金
begin
MyIniFile:=TiniFile.Create(Application.ExeName+'set.ini');
FJDay:=MyIniFile.ReadFloat('set','FJDay',0.5);
FreeAndNil(MyIniFile);
end;
FJ:=FJDay*TS*(StrToInt(HSXX_LV.Selected.SubItems[1]));
TTSJH_F(Share_JSHS).HSFJ_FE.Text:=FloatToStr(FJ);
FreeAndNil(HSXX_Q);
close;
end;
//***********************************************************************************
procedure THSS_F.QX_FBtnClick(Sender: TObject);
begin
close;
end;procedure THSS_F.QD_FBtnClick(Sender: TObject);
begin
HSXX_LVDblClick(HSXX_LV);
end;end.
工程1.exe检测到错误类EAccessViolation,错误信息:'Access violation at address 00403DD8 in module '1.exe'.Read of address 0000001C'.进程终止.使用单步或运行继续运行.
先檢查下 if HSXX_LV.Selected = nil 判斷下
2.释放对象一定用FreeAndNil
3 查问题可以采取Log+砍代码的方式进行