odbc access 使用心得

#1 zhgzzy

1. 数据库连接
'db' => array(  // 数据库连接配置
                'driver' => 'odbc',   // 驱动类型
                'host' => 'DRIVER={Microsoft Access Driver (*.mdb)};dbq='.getcwd().'\\data\test.mdb', // 数据库地址
                'port' => '',        // 端口
                'login' => '',     // 用户名
                'password' => '',      // 密码
                'database' => '',      // 库名称
                'prefix' => 'sht_',           // 表前缀
                'persistent' => FALSE,    // 是否使用长链接
        ),
        'db_driver_path' => SP_PATH.'/Drivers/odbc.php', // 自定义数据库驱动文件地址
2. odbc.php 文件中要修改的代码

  要修改的:
/**
         * 返回当前插入记录的主键ID
         */
        public function newinsertid()
        {
                $result = $this->getArray("select @@IDENTITY as sptmp_newinsert_id");
                return $result[0]['sptmp_newinsert_id'];
        }
/**
         * 转换MS类数据库的LIMIT语句的转换函数
         */
        function translimit($sql){      
                preg_match('/ limit /i', $sql);
                while(preg_match("/  /", $sql))$sql = str_replace("  "," ",$sql);
                        $sql_array = explode(" ",$sql);
                        //取得部分重要的数组索引
                        $i = 0;
                        while(isset($sql_array[$i]) && $sql_array[$i]){
                                if(strtolower($sql_array[$i])=="from")$from_id = $i;  
                                if(strtolower($sql_array[$i])=="limit")$limit_id = $i;
                                if(strtolower($sql_array[$i])=="order")$order_id = $i;
                                $i++;
                        }
                        $last_id = $i-1;
                        $two_num = explode(",",$sql_array[$limit_id+1]);
                        $totle_num = $two_num[0]+$two_num[1];

                        $sql_return = "SELECT TOP {$totle_num} ";
                        for($i=1;$i<$limit_id;$i++){
                                $sql_return .= $sql_array[$i] ;
                                $sql_return .= " ";
                        }
                        return $sql_return;
        }
要添加的:
/**
         * 格式化带limit的SQL语句
         */
        public function setlimit($sql, $limit)
        {
                if(!eregi(",", $limit))$limit = '0,'.$limit;
                $sql .= " LIMIT {$limit}";
                return $this->translimit($sql);
        }

2011-04-29 14:27:30

#2 zhgzzy

还有几个没解决的如下:

1. find 不能用,返回结果为空

2. findAll 会多出一个空的结果 可用 array_filter() 过滤

3. spLinker 好象也不能用

2011-04-29 14:30:56

#3 xiaozisha

大哥,问下为何我是这样设置了,但是还是连接不上Access,并且提示错误全是乱码呢?很费解到底是哪错了,能大概说下流程吗?

2013-05-20 12:01:07