星五博客

WebPascal脚本模型教程 - 数据库相关

不管是网站,还是接口,都离不开数据展示或处理的操作,脚本模型采用的是Delphi中的FireDAC组件来连接和操作数据库的,目前脚本模型中只添加了msaccess、mssql和oracle的支持,当然,添加其它数据库的支持,也是比较简单的事,不过要注意的是,FireDAC并不会帮你处理数据库连接所需的驱动,所以你连接对应的数据库时,需要自己安装驱动,比如在win64位环境下,连接msaccess需要安装对应的驱动程序,比如连接oracle,也需要自己安装oracle的客户端或者带上那几个dll动态库文件。

目前提供了以下操作数据库的函数,分别为DBConn、DBExec、DBQuery、DBQueryToJson、DBQueryToTxt和DBQueryToExcel,在使用前,需要先使用DBConn定义数据源,也就是连接什么数据库,可参考以下设置:

<?
//连接 MSAccess 数据库的连接字符串
$s:=DBConn('mydb','DriverID=MSAcc;Database=.\db.mdb;'

//连接 MSSQL2000 数据库的连接字符串 odbc模式
//$s:=DBConn('mydb','DriverID=MSSQL2000;Server=127.0.0.1;Database=test;User_name=sa;Password=;'
//$s:=DBConn('mydb','DriverID=MSSQL2000;Database=test;Server=127.0.0.1;OSAuthent=Yes;'

//连接 MSSQL2000以上版本 数据库的连接字符串
//$s:=DBConn('mydb','DriverID=MSSQL;Server=127.0.0.1;Database=test;User_name=sa;Password=;'
//$s:=DBConn('mydb','DriverID=MSSQL;Database=test;Server=127.0.0.1;OSAuthent=Yes;'

//连接 mysql 数据库的连接字符串 需要libmysql.dll和libmysqld.dll支持,请查看单独演示mysql.api
//$s:=DBConn('mydb','DriverID=MySQL;Database=mysql;Server=127.0.0.1;Port=3306;User_name=root;'

//连接 ORACLE 数据库的连接字符串 需要oci.dll、oraocci11.dll、oraociei11.dll、orasql11.dll支持
//$s:=DBConn('mydb','DriverID=Ora;Database=OraSrv:1521/orcl;User_name=ADDemo;Password=a;'

+ 'Pooled=True;POOL_CleanupTimeout=30000;POOL_ExpireTimeout=90000;POOL_MaximumItems=200;');
?>

以上是部分数据源的设置,其它的请参考FireDac的说明。
使用示例如下:

<?
//初始化数据源
include('/数据库相关演示/conn.cfg');

//Query演示部分
'<font color="#FF0000">Query:查询并返回数据(DataSet)</font> DBQuery<br>'
//比如3个参数,第一个为数据源,第二个为sql语句,3为p1,4为p2 ...
$x:=DBQuery('mydb','select * from tuser where fid<>:p1',0);
(*
	fid fuser fpwd fname
	1 admin admin 管理员
	2 test test 测试
*)
if $x.EMPTY then
begin
	'没有可用的数据'
end else
begin
	$x.first;
	while not $x.eof do
  begin
		'第' $x.row+1 '行:'
		for $i:=0 to $x.fieldcount-1 do
    begin
			$x($i);
			if $i<$x.fieldcount-1 then ', ';
		end;
		'<br>'
		$x.next;
  end;
end;

'<br><font color="#FF0000">Query:查询并返回数据为json</font> DBQueryToJSON<br>'
UnicodeToAnsi(DBQueryToJSON('mydb','select * from tuser'));

'<br><br>'
'<font color="#FF0000">Query:查询并返回数据,保存成文件,并返回下载链接</font> DBQueryToExcel<br>'
//比如3个参数,第一个为数据源,第二个为sql语句,3为p1,4为p2 ...
DBQueryToExcel('mydb','select fid as 序号,fuser as 用户名,fpwd as 密码,fname as 姓名,'
+'fage as 年龄,fnote as 备注 from tuser where fuser<>:p1','你好');

'<br><br>'
'<font color="#FF0000">Query:查询并返回数据,保存成文件,并返回下载链接</font> DBQueryToTxt<br>'
//比如3个参数,第一个为数据源,第二个为sql语句,3为p1,4为p2 ...
DBQueryToTxt('mydb','select fid as 序号,fuser as 用户名,fpwd as 密码,fname as 姓名,fage as 年龄,'
+'fnote as 备注 from tuser where fuser<>:p1','你好');

//ExecSQL部分演示
'<br><br><font color="#FF0000">ExecSQL:执行SQL语句并返回处理结果</font> DBExec<br>'
'<font color="#FF00FF">修改前数据</font><br>'
UnicodeToAnsi(DBQueryToJSON('mydb','select * from tuser'));
'<br>结果:'DBExec('mydb','update tuser set fpwd=:p1,fage=:p3 where fuser=:p2','xxoo','test',88);
'<br><font color="#FF00FF">修改后数据</font><br>'
UnicodeToAnsi(DBQueryToJSON('mydb','select * from tuser'));
'<br>结果:'DBExec('mydb','update tuser set fpwd=:p1,fage=:p3 where fuser=:p2','test','test',3);
'<br><font color="#FF00FF">还原后数据</font><br>'
UnicodeToAnsi(DBQueryToJSON('mydb','select * from tuser'));
?>