Delphi与SQL模糊查询
作者:admin 日期:2010-03-16
Delphi代码
- 模糊查询
- 1.用变量进行模糊查询
- 对数据进行模糊查询主要用SQL语句LIKE来实现。该语句放在Where语句的后面,使用标识符“%”、“_”、“[]”、“[^]”对数据进行模糊查询。
- 例如,对姓名为“王”,并且姓名为两个字的学生信息。
- Select * FROM MR_Student where 姓名 like '林_'
- 例如,查询数学成绩在70~79之间的学生信息。
- Select * FROM MR_Student where 数学 like '7[0123456789]'
- 例如,查询除三年级二班的所有学生信息。
- Select * FROM MR_Student where 班级 like '三年[^二]_'
- 例如,查询三年级的所有学生信息。
- Select * FROM MR_Student where 班级like '三*'
- 下面对姓名进行模糊查询,只要在“姓名”文本框中输入名字中的任意一个字,便可以查找相关人员的信息。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Select * FROM MR_Student where 姓名 like '+''''+'%'+Trim(edit1.Text)+'%'+'''');
- open;
- end;
- 上面的SQL语句也可以写成如下形式:
- SQL.Add('Select * FROM MR_Student where 姓名 like ''%'+Trim(edit1.Text)+'%''');
- 2.使用参数进行模糊查询
- 在Delphi中进行模糊查询时,可以用TADOQuery组件来向SQL语句中传递参数。
- 其格式为:“Like:参数名”。
- 利用TADOQuery组件的ParamByName方法将值传递给参数。
- * 注意:在Like后面必须加空格。
- 下面用TADOQuery组件进行参数传递,并对数据进行模糊查询。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Select * FROM MR_Student where 姓名 like :aa');
- Parameters.ParamByName('aa').Value:='%'+trim(Edit1.text)+'%';
- open;
- end;
- 3.复杂模糊查询
- 在对信息进行模糊查询的时候,也可以通过逻辑运算符(AND、OR、NOT)插入其他的查询条件来提高查询的速度。
- 下面是模糊查询和其他查询方法相结合而形成的复杂模糊查询。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton、TComboBox和TDBGrid等组件。
- (2)主要程序代码如下:
- if CheckBox1.Checked=true then
- Str := ' and 班级='+''''+ComboBox1.Text+''''
- else
- ComboBox1.Enabled := False;
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Select * FROM MR_Student where 姓名 like ''%'+Trim(edit1.Text)+'%'''+Str);
- open;
- end;
Delphi与SQL存储过程
作者:admin 日期:2010-03-16
Delphi代码
- 存 储 过 程
- 1.创建存储过程
- 创建存储过程主要用SQL语句Create PROCEDURE来实现,并用“Exec语句+存储过程名”来执行已创建的存储过程。
- 本示例是用存储过程来执行多表合并的操作。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery1 do
- begin
- Close;
- SQL.Clear;
- SQL.add('create procedure '+Edit1.Text); //创建存储过程
- SQl.Add('as ');
- SQL.Add('select k.学生编号,k.学生姓名,j.外语 FROM tb_stu AS k INNER JOIN tb_mark AS j ON k.学生编号 = j.学生编号 Where (((k.学生编号)=[j].[学生编号]))');
- ExecSQL;
- SQL.Clear;
- SQL.Add('Exec '+Edit1.Text); //执行存储过程
- Open;
- end;
- 2.对存储过程进行加密
- 在创建存储过程时,可以为存储过程加密,这样用户可以隐藏存储过程的文本,避免其他用户在存储过程属性中查看其语句,主要用WITH ENCRYPTION选项实现。在对存储过程加密前必须对已有的存储过程进行删除。
- 下面用存储过程的WITH ENCRYPTION选项来创建一个加密存储过程。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit、TMemo和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('if EXISTS(Select name FROM sysobjects Where name='+QuotedStr(Trim(Edit1.Text))+' AND type = ''p'')'); //判断存储过程是否存在
- SQL.Add('Drop PROCEDURE '+Trim(Edit1.Text)); //删除已有的存储过程
- EXECSQL;
- close;
- SQL.Clear;
- //为存储过程加密
- SQL.Add('Create PROCEDURE '+Edit1.Text+' WITH ENCRYPTION AS '+Trim(Memo1.Text));
- EXECSQL;
- end;
- 3.用存储过程附加数据库
- 使用存储过程附加数据库可以方便地将没有连接的数据库附加到当前服务器上,只是在附加数据库前先将存储过程所在的数据库以手动方式附加到服务器上。附加数据库主要用系统存储过程sp_attach_db来实现。在存储过程中不可以用占位符N。
- 下面用存储过程将服务器以外的数据库附加到服务器上,只适用于英文数据库名。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton和TEdit等组件。
- (2)主要程序代码如下:
- 创建一个含有参数的存储过程。
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Create PROCEDURE '+Trim(Edit4.Text));
- SQL.Add('@Table varchar(20),');
- SQL.Add('@date varchar(200),');
- SQL.Add('@LOG varchar(200)');
- SQL.Add('AS');
- SQL.Add('EXEC sp_attach_db @dbname=@Table,@filename1=@date,@filename2 =@LOG');
- EXECSQL;
- end
- 执行带参数的存储过程。
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('if EXISTS(Select name FROM sysobjects Where name='+QuotedStr(Trim(Edit4.Text))+' AND type = ''p'')'); //判断存储过程是否存在
- //以传参的形式调用存储过程
- SQL.Add('EXEC '+Trim(Edit4.Text)+' @Table='+QuotedStr(Trim(Edit1.Text))+',@date='+QuotedStr(Trim(Edit2.Text))+ ',@LOG='+QuotedStr(Trim(Edit3.Text)));
- EXECSQL;
- end;
- 4.用存储过程备份数据库
- 备份数据库与附加数据库所用的方法基本相同,只是备份数据库用SQL语句BACKUP DATABASE来实现,而附加数据库则用系统存储过程sp_attach_db来实现。
- 下面利用存储过程对服务器上的任意数据库进行备份。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton和TEdit等组件。
- (2)主要程序代码如下:
- 创建一个含有参数的存储过程。
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('Create PROCEDURE '+Trim(Edit3.Text));
- SQL.Add('@name varchar(20),');
- SQL.Add('@way varchar(200)');
- SQL.Add('AS');
- SQL.Add('backup database @name to disk=@way');
- EXECSQL;
- Showmessage('存储过程'+Edit3.Text+'创建成功。');
- end
- 执行存储过程备份数据库。
- with ADOQuery1 do
- begin
- close;
- SQL.Clear;
- SQL.Add('if EXISTS(Select name FROM sysobjects Where name='+QuotedStr(Trim(Edit3.Text))+' AND type = ''p'')'); //判断存储过程是否存在
- //以传参的形式调用存储过程
- SQL.Add('EXEC '+Trim(Edit3.Text)+' @name='+Trim(ComboBox1.Text)+',@way='+QuotedStr(Trim(Edit2.Text)));
- EXECSQL;
- end;
Delphi与SQL触发器
作者:admin 日期:2010-03-16
Delphi代码
- 触发器
- 1.利用触发器添加数据
- 用触发器对相关表添加数据时,所添加的记录将存储在系统临时表“inserted”中,可以将该表中的字段信息添加到其他表的相应字段中。在用触发器向其他表添加数据时,应注意表中的字段是否有不为空的记录。
- 下面利用触发器在“tb_Stu”表中添加记录后,在“tb_Mark”表中会自动添加相应的记录。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery3 do
- begin
- Close;
- SQL.Clear;
- SQL.Add('Create TRIGGER '+Edit1.Text+' ON dbo.tb_Stu');
- SQL.Add('FOR Insert');
- SQL.Add('AS');
- SQL.Add('DECLARE @id Int,@name varChar(10)');
- SQL.Add('Select @id=学生编号,@name=学生姓名 from inserted');
- SQL.Add('Insert INTO tb_Mark (学生编号,学生姓名,高数,外语,计算机文化基础,马经,数据库管理,数据结构,软件工程) VALUES (@id,@name,0,0,0,0,0,0,0)');
- EXECSQL;
- end;
- 2.利用触发器更新数据
- 在表中更新数据时,将更新前的数据存放在系统临时表“deleted”中,将更新后的数据存放在系统临时表“inserted”中。在触发器中可以根据“deleted”表中的字段对相关表进行查询,并用“inserted”表中的数据修改相关表中的信息。
- 下面利用触发器在“tb_Stu”表中更新记录后,在“tb_Mark”表中会自动更新相关的数据。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery3 do
- begin
- Close;
- SQL.Clear;
- SQL.Add('Create TRIGGER '+Edit1.Text+' ON dbo.tb_Stu');
- SQL.Add('FOR Update');
- SQL.Add('AS');
- SQL.Add('DECLARE @id Int,@name varchar(10)');
- SQL.Add('select @id=学生编号 from deleted');
- SQL.Add('select @name=学生姓名 from Inserted');
- SQL.Add('Update tb_Mark SET 学生姓名=@name Where 学生编号 = @id');
- EXECSQL;
- end;
- 3.利用触发器删除数据
- 在对表中的数据进行删除时,会将删除的记录存入系统临时表“deleted”中,触发器将利用该表中的信息在相关表中进行查询,并删除符合条件的记录。
- * 注意:如果某两个表是一对一的关系,那么触发器应创建在从表中。
- 下面利用触发器在“tb_Stu”表中删除记录后,“tb_Mark”表将自动删除相关的记录。
- 操作步骤如下:
- (1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDataSource、TButton、TEdit和TDBGrid等组件。
- (2)主要程序代码如下:
- with ADOQuery3 do
- begin
- Close;
- SQL.Clear;
- SQL.Add('Create TRIGGER '+Edit1.Text+' ON dbo.tb_Stu');
- SQL.Add('FOR Delete ');
- SQL.Add('AS');
- SQL.Add('DECLARE @id Int,@name varchar(10)');
- SQL.Add('select @id=学生编号,@name=学生姓名 from deleted');
- SQL.Add('Delete tb_Mark where 学生编号=@id and 学生姓名=@name');
- EXECSQL;
- end;







