您的位置:首页 > 编程语言 > Delphi

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

2009-05-05 02:35 387 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: