数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

分页显示Oracle数据库记录的类(2.0)


发布日期:2018年04月09日
 
分页显示Oracle数据库记录的类(2.0)

<?php

class TOracleViewPage {

var $Table;//表名

var $MaxLine;//每页显示行数

var $LinkId;//数据库连接号

var $Id;//排序参考字段

var $Offset; //记录偏移量

var $Total;//记录总数

var $Number; //本页读取的记录数

var $TopNumber;//读新记录时实际取出的记录数

var $Result; //读出的结果

var $TopResult;//读新记录时的结果

var $TheFirstPage;//特殊指定第一页的链接

var $StartRec;//指定第二页的起始记录号

var $TPages; //总页数

var $CPages; //当前页数

var $TGroup;

var $PGroup; //每页显示的页号个数

var $CGroup;

var $Condition; //显示条件 如where id=$id order by id desc

var $PageQuery; //分页显示要传递的参数

//

// 以下构造函数析构函数及初始化函数

//

//构造函数

//参数表名最大行数分页参考的字段每页显示的页号数

function TOracleViewPage($TB$ML$id){

global $offset;

$this>Table=$TB;

$this>MaxLine=$ML;

$this>Id=$id;

$this>StartRec=;

if(isset($offset)) $this>Offset=$offset;

else $this>Offset=;

$this>Condition=;

$this>TheFirstPage=NULL;

$this>PageQury=NULL;

}

//初始化

//参数用户名密码数据库

function InitDB($user$password$db){

if (PHP_OS == WINNT)$dllid=dl(php_ocidll);

$this>LinkId = OCILogon($user$password$db);

}

//断开

function Destroy(){

OCILogoff($this>LinkId);

}

//

//Set 函数

//

//设置显示条件

//如where id=$id order by id desc

//要求是字串符合SQL语法(本字串将加在SQL语句后)

function SetCondition($s){

$this>Condition=$s;

}

//设置每组的显示个数

function SetNumGroup($pg){

$this>PGroup=$pg;

}

//设置首页如无则为NULL

function SetFirstPage($fn){

$this>TheFirstPage=$fn;

}

//设置起始记录如无则取默认

function SetStartRecord($org){

$this>StartRec=$org;

}

//设置传递参数

// key参数名 value参数值

// 如setpagequery(id$id);如有多个参数要传递可多次调用本函数

function SetPageQuery($key$value){

$tmp[key]=$key; $tmp[value]=$value;

$this>PageQuery[]=$tmp;

}

//

//Get 函数

//

//取记录总数

function GetTotalRec(){

$SQL=SELECT Count(*) AS total FROM $this>Table $this>Condition;

$stmt = OCIParse($this>LinkId$SQL);

$bool = OCIExecute($stmt);

if (!$bool){

echo 连接失败!;

OCILogoff($this>LinkId);

exit;

}

else {

OCIFetch($stmt);

$this>Total=OCIResult($stmt);

}

OCIFreeStatement($stmt);

}

//取总页数当前页

function GetPage(){

$this>TPages=ceil($this>Total/$this>MaxLine);

$this>CPages=ceil($this>Offset/$this>MaxLine)+;

}

//取总组数当前组

function GetGroup(){

$this>TGroup=ceil($this>TPages/$this>PGroup);

$this>CGroup=ceil($this>CPages/$this>PGroup);

}

//

// 工作函数

//

//读取记录

//主要工作函数根据所给的条件从表中读取相应的记录

//返回值是一个二维数组Result[记录号][字段名]

function ReadList() {

$SQL=SELECT * FROM $this>Table $this>Condition ORDER BY $this>Id DESC;

$stmt = OCIParse($this>LinkId$SQL);

$bool = OCIExecute($stmt);

if (!$bool){

echo 连接失败!;

OCILogoff($this>LinkId);

exit;

}

else {

$ncols = OCINumCols($stmt);

for ( $i = ; $i <= $ncols; $i++ )

$column_name[$i]= OCIColumnName($stmt$i);

$k=;

for($j=;$j<$this>StartRec+$this>Offset;$j++) OCIFetch($stmt);

for($j=;$j<$this>MaxLine;$j++){

if(OCIFetch($stmt)){

$k++;

for($i=;$i<=$ncols;$i++)

$temp[$column_name[$i]]=OCIResult($stmt$i);

$this>Result[]=$temp;

}

else break;

}

$this>Number=$k;

}

OCIFreeStatement($stmt);

return $this>Result;

}

//读最新的记录

//topnum指定要读出的记录数

function ReadTopList($topnum){

$SQL=SELECT * FROM $this>Table $this>Condition ORDER BY $this>Id DESC;

$stmt = OCIParse($this>LinkId$SQL);

$bool = OCIExecute($stmt);

if (!$bool){

echo 连接失败!;

OCILogoff($this>LinkId);

exit;

}

else{

$ncols = OCINumCols($stmt);

for ( $i = ; $i <= $ncols; $i++ )

$column_name[$i]= OCIColumnName($stmt$i);

$k=;

for($j=;$j<$topnum;$j++){

if(OCIFetch($stmt)){

$k++;

for($i=;$i<=$ncols;$i++)

$temp[$column_name[$i]]=OCIResult($stmt$i);

$this>TopResult[]=$temp;

}

else break;

}

$this>TopNumber=$k;

}

OCIFreeStatement($stmt);

return $this>TopResult;

}

//

// 分页相关

//

//显示当前页及总页数

//本函数在GetPage()后调用

function ThePage() {

echo $this>CPages页/共$this>TPages;

}

//显示翻页按钮

//此函数要在GetPage()函数之后调用

//显示下页上页并加上要传递的参数

function Page() {

$k=count($this>PageQuery);

$strQuery=;//生成一个要传递参数字串

for($i=;$i<$k;$i++){

$strQuery=&$this>PageQuery[$i][key]=$this>PageQuery[$i][value];

}

return $strQuery;

}

function PrePage($strQuery){

$prev=$this>Offset$this>MaxLine;

if($prev>=)

echo <A href=$PHP_SELF?offset=$prev$strQuery class=newslink>上一页</A>;

else if($this>TheFirstPage!=NULL)

echo <A $this>TheFirstPage class=newslink>上一页</A>;

elseecho 上一页;

}

function NexPage($strQuery){

$next=$this>Offset+$this>MaxLine;

$k=$this>Total$this>StartRec;

if($next<$k)

echo <A href=$PHP_SELF?offset=$next$strQuery class=newslink>下一页</A>;

else

echo 下一页;

}

//

// 记录分组

//

//显示分组

function NumPage(){

$first=($this>CGroup)*($this>PGroup)+;

$last=($first+$this>PGroup > $this>TPages)? ($this>TPages+):($first+$this>PGroup);

$pr=($this>CGroup>=)?( ($this>CGroup)*($this>PGroup)+ ):();

$prev=($pr!=)?( ($pr)*$this>MaxLine):();

$ne=($this>CGroup*$this>PGroup+<=$this>TPages)?($this>CGroup*$this>PGroup+):();

$next=($ne!=)?( ($ne)*$this>MaxLine):();

$k=count($this>PageQuery);

$strQuery=;//生成一个要传递参数字串

for($i=;$i<$k;$i++){

$strQuery=&$this>PageQuery[$i][key]=$this>PageQuery[$i][value];

}

if($first!=)

echo <A href=$PHP_SELF?offset=$prev$strQuery > <<               

上一篇:Java开发中使用Oracle数据库的一点提醒

下一篇:java语言操作Oracle数据库中的CLOB数据类型