中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Oracle
Oracle与Access表之间的导入和导出
作者:佚名 时间:2007-06-19 15:23 出处:ccidnet.com 责编:月夜寒箫
              摘要:Oracle与Access表之间的导入和导出

本文主要回答了如何在FORM的程序中实现Oracle与Access表之间的导入和导出这个问题。

问题的解答:

 

准备工作:

 

1.安装OCA。运行Developer的安装盘,选择自定义安装,选择Oracle Open Client Adapter for ODBC安装。

 

2.在数据源(ODBC)中添加DSN。控制面板->管理工具->数据源(ODBC),选择“用户DSN”,添加要进行操作的Access的文件。在“高级”选项里,填上“登录名称”和“密码”(很重要,在程序中会用到)。

 

下面以实际例子来说明:

 

假设在Oracle中和Access中都有一个student表,表中字段相同(name char(10) ,age number(2)),在准备工作第2步中的“数据源名”为test,“登录名称”和“密码”都为user。

 

下面为从Oracle导出到Access的PROCEDURE:

 

 

PROCEDUREoracle_to_accessIS
            connection_idEXEC_SQL.ConnType;
            action_cursorEXEC_SQL.CursType;
            ignorePLS_INTEGER;
            t_namestudent.name%type;
            t_agestudent.age%type;
            cursortemp_cursorisselect*fromstudent;
            BEGIN
            connection_id:=EXEC_SQL.OPEN_CONNECTION('user/user@odbc:test');
            action_cursor:=EXEC_SQL.OPEN_CURSOR(connection_id);
            EXEC_SQL.PARSE(connection_id,action_cursor,'delete*fromstudent');
            ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);
            EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);
            opentemp_cursor;
            export_count:=0;
            action_cursor:=EXEC_SQL.OPEN_CURSOR(connection_id);
            EXEC_SQL.PARSE(connection_id,action_cursor,'
            INSERTINTOstudent(name,age)values(:1,:2)');
            loop
            fetchtemp_cursorintot_name,t_age;
            exitwhentemp_cursor%notfound;
            EXEC_SQL.BIND_VARIABLE(connection_id,action_cursor,':1',t_name);
            EXEC_SQL.BIND_VARIABLE(connection_id,action_cursor,':2',t_age);
            ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);
            endloop;
            closetemp_cursor;
            EXEC_SQL.PARSE(connection_id,action_cursor,'commit');
            ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);
            EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);
            EXEC_SQL.CLOSE_CONNECTION(connection_id);
            EXCEPTION
            WHENEXEC_SQL.PACKAGE_ERRORTHEN
            IFEXEC_SQL.LAST_ERROR_CODE(connection_id)!=0THEN
            message('数据导出至ACCESS失败:'
            ||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(connection_id))||'
            :'||EXEC_SQL.LAST_ERROR_MESG(connection_id));
            ENDIF;
            IFEXEC_SQL.IS_CONNECTED(connection_id)THEN
            IFEXEC_SQL.IS_OPEN(connection_id,action_cursor)THEN
            EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);
            ENDIF;
            EXEC_SQL.CLOSE_CONNECTION(connection_id);
            ENDIF;
            END;
            下面为从Access导出到Oracles的procedure:
            PROCEDUREAccess_to_oracleIS
            connection_idEXEC_SQL.ConnType;
            action_cursorEXEC_SQL.CursType;
            ignorePLS_INTEGER;
            t_namestudent.name%type;
            t_agestudent.age%type;
            BEGIN
            connection_id:=EXEC_SQL.OPEN_CONNECTION('user/user@odbc:test');
            action_cursor:=EXEC_SQL.OPEN_CURSOR(connection_id);
            deletefromstudent;
            EXEC_SQL.PARSE(connection_id,action_cursor,'selectname,agefromstudent');
            ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);
            exec_sql.define_column(connection_id,action_cursor,1,t_name,10);
            exec_sql.define_column(connection_id,action_cursor,2,t_age);
            ignore:=EXEC_SQL.EXECUTE(connection_id,action_cursor);
            while(exec_sql.fetch_rows(connection_id,action_cursor)>0)
            loop
            exec_sql.column_value(connection_id,action_cursor,1,t_name);
            exec_sql.column_value(connection_id,action_cursor,2,t_age);
            insertintotest(name,age)values(t_name,t_age);
            endloop;
            commit;
            EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);
            EXEC_SQL.CLOSE_CONNECTION(connection_id);
            EXCEPTION
            WHENEXEC_SQL.PACKAGE_ERRORTHEN
            IFEXEC_SQL.LAST_ERROR_CODE(connection_id)!=0THEN
            message('数据导入至ORACLE失败:'
            ||TO_CHAR(EXEC_SQL.LAST_ERROR_CODE(connection_id))||'
            :'||EXEC_SQL.LAST_ERROR_MESG(connection_id));
            ENDIF;
            IFEXEC_SQL.IS_CONNECTED(connection_id)THEN
            IFEXEC_SQL.IS_OPEN(connection_id,action_cursor)THEN
            EXEC_SQL.CLOSE_CURSOR(connection_id,action_cursor);
            ENDIF;
            EXEC_SQL.CLOSE_CONNECTION(connection_id);
            ENDIF;
            END;

注意:EXEC_SQL.BIND_VARIABLE中绑定的变量只能是以下三种类型:NUMBER,DATE,VARCHAR2。对于Access中的“是/否”的布尔型变量,可以用NUMBER类型的1和0来表示。如果Access中的表名或者字段名中有空格,在写SQL语句的时候可以用双引号把表名或者字段名包括起来,如:本例中如果Access中表名为student detail,字段名分别为student name和student age,那插入数据的SQL语句为:

insert into “student detail”(“student name”,”student age”) values(:1,:2)。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有