📄 blobrdu.pas
字号:
unit BLObRdU;
interface
uses
Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, Db, DBTables;
type
TForm1 = class(TForm)
tblBioLife: TTable;
fldCommonName: TStringField;
fldNotes: TMemoField;
edtCommonName: TEdit;
memNotes: TMemo;
Label1: TLabel;
Label2: TLabel;
btnPrior: TSpeedButton;
btnNext: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure btnPriorClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure FieldChange(Sender: TObject);
private
FieldChanged: Boolean;
public
procedure UpdateTableFromUI;
procedure UpdateUIFromTable;
procedure MoveRecord(MoveBy: Integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.UpdateTableFromUI;
var
Stream: TStream;
begin
try
tblBioLife.Edit;
{ Save edit control into string field }
fldCommonName.AsString := edtCommonName.Text;
Stream := TBlobStream.Create(fldNotes, bmWrite);
try
{ Save memo control into BLOb field }
memNotes.Lines.SaveToStream(Stream)
finally
Stream.Free
end;
tblBioLife.Post
except
tblBioLife.Cancel
end
end;
procedure TForm1.UpdateUIFromTable;
var
Stream: TStream;
begin
{ Disable buttons as appropriate }
btnPrior.Enabled := not tblBioLife.Bof;
btnNext.Enabled := not tblBioLife.Eof;
{ Load edit control from string field }
edtCommonName.Text := fldCommonName.AsString;
Stream := TBlobStream.Create(fldNotes, bmRead);
try
{ Load BLOb field into memo control }
memNotes.Lines.LoadFromStream(Stream);
finally
Stream.Free
end;
{ Reset change detector }
FieldChanged := False
end;
procedure TForm1.MoveRecord(MoveBy: Integer);
begin
{ If change made, ask if it should be saved }
if FieldChanged and
(MessageDlg('Record has changed. Update table?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes) then
UpdateTableFromUI;
{ Go to requested record }
tblBioLife.MoveBy(MoveBy);
{ Refresh UI }
UpdateUIFromTable
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
tblBioLife.Open;
UpdateUIFromTable
end;
procedure TForm1.btnPriorClick(Sender: TObject);
begin
MoveRecord(-1)
end;
procedure TForm1.btnNextClick(Sender: TObject);
begin
MoveRecord(1)
end;
{ Event handler shared by edit's and memo's OnChange events }
procedure TForm1.FieldChange(Sender: TObject);
begin
{ When edit/memo is changed, set change detector }
FieldChanged := True
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -