Delphi组件应用实例文本文件__0001

1,动态设置数据集参数

    procedure TForm1.ExcuteBtnClick(Sender: TObject);
    begin
      SQLDataSet1.CommandType := ctQuery;
      SQLDataSet1.CommandText := 'INSERT INTO RenYuan (NAME, Native, age) VALUES (:Name, :Native, :age)';
      //形成SQL命令文本,该语句含有3个参数变量
      SQLDataSet1.Params[0].AsString := Name1.text;
      //利用用户在编辑框输入的内容为3个参数变量赋值
      SQLDataSet1.Params[1].AsString := native1.text;
      SQLDataSet1.Params[2].AsInteger := StrToInt(age.text);
      SQLDataSet1.ExecSQL;
      //调用ExecSQL方法,完成无返回结果集的记录插入。
    end;

2,动态数据传输

unit UBatch_move;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Db, DBTables, ComCtrls;
  //使用单元文件定义
type
  TForm1 = class(TForm)
    BatchMove1: TBatchMove;
    //指定完成批传输的组件
    tblSource: TTable;
    //指出源表的数据集
    tblDest: TTable;
    //指出目的表的数据集
    Bevel1: TBevel ;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Bevel2: TBevel;
    Label15: TLabel;
    //显示标题的标签
    Label5: TLabel;
    Label4: TLabel;
    Label3: TLabel;
    Bevel3: TBevel;
    //如下三行指定源表的别名、表名和索引名
    cmbxSourceAlias: TComboBox;
    cmbxSourceTable: TComboBox;
    cmbxSourceIndex: TComboBox;
    //如下三行指定目的表的别名、表名和索引名
    cmbxDestAlias: TComboBox;
    cmbxDestTable: TComboBox;
    cmbxDestIndex: TComboBox;
    cmbxMode: TComboBox;
    //指定传输方式的检测框
    chkbxAbortKey: TCheckBox;
    chkbxAbortProblem: TCheckBox;
    chkbxTrans: TCheckBox;
    //定义提示标签
    Label1: TLabel;
    Label2: TLabel;
    Label10: TLabel;
    Label9: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label11: TLabel;
    //如下三个指定临时使用的表名
    edtChangedTable: TEdit;
    edtKeyVioTbl: TEdit;
    edtProbTbl: TEdit;
    edtRecCount: TEdit;
    ExcuteBtn: TButton;
    //执行批传输的按钮
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ExcuteBtnClick(Sender: TObject);
    procedure cmbxSourceAliasChange(Sender: TObject);
    procedure cmbxDestAliasChange(Sender: TObject);
    procedure cmbxSourceTableChange(Sender: TObject);
    procedure cmbxDestTableChange(Sender: TObject);
    procedure cmbxSourceIndexChange(Sender: TObject);
    procedure cmbxDestIndexChange(Sender: TObject);
    procedure cmbxModeChange(Sender: TObject);
    procedure edtRecCountKeyPress(Sender: TObject; var Key: Char);
    procedure chkbxAbortKeyClick(Sender: TObject);
    procedure chkbxAbortProblemClick(Sender: TObject);
    procedure chkbxTransClick(Sender: TObject);
  private
    { Private declarations }
    function IsStringsEqual(const s1,s2 : string): boolean;
    //定义内部函数
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject); // Get alias names
//在窗体建立的过程中,打开会话,并从BDE的中获取别名列表
begin
  if Session.Active = false then
     Session.Open;
     //如过会话未激活,则打开它
  Session.GetAliasNames(CmbxSourceAlias.Items);
  //调用GetAliasNames方法,从BDE配置文件中,获取别名列表,并存入组合框中
  cmbxDestAlias.Items := cmbxSourceAlias.Items;
  //将源别名列表的内容赋给目的别名列表中
end;

procedure TForm1.FormShow(Sender: TObject);
//在应用开始执行时,将光标定位在选择源表别名的组合框
begin
  cmbxSourceAlias.SetFocus;
end;

procedure TForm1.cmbxSourceAliasChange(Sender: TObject);
//该事件处理过程用于获取源数据库名和所有表名
begin
  if cmbxSourceAlias.ItemIndex <> -1 then
  //如果用户选择了数据库别名,则获取它,否则,清除它
  begin
  tblSource.DatabaseName:=cmbxSourceAlias.Items[cmbxSourceAlias.ItemIndex];
  //获取用户选择的数据库别名
  Session.GetTableNames(tblSource.DatabaseName,'',true,false,
                        cmbxSourceTable.Items);
  //从指定的数据库中,获取该库的所有表名
  end
  else
  begin
    tblSource.DatabaseName := '';
    cmbxSourceTable.Items.Clear;
  end;
end;

procedure TForm1.cmbxDestAliasChange(Sender: TObject);
//该事件处理过程用于获取目的数据库名和所有表名
begin
  if cmbxDestAlias.ItemIndex <> -1 then
  begin
     tblDest.DatabaseName := cmbxDestAlias.Items[cmbxDestAlias.ItemIndex];
     //获取用户选择的数据库别名
     Session.GetTableNames(tblDest.DatabaseName,'',true,false,
                           cmbxDestTable.Items);
    //从指定的数据库中,获取该库的所有表名
  end
  else
  begin
    tblDest.DatabaseName := '';
    cmbxDestTable.Items.Clear;
  end;
end;

procedure TForm1.cmbxSourceTableChange(Sender: TObject);
//该事件处理过程用于获取源表的表名和索引名列表
begin
  if cmbxSourceTable.ItemIndex <> -1 then
  //如果用户从源的表名列表中,选择了表名,则获取它,否则,清除它
  begin
     tblSource.TableName:=cmbxSourceTable.Items[cmbxSourceTable.ItemIndex];
     //根据用户的选择,获取源表的表名
     tblSource.GetIndexNames(cmbxSourceIndex.Items);
     //获取源表对应的所有索引
  end
  else
  begin
    tblSource.TableName := '';
    cmbxSourceIndex.Items.Clear;
  end;
end;

procedure TForm1.cmbxDestTableChange(Sender: TObject);
//该事件处理过程用于获取目的表的表名和索引名列表
begin
  if cmbxDestTable.ItemIndex <> -1 then
  begin
     tblDest.TableName := cmbxDestTable.Items[cmbxDestTable.ItemIndex];
     //根据用户的选择,获取目的表的表名
     tblDest.GetIndexNames(cmbxDestIndex.Items);
     //获取目的表对应的所有索引
  end
  else
  begin
    tblDest.TableName := '';
    cmbxDestIndex.Items.Clear;
  end;
end;

procedure TForm1.ExcuteBtnClick(Sender: TObject);
//在用户已完成了源和目的的有关设置后,单击执行按钮后执行该过程,
//它完成实际的批传输操作
begin
  if tblDest.TableName = '' then
    tblDest.TableName := cmbxDestTable.Text;
  if ((tblSource.DatabaseName <> '') and
     (tblSource.TableName <> '') and
     (tblDest.DatabaseName <> '') and
     (tblDest.TableName <> '') and
     (cmbxMode.items[cmbxMode.ItemIndex] <> '')) then
     //在完成实际操作之前,首先测试源和目的的数据库名
     //表名是否已经全部设置好
  begin
    //设置TBatchMove组件的相关属性
    BatchMove1.ChangedTableName := edtChangedTable.Text;
    BatchMove1.KeyViolTableName := edtKeyVioTbl.Text;
    BatchMove1.ProblemTableName := edtProbTbl.Text;
    BatchMove1.RecordCount := StrToInt(edtRecCount.Text);
    //设置批传输的记录数
  end
  else
  begin
    MessageDlg('Incomplete input.',mtError,[mbOK],0);
    //只要源和目的的数据库名和表名的其中之一未设置好
    //则退出该过程
    exit;
  end;
  BatchMove1.Execute;
  //调用Execute方法,完成指定的传输
  MessageDlg('批操作已完成,传输了'+IntToStr(BatchMove1.MovedCount)+
             '个记录.',mtInformation,[mbOK],0);
  //显示实际传输的记录数
end;

procedure TForm1.cmbxSourceIndexChange(Sender: TObject);
//本过程根据用户的选择,获取源表对应的索引
begin
  if cmbxSourceIndex.ItemIndex <> -1 then
  //如果用户选择了索引,则获取它
  begin
    tblSource.IndexName := cmbxSourceIndex.Items[cmbxSourceIndex.ItemIndex];
  end
  else
  begin
     tblSource.IndexName := '';
     //如果用户未选择索引,则清除它
  end;
end;

procedure TForm1.cmbxDestIndexChange(Sender: TObject);
//本过程根据用户的选择,获取目的表对应的索引
begin
  if cmbxDestIndex.ItemIndex <> -1 then
  //如果用户选择了索引,则获取它
  begin
    tblDest.IndexName := cmbxDestIndex.Items[cmbxDestIndex.ItemIndex];
  end
  else
  begin
     tblDest.IndexName := '';
     //清除索引名选项
  end;
end;

procedure TForm1.chkbxAbortKeyClick(Sender: TObject);
begin
  BatchMove1.AbortOnKeyViol := chkbxAbortKey.Checked;
  //设置关键字违反有效规则时,是否终止执行
end;

procedure TForm1.chkbxAbortProblemClick(Sender: TObject);
begin
  BatchMove1.AbortOnProblem := chkbxAbortProblem.Checked;
  //设置数据转换出错时,是否终止执行
end;

procedure TForm1.chkbxTransClick(Sender: TObject);
begin
  BatchMove1.Transliterate := chkbxTrans.Checked;
  //对源或目的是否可使用不同的语言驱动程序
end;

function TForm1.IsStringsEqual(const s1,s2 : string): boolean;
//该过程将所有的小写字母转换成大写
begin
   Result := UpperCase(s1) = UpperCase(s2);
end;

procedure TForm1.cmbxModeChange(Sender: TObject);
//该过程设置批传输的方式,如增加、拷贝、删除和修改
begin
  if cmbxMode.ItemIndex <> -1 then
  begin
    if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Append') then
      BatchMove1.Mode := batAppend
    else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Copy') then
      BatchMove1.Mode := batCopy
    else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],
            'Append Update') then
             BatchMove1.Mode := batAppendUpdate
    else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Delete') then
      BatchMove1.Mode := batDelete
    else if IsStringsEqual(cmbxMode.Items[cmbxMode.ItemIndex],'Update') then
      BatchMove1.Mode := batUpdate
    else
      MessageDlg('Batch mode not found',mtError,[mbOK],0);
      //如果未指定批传输方式,则提示错误
  end;
end;

procedure TForm1.edtRecCountKeyPress(Sender: TObject; var Key: Char);
//当用户输入传输的记录数时,调用该过程,不允许用户输入非数值型数据
begin
  if ((key in ['0'..'9'] = false) and (word(key) <> VK_BACK)) then
    key := #0;
end;
end.

3,管理数据库用户

unit U_User;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IBServices, Mask;
type
  TFUser = class(TForm)
    IBSecurityService1: TIBSecurityService;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit7: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FUser: TFUser;

implementation

{$R *.dfm}

procedure TFUser.Button1Click(Sender: TObject);
var
  GroupID,UserID,result:Integer;
begin
  if Edit1.Text='' then
     begin
      ShowMessage('用户登录名不能为空,请重新输入!');
      exit;
    end;

  //检验用户标识符是否为整数
  Val( Edit5.Text,UserID,result);
  if (result<>0)  then
    begin
      ShowMessage('用户标识符必须为整数,请重新输入!');
      exit;
    end;

  //检验分组标识符的有效性
  Val( Edit6.Text,GroupID,result);
  if result<>0 then
    begin
      ShowMessage('分组标识符必须为整数,请重新输入!');
      exit;
    end;

  with IBSecurityService1 do
  begin
  ServerName := 'Poulet';
  LoginPrompt := False;
  Params.Add('user_name=sysdba');
  Params.Add('password=masterkey');
  Active := True;
    try
      UserName := Edit1.Text;
      FirstName := Edit2.Text;
      MiddleName := Edit3.Text;
      LastName := Edit4.Text;
      UserID := UserID;
      GroupID := GroupID;
      Password := Edit7.Text;
      AddUser; // 向isc4.gdb安全数据库中添加用户
    except
      ShowMessage('添加用户失败,请检查输入的信息!');
    end;
  Active := False;
  end;
end;

procedure TFUser.Button2Click(Sender: TObject);
begin
  with IBSecurityService1 do
  begin
    ServerName := 'Poulet';
    LoginPrompt := False;
    Params.Add('user_name=sysdba');
    Params.Add('password=masterkey');
    Active := True;
    try
      UserName := Edit1.Text;
      DeleteUser;  //删除用户
      Edit1.Clear;
     except
      ShowMessage('删除用户失败,请检查输入的信息!');
    end;
    Active := False;
  end;              
end;
end.

 

4,拷贝数据库表

procedure TForm1. BatchMoveBtnClick(Sender: TObject);
begin
  if Source_Query.Active = False then
    Exit;
    //如果不能获取活动的查询数据集,则终止传送操作
  if SaveDialog1.Execute then
    begin
      Destination_Table.TableName := SaveDialog1.FileName;
      //从对话框中输入将要保存的目的表的表名
      with BatchMove1 do
        begin
          Source := Source_Query;
          //指定源表,此处为查询组件的名字
          Destination := Destination_Table;
          //指定目的表,此处为在对话框中输入目的表的名字
          Mode := batCopy;
          //指定批处理的方式,此处为完整的拷贝
          Execute;
          //调用TBatchMove组件的Execute方法,完成实际的拷贝操作
          ShowMessage('已传送'+IntToStr(MovedCount) + '个记录');
          //显示实际拷贝的记录数
        End;
     End;
  End;

 

 

第1章 Delphi 7新特性 1.1 安装 1.2 新特性 1.3 IDE的改进 第2章 Delphi 7组件简介 2.1 VCL 2.2 Delphi 7组件 2.3 可视组件的通用属性和事件 第3章 常用组件 3.1 文本相关组件 3.2 按钮和复选框 3.3 分组组件 3.4 菜单组件 3.5 图形组件 3.6 文件选择组件 3.7 网格组件 第4章 Data Access组件页 4.1 TDataSource组件 4.2 TClientDataSet组件 4.3 TDataSetProvider组件 4.4 TXMLTransform组件 4.5 TXMLTransformProvider组件 4.6 TXMLTransformClient组件 4.7 XMLMapper实用程序 第5章 Data Controls组件页 5.1 共同属性 5.2 TDBGrid组件 5.3 TDBNavigator组件 5.4 TDBText组件 5.5 TDBEdit组件 5.6 TDBMemo组件 5.7 TDBImage组件 5.8 TDDBListBox组件 5.9 TDBComboBox组件 5.10 TDBCheckBox组件 5.11 TDBRadioGroup组件 5.12 TdBLookkupListBox组件 5.13 TDBLookkupComboBox组件 5.14 TDBRichEdit组件 5.15 TDBCtrlGrid组件 5.16 TDBChart组件 第6章 dbExpress组件页 6.1 TSQLConnection组件 6.2 TSQLDataSet组件 6.3 TSQLQuery组件 6.4 TSQLTable组件 6.5 TSQLStoredProc组件 6.6 TSQLMonitor组件 6.7 TSimpleDataSet组件 6.8 实例——使用dbExpress方式连接Oracle数据库 6.9 实例——建立双平台运行的应用程序 第7章 BDE组件页 7.1 TTable组件 7.2 TQuery组件 7.3 TDataBase组件 7.4 TBatchMove组件 7.5 TUpdateSQL组件 7.6 综合应用实例 第8章 ADO组件页 8.1 TADOConnection组件 8.2 TADOCommand组件 8.3 TADODataSet组件 8.4 TADOTable组件 8.5 TADOQuery组件 8.6 TADOStoredProc组件 8.7 TRDSConnection组件 8.8 实例——应用TADOConnection和TADODataSet组件 8.9 实例——应用TADOConnection和TADOTable组件 8.10 实例——应用TADOConnection和TADOQuery组件 8.11 实例——应用TADOConnection、TADODataSet和TADOCommand组件 第9章 Decision Cube组件页 9.1 TDecisionCube组件 9.2 TDecisionQuery组件 9.3 TDecisionSource组件 9.4 TDecisionPivot组件 9.5 TDecisionGrid组件 9.6 TDecisionGraph组件 9.7 实例——应用Decision Cube组件页 第10章 Dialogs组件页 10.1 TOpenDialog组件 10.2 TSaveDialog组件 10.3 TOpenPicTureDialog组件 10.4 TSavePicTureDialog组件 10.5 TFontDialog组件 10.6 TColorDialog组件 10.7 TFindDialog组件 10.8 TReplaceDialog组件 10.9 TPrintDialog组件 10.10 TPrinterSetupDialog组件 10.11 TPageSetupDialog组件 第11章 Rave组件页 11.1 TRvProject组件 11.2 TRvSystem组件 11.3 TRvNDRWriter组件 11.4 TRvCustomConnection组件 11.5 TRvDataSetConnection组件 11.6 TRvTableConnection组件 11.7 TRvQueryConnection组件 11.8 TRvRenderPrinter组件 11.9 TRvRenderPreview组件 11.10 TRvRenderPDF组件 11.11 TRvRenderHTML组件 11.12 TRvRenderRTF组件 11.13 TRvRenderText组件 11.14 实例——建立Rave报表 11.15 实例——获取报表列表和预览报表 第12章 InterBase组件页 12.1 InterBase组件页 12.2 InterBase Admin组件页 12.3 InterBase组件应用实例 第13章 Server组件页 13.1 Word和Excel程序对象 13.2 ToleServer组件 13.3 实例——在Delphi中操作Word 13.4 实例——使用TWordDocument组件连接Word自动化服务器 13.5 实例——建立与Excel连接 13.6 实例——以OLE方式建立与Excel连接 第14章 Internet组件页 14.1 Web服务器应用程序的结构 14.2 TWebDispatcher组件 14.3 TPageProducer组件 14.4 TDataSetPageProducer组件 14.5 TQueryTableProducer组件 14.6 TDataSetTableProducer组件 14.7 TSQLQueryTableProducer组件 14.8 TTcpClient组件 14.9 TTcpServer组件 14.10 TUdpSocket组件 14.11 TXMLDocument组件 14.12 TWebBrowser组件 14.13 建立Web服务器应用程序 14.14 访问数据库 14.15 调试Web服务器应用程序 14.16 实例——实现数据库查询的Web服务器应用程序 14.17 实例——实现动态参数查询 14.18 实例——Web服务器应用程序 14.19 综合实例——使用Socket的“网上对话”程序 第15章 WebSnap组件页 15.1 WebSnap概述 15.2 WebSnap结构 15.3 WebSnap组件页中的常用组件 15.4 WebSnap组件页中的数据库组件 15.5 WebSnap组件页中的访问控制组件 第16章 WebServices组件页 16.1 HTTPRIO组件 16.2 HTTPReqResp组件 16.3 OPToSoapDomConvert组件 16.4 SoapConnection组件 16.5 HTTPSoapDispatcher组件 16.6 WSDLHTMLPublish组件 16.7 HTTPSoapPascalInvoker组件 16.8 实例——应用Web Service组件页 第17章 Indy组件集 17.1 Indy Clients组件页 17.2 Indy Servers组件页 17.3 Indy Intercepts组件页 17.4 Indy I/O Handlers组件页 17.5 Indy Misc组件页 17.6 Indy组件应用实例 第18章 IntraWeb组件页 18.1 概述 18.2 IW Standard组件页 18.3 IW Data组件页 18.4 IW Client Side组件页 18.5 IW Control组件页 18.6 IW组件应用实例
随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。网上讲道理的太多了,不喜欢举例子。 大多数文章中都或多或少的讲到了三层架构。表示层,业务层,数据层。又把业务层再细分,分为外观服务层,主业务服务,及数据库库服务层。 今天主要讨论一下业务层吧。举个最简单的例子。客户端获取数据。 业务层要与表示层尽量解藕, 我的方法是:首先我们在中间层TLB_中定义一个接口 IBusinessService, 定义一个方法。getvoList,我要得到一个VO的列表, VO即ValueObject, 例如:TValueObject= class(TPersistent) private b_insertFlag :Boolean; b_updateFlag :Boolean; b_deleteFlag :Boolean; d_rowVersion :double; procedure setInsertFlag(pInsertFlag :Boolean); function getInsertFlag: Boolean; procedure setUpdateFlag(pUpdateFlag :Boolean); function getUpdateFlag: Boolean; procedure setDeleteFlag(pDeleteFlag :Boolean); function getDeleteFlag: Boolean; procedure setRowVersion(pRowVersion :double); function getRowVersion:double; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published property bInsertFlag: Boolean read getInsertFlag write setInsertFlag; property bUpdateFlag: Boolean read getUpdateFlag write setUpdateFlag; property bDeleteFlag: Boolean read getDeleteFlag write setDeleteFlag; property dRowVersion: double read getRowVersion write setRowVersion; property POLEData:OleVariant read GetOLEData write SetOLEData; end;TUserVO = class(TValueObject) private id: string; name: string; password: string; 。。。。。。。。。。 VO的列表:TValueObjectList = Class(TObjectList) private ValueObject: TValueObject; ClassName: TClass; procedure setClassName(pTmpClsName :TClass); function getClassName: TClass; procedure setValueObject(pTmpVO :TValueObject); function getValueObject: TValueObject; protected function GetOLEData: OleVariant; virtual; procedure SetOLEData(const Value: OleVariant); virtual; published function AddItem(index: integer; AObject: TObject ):Integer; virtual; function GetItem(index, itemid: integer ): TObject; virtual; function CountItem:Integer; virtual; public constructor Create; virtual; destructor Destroy; override; procedure AfterConstruction; override; property PClassName: TClass read getClassName write setClassName; property POLEData: Ole
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值