📄 ubookmodify.~pas
字号:
unit uBookModify;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, dbtables, Buttons;
type
TfrmBookModify = class(TForm)
Label1: TLabel;
btnCancel: TSpeedButton;
btnSave: TSpeedButton;
Panel3: TPanel;
Bevel1: TBevel;
edtCode: TEdit;
StaticText1: TStaticText;
edtName: TEdit;
StaticText2: TStaticText;
StaticText3: TStaticText;
edtClass: TEdit;
StaticText4: TStaticText;
edtAuthor: TEdit;
StaticText5: TStaticText;
edtPublisher: TEdit;
StaticText6: TStaticText;
edtDate: TEdit;
StaticText7: TStaticText;
edtPrice: TEdit;
StaticText8: TStaticText;
edtMemo: TMemo;
cmbClass: TComboBox;
Panel2: TPanel;
btnBookCode: TButton;
btnDelete: TSpeedButton;
procedure edtCodeChange(Sender: TObject);
procedure cmbClassChange(Sender: TObject);
procedure btnBookCodeClick(Sender: TObject);
procedure edtCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetUserID(Code : string):string;
procedure DelBook(Code: string);
procedure ViewBook(Code : string);
function GetClassName(ClassID : string): string;
procedure UpDateBook(Code : string);
procedure Init;
end;
var
frmBookModify: TfrmBookModify;
implementation
uses
uPublic, main, uShowBookF;
{$R *.DFM}
//根据相应的书号查找相关书籍
procedure TfrmBookModify.ViewBook(Code : string);
var
Query : TQuery;
i : integer;
FoundClass : boolean;
begin
Query := TQuery.Create(nil);
Query.DatabaseName := DBName;
Query.SQL.Add('select Book.* ,ClassName from book,Class where Code=:Code');
Query.ParamByName('Code').AsString := Code;
Query.Open;
if Query.RecordCount = 0 then
MessageDlg('没有此书的信息存在',mtError,[mbok],0);
edtName.Text := Query.FieldByName('Name').AsString;
FoundClass := False;
for i := 0 to cmbClass.Items.Count-1 do
begin
if Query.FieldByName('Class').AsString = cmbClass.Items[i] then
begin
cmbClass.ItemIndex := i;
FoundClass := True;
end;
end;
if not FoundClass then
cmbClass.ItemIndex := 0;
edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
edtAuthor.Text := Query.FieldByName('Author').AsString;
edtPublisher.Text := Query.FieldByName('Concern').AsString;
edtDate.Text := Query.FieldByName('OutDate').AsString;
edtPrice.Text := Query.FieldByName('Cost').AsString;
edtMemo.Lines.Text:=Query.FieldByName('Memo').AsString;
Query.Close;
Query.Free;
end;
procedure TfrmBookModify.edtCodeChange(Sender: TObject);
begin
if Length(edtCode.Text) = CodeLength then
begin
try
ViewBook(edtCode.Text);
except
MessageDlg('数据操作出错',mtError,[mbok],0);
end;
end;
end;
//根据类别号找到类别名称
function TfrmBookModify.GetClassName(ClassID: string): string;
var
Query : TQuery;
begin
try
Query := TQuery.Create(nil);
Query.DatabaseName := DBName;
Query.SQL.Add('select ClassName from Class where ClassID =:ClassID');
Query.ParamByName('ClassID').AsString := ClassID;
Query.Open;
if Query.RecordCount = 0 then
Result := ''
else Result := Query.FieldByName('ClassName').AsString;
Query.Close;
Query.Free;
except
Result := '';
end;
end;
procedure TfrmBookModify.cmbClassChange(Sender: TObject);
begin
edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
end;
//在书籍表中更新某书的信息
procedure TfrmBookModify.UpDateBook(Code: string);
var
Query : TQuery;
begin
Query := TQuery.Create(nil);
Query.DatabaseName := DBName;
Query.SQL.Add('update book set Name=:Name, Class =:Class,Author =:Author,'+
' Concern =:ConCern,OutDate=:OutDate,Cost = :Cost,Memo =:Memo'+
' where Code = :Code');
Query.ParamByName('Code').AsString := Code;
Query.ParamByName('Name').AsString := edtName.Text;
Query.ParamByName('Class').AsString := cmbClass.Items[cmbClass.ItemIndex];
Query.ParamByName('Author').AsString := edtAuthor.Text;
Query.ParamByName('Concern').AsString := edtPublisher.Text;
try
Query.ParamByName('OutDate').AsDateTime := StrToDate(edtDate.Text);
except
MessageDlg('参数<出版时间>设置错误',mtError,[mbok],0);
Query.Free;
Exit;
end;
try
Query.ParamByName('Cost').AsFloat := StrToFloat(edtPrice.Text);
except
MessageDlg('参数<价格>设置错误',mtError,[mbok],0);
Query.Free;
Exit;
end;
Query.ParamByName('Memo').AsString := edtMemo.Lines.GetText;
Query.ExecSQL;
Query.Free;
end;
//图书信息调整时初始化相关控件
procedure TfrmBookModify.Init;
begin
edtCode.SetFocus;
edtCode.SelectAll;
edtName.Text := '';
edtAuthor.Text := '';
edtDate.Text := '';
edtPrice.Text := '';
edtPublisher.Text := '';
cmbClass.ItemIndex := 0;
edtMemo.Lines.Clear;
edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
end;
procedure TfrmBookModify.btnBookCodeClick(Sender: TObject);
var
P : TPoint;
begin
P.x := Panel2.Left;
P.y := Panel2.Top +Panel2.Height;
ShowBookF.Top := Panel3.ClientToScreen(P).y;
ShowBookF.Left := Panel3.ClientToScreen(P).x;
ShowBookF.Show(edtCode);
end;
procedure TfrmBookModify.edtCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
edtCodeChange(Sender);
end;
procedure TfrmBookModify.FormCreate(Sender: TObject);
var
Query : TQuery;
begin
try
Query := TQuery.Create(nil);
Query.DatabaseName := DBName;
Query.SQL.Add('select ClassID from Class');
Query.Open;
while not Query.Eof do
begin
cmbClass.Items.Add(Query.FieldByName('ClassID').AsString);
Query.Next;
end;
cmbClass.ItemIndex := 0;
edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
Query.Close;
Query.Free;
except
cmbClass.Items.Clear;
end;
end;
procedure TfrmBookModify.btnCancelClick(Sender: TObject);
begin
close;
end;
//保存当前的书籍信息
procedure TfrmBookModify.btnSaveClick(Sender: TObject);
begin
try
if Length(edtCode.Text)<>CodeLength then
begin
MessageDlg('书号不正确,不能更新数据。',mtWarning,[mbok],0);
edtCode.SetFocus;
Exit;
end;
UpDateBook(edtCode.Text);
Init;
except
MessageDlg('保存出错',mtError,[mbok],0);
end;
edtCode.SetFocus;
end;
//删除当前的书籍
procedure TfrmBookModify.btnDeleteClick(Sender: TObject);
var
UserID : string;
begin
UserID := GetUserID(edtCode.Text);
if UserID <> '' then
begin
if MessageBox(0,PChar('此书<'+edtCode.Text+'>借出,确实要删除吗?'),'警告',MB_YESNO)= IDYES then
begin
try
DelBook(edtCode.Text);
MessageBox(0,'删除完成',PChar('删除'+edtCode.Text),MB_OK);
except
MessageDlg('删除<'+edtCode.Text+'>失败',mtWarning,[mbok],0);
end;
end
end
else begin
try
DelBook(edtCode.Text);
MessageBox(0,'删除完成',PChar('删除'+edtCode.Text),MB_OK);
except
MessageDlg('删除<'+edtCode.Text+'>失败',mtWarning,[mbok],0);
end;
end;
edtCode.Text :='';
Init;
end;
//从借书记录表中根据书名查找借书人号
function TfrmBookModify.GetUserID(Code: string): string;
var
Query : TQuery;
begin
try
Query := TQuery.Create(nil);
Query.DatabaseName := DBName;
Query.SQL.Add('select UserID from Owner where Code =:Code');
Query.ParamByName('Code').AsString := Code;
Query.Open;
if Query.RecordCount = 0 then
Result := ''
else Result := Query.FieldByName('UserID').AsString;
Query.Close;
Query.Free;
except
Result := '';
end;
end;
// 删除某指定书籍记录
procedure TfrmBookModify.DelBook(Code: string);
var
Query : TQuery;
begin
Query := TQuery.Create(nil);
Query.DatabaseName := DBName;
Query.SQL.Clear;
Query.SQL.Add('delete from Book where Code =:Code');
Query.ParamByName('Code').AsString := Code;
Query.ExecSQL;
Query.SQL.Clear;
Query.SQL.Add('delete from Owner where Code =:Code');
Query.ParamByName('Code').AsString := Code;
Query.ExecSQL;
Query.Close;
Query.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -