📄 main.pas
字号:
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBCtrls, ExtCtrls, Db, Grids, DBGrids, MemDS, StdCtrls, ToolWin,
ComCtrls, Buttons, DBAccess, MSAccess, SdacVcl;
type
TfmMain = class(TForm)
MSConnection: TMSConnection;
DBGrid: TDBGrid;
DataSource: TDataSource;
ToolBar: TPanel;
btOpen: TButton;
DBNavigator: TDBNavigator;
btClose: TButton;
MSConnectDialog: TMSConnectDialog;
MSQuery: TMSQuery;
btApply: TBitBtn;
btCancel: TBitBtn;
btStartTrans: TBitBtn;
btCommitTrans: TBitBtn;
btRollbackTrans: TBitBtn;
StatusBar: TStatusBar;
cbCachedUpdates: TCheckBox;
btCommit: TBitBtn;
cbDebug: TCheckBox;
cbUnmodified: TCheckBox;
Label1: TLabel;
cbModified: TCheckBox;
cbInserted: TCheckBox;
cbDeleted: TCheckBox;
btRevertRecord: TBitBtn;
RefreshRecord: TButton;
cbCustomUpdate: TCheckBox;
procedure btOpenClick(Sender: TObject);
procedure btCloseClick(Sender: TObject);
procedure btApplyClick(Sender: TObject);
procedure btCancelClick(Sender: TObject);
procedure btStartTransClick(Sender: TObject);
procedure btCommitTransClick(Sender: TObject);
procedure btRollbackTransClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure cbCachedUpdatesClick(Sender: TObject);
procedure MSQueryUpdateError(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
procedure MSQueryUpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
procedure cbCustomUpdateClick(Sender: TObject);
procedure MSQueryCalcFields(DataSet: TDataSet);
procedure btCommitClick(Sender: TObject);
procedure cbDebugClick(Sender: TObject);
procedure cbUnmodifiedClick(Sender: TObject);
procedure cbModifiedClick(Sender: TObject);
procedure cbInsertedClick(Sender: TObject);
procedure cbDeletedClick(Sender: TObject);
procedure DataSourceDataChange(Sender: TObject; Field: TField);
procedure DataSourceStateChange(Sender: TObject);
procedure DBGridDrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
procedure btRevertRecordClick(Sender: TObject);
procedure RefreshRecordClick(Sender: TObject);
private
{ Private declarations }
procedure ShowTrans;
procedure ShowPending;
procedure ShowUpdateRecordTypes;
public
{ Public declarations }
end;
var
fmMain: TfmMain;
implementation
uses
UpdateAction;
{$R *.nfm}
procedure TfmMain.ShowTrans;
begin
if MSConnection.InTransaction then
StatusBar.Panels[1].Text:= 'In Transaction'
else
StatusBar.Panels[1].Text:= '';
end;
procedure TfmMain.ShowPending;
begin
if MSQuery.UpdatesPending then
StatusBar.Panels[0].Text:= 'Updates Pending'
else
StatusBar.Panels[0].Text:= '';
end;
procedure TfmMain.ShowUpdateRecordTypes;
begin
if MSQuery.CachedUpdates then begin
cbUnmodified.Checked:= rtUnmodified in MSQuery.UpdateRecordTypes;
cbModified.Checked:= rtModified in MSQuery.UpdateRecordTypes;
cbInserted.Checked:= rtInserted in MSQuery.UpdateRecordTypes;
cbDeleted.Checked:= rtDeleted in MSQuery.UpdateRecordTypes;
end;
end;
procedure TfmMain.btOpenClick(Sender: TObject);
begin
MSQuery.Open;
end;
procedure TfmMain.btCloseClick(Sender: TObject);
begin
MSQuery.Close;
end;
procedure TfmMain.btApplyClick(Sender: TObject);
begin
MSQuery.ApplyUpdates;
ShowPending;
end;
procedure TfmMain.btCommitClick(Sender: TObject);
begin
MSQuery.CommitUpdates;
ShowPending;
end;
procedure TfmMain.btCancelClick(Sender: TObject);
begin
MSQuery.CancelUpdates;
ShowPending;
end;
procedure TfmMain.btStartTransClick(Sender: TObject);
begin
MSConnection.StartTransaction;
ShowTrans;
end;
procedure TfmMain.btCommitTransClick(Sender: TObject);
begin
MSConnection.Commit;
ShowTrans;
end;
procedure TfmMain.btRollbackTransClick(Sender: TObject);
begin
MSConnection.Rollback;
ShowTrans;
end;
procedure TfmMain.FormShow(Sender: TObject);
begin
cbCachedUpdates.Checked:= MSQuery.CachedUpdates;
cbDebug.Checked:= MSQuery.Debug;
ShowUpdateRecordTypes;
end;
procedure TfmMain.cbCachedUpdatesClick(Sender: TObject);
begin
MSQuery.CachedUpdates:= cbCachedUpdates.Checked;
ShowUpdateRecordTypes;
end;
procedure TfmMain.MSQueryUpdateError(DataSet: TDataSet; E: EDatabaseError;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
fmUpdateAction.rgAction.ItemIndex:= Ord(UpdateAction);
fmUpdateAction.rgKind.ItemIndex:= Ord(UpdateKind);
fmUpdateAction.lbField.Caption:= String(DataSet.Fields[0].Value);
fmUpdateAction.lbMessage.Caption:= E.Message;
fmUpdateAction.ShowModal;
UpdateAction:= TUpdateAction(fmUpdateAction.rgAction.ItemIndex);
end;
procedure TfmMain.MSQueryUpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
fmUpdateAction.rgAction.ItemIndex:= Ord(UpdateAction);
fmUpdateAction.rgKind.ItemIndex:= Ord(UpdateKind);
fmUpdateAction.lbField.Caption:= String(DataSet.Fields[0].NewValue);
fmUpdateAction.lbMessage.Caption:= '';
fmUpdateAction.ShowModal;
UpdateAction:= TUpdateAction(fmUpdateAction.rgAction.ItemIndex);
end;
procedure TfmMain.cbCustomUpdateClick(Sender: TObject);
begin
if cbCustomUpdate.Checked then
MSQuery.OnUpdateRecord:= MSQueryUpdateRecord
else
MSQuery.OnUpdateRecord:= nil;
end;
procedure TfmMain.MSQueryCalcFields(DataSet: TDataSet);
var
St:string;
begin
case Ord(TCustomMSDataSet(DataSet).UpdateStatus) of
0: St:= 'Unmodified';
1: St:= 'Modified';
2: St:= 'Inserted';
3: St:= 'Deleted';
end;
DataSet.FieldByName('Status').AsString:= St;
{ case Ord(TMSDataSet(DataSet).UpdateResult) of
0: St:= 'Fail';
1: St:= 'Abort';
2: St:= 'Skip';
3: St:= 'Applied';
end;
DataSet.FieldByName('Result').AsString:= St;}
end;
procedure TfmMain.cbDebugClick(Sender: TObject);
begin
MSQuery.Debug:= cbDebug.Checked;
end;
procedure TfmMain.cbUnmodifiedClick(Sender: TObject);
begin
if cbUnmodified.Checked then
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes + [rtUnmodified]
else
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes - [rtUnmodified];
end;
procedure TfmMain.cbModifiedClick(Sender: TObject);
begin
if cbModified.Checked then
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes + [rtModified]
else
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes - [rtModified];
end;
procedure TfmMain.cbInsertedClick(Sender: TObject);
begin
if cbInserted.Checked then
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes + [rtInserted]
else
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes - [rtInserted];
end;
procedure TfmMain.cbDeletedClick(Sender: TObject);
begin
if cbDeleted.Checked then
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes + [rtDeleted]
else
MSQuery.UpdateRecordTypes:= MSQuery.UpdateRecordTypes - [rtDeleted];
end;
procedure TfmMain.DataSourceStateChange(Sender: TObject);
begin
ShowPending;
StatusBar.Panels[2].Text:= 'RecordCount:' + IntToStr(MSQuery.RecordCount);
StatusBar.Panels[3].Text:= 'RecordNo:' + IntToStr(MSQuery.RecNo);
end;
procedure TfmMain.DataSourceDataChange(Sender: TObject; Field: TField);
begin
DataSourceStateChange(nil);
end;
procedure TfmMain.DBGridDrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if MSQuery.UpdateResult in [uaFail,uaSkip] then
TDBGrid(Sender).Canvas.Brush.Color:= clRed
else
if MSQuery.UpdateStatus <> usUnmodified then
TDBGrid(Sender).Canvas.Brush.Color:= clYellow;
TDBGrid(Sender).DefaultDrawDataCell(Rect, Field, State);
end;
procedure TfmMain.btRevertRecordClick(Sender: TObject);
begin
MSQuery.RevertRecord;
ShowPending;
end;
procedure TfmMain.RefreshRecordClick(Sender: TObject);
begin
MSQuery.RefreshRecord;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -