PB与各种数据库的连接转_第1页
PB与各种数据库的连接转_第2页
PB与各种数据库的连接转_第3页
PB与各种数据库的连接转_第4页
PB与各种数据库的连接转_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.PB与各种数据库的连接 转PB与各种数据库连接!1.Power script语言里的事务处理对象怎么理解PowerBuilder程序与数据库之间传递信息的一个构造变量,共有15个成员.你可以详细列表它的所有成员看看它的组成,PB的应用程序会初始化一个全局的构造体变量,SQLCA,当然你也可以自定义一个自己的事务对象.1 DBMS string所使用的数据库管理系统的名字,如Sybase,Oracle,ODBC。2 Database string要连接的数据库名字。3 UserID string连接数据库所用的用户名。有的DBMS不需要此项。4 DBPass string用户连接数据库的口令。

2、5 Lock string这是数据库的保护级别,一般不必给出。6 LogID string登录到数据库效劳器上的用户名,有的DBMS不需要此项,但Sybase和Oracle需要指定这个参数。7 LogPass string登录到数据库效劳器上的用户口令。这个属性可设可不设,但Sybase和Oracle需要指定口令。8 ServerName string数据库效劳器名。9 AutoCommit boolean指定是否将数据库设置成自动提交所有事务。默认是False,也就是说,必须在应用程序中进展事务管理,并在适当的时候对数据库提交事务。假设选择True,那么每个事务都由系统自动提交。10 DBP

3、arm string用于向数据库传递特殊信息的属性。11 SQLCode long指示最近一次SQL操作失败或成功。它的取值为:返回结果0无错误。-1出现一个错误。100没有检索到数据。12 SQLNRows long最近一次SQL操作影响的行数,数据库不同其含义也不同。13 SQLDBCode long数据库错误代码。不同的数据库的含义不同。14 SQLErrText string相应于SQLDBCode属性中错误码的文字说明。15 SQLReturnData string返回DBMS执行SQL的附加信息,不同的DBMS其值不同。2.我常见到做好的PB程序使用.ini文件来控制与数据库连接,

4、可以方便的进展应用程序移植只需修改其中与数据库连接参数即可,我想问这些.ini文件只能使用手工编写吗,我见到很多.ini文件参数极多不象手写好象是机器生成的,不知道如何生成啊?请大家指教1、其实PB中在新建-点TOOL-FILE EDIT可以生成编辑INI文件。最直接就是工具栏中的EDIT图标。2、机器生成代码是:点DATABASE图标-选择连接方式。如:选MSS MICROSOFT SQL SERVER右键-NEW PROFILE按要求填定一些参数后在-PREVIEW中可以看到代码,把它复制到INI文件中就行了。3.编程经历-PB数据库连接通常在使用PB和数据库管理系统DBMS连接时,使用两

5、种方式:一、开放数据源接口ODBC连接ODBC是通过支持美国微软公司开放效劳构造WOSA,Windows Open Services Architecture中的一部分.在PB中通过配置SQLCA.DBMS='ODBC'对象的属性可使应用程序通过ODBC连接到数据库。ODBC的详细配置包含了数据源、驱动程序类型、缓冲池等各种细节参数。例子:SQLCA.DBMS="ODBC"SQLCA.AutoCommit=False SQLCA.DBParm="ConnectString='DSN=xxx_dsn;UID=xxxWD="'

6、,ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT'"二、专用数据库接口每个数据库管理系统DBMS均提供相应的客户端驱动,为了更好的效劳于数据库。在这里我们使用的是Microsoft sqlserver 2000的客户端程序。通过设置SQLCA.DBMS="MSS Microsoft SQL Server"使客户端通过专用数据库接口连接到数据库。该类接口的参数配置除了效劳器名、数据库名、LogId、LogPass外还包含了连接协议等用户验证方式等,可通过效劳器端或客户端的配置程序进展配置。S

7、QLCA.dbms="MSS Microsoft SQL Server"/接口类型SQLCA.database="master"/数据库SQLCA.userid=""SQLCA.dbpass=""SQLCA.logid="sa"SQLCA.logpass="xxxx"SQLCA.serverName=".xxx"/效劳器名SQLCA.dbparm="CommitOnDisconnect='No'"SQLCA.autoco

8、mmit=false以上介绍的是PB与数据库连接时常用的方法。往往根据不同的应用环境选择连接方式,在单机环境下多采用的是ODBC连接,因为在发行环节上相对要容易些。在网络环境下多采用专用数据库连接,这样可以进步系统的可靠性与执行效率。专用数据库的发行环节往往要配上相应DBMS客户端的动态连接库DLL,并把它存放在应用程序当前途径,或存放在%SYSTEM%下面。我在开发中用到了对BLOB类型的数据进展存取,大家都知道POWERBUILDER对BLOB字段的支持是有限的,每次只能处理32KB的数据块,假设一个文件大于32K必须编写相应的程序进展处理。当时的开发环境是PWOERBUILDER 9.0

9、+MS SQL SERVER 2000+WINDOWS2000。当通过ODBC连接数据读取BLOB字段时,通过MESSAGEBOX弹出的字节数,观察到只要超过32K的文件出现,LENBLOB就会出错,始终返回是32K字节的长度。当时很令人费解,随即疑心系统问题,检查病毒,重新安装相应的开发环境,结果照旧,这才疑心到ODBC可能存在问题,因为微软是问题专家,同时也是解决问题的专家。当通过SQLSERVER专用接口连接后,一切正常。由此证明了ODBC与专用数据库接口之间存在着一定的问题。由此可说明各种同类技术之间的细微差异,可能会给我们带来意想不到的问题。在开发时还需慎重、全面的考虑所用技术的可靠

10、性。PowerBuilder与Sybase ASA数据库连接问题QUOTE:Sybse ASAAdaptive Server Anywhere在安装完好版PowerBuilder时可以选择安装,PowerBuilder的例程也是以ASA作为数据库的.一.ASA数据库连接步骤QUOTE:1.添加数据源。在WINDOWS中点击我的电脑,选择控制面版,选择ODBC数据源32位,选择系统DSN,点击"添加",然后选择你使用的数据库.2.在工具条上点击DB PROFILE选择已建立好的数据库连接,单击EDIT在弹出的对话框中选PREVIEW里面就是连接数据库的语句,直接COPY就OK

11、了。二.ASA DB_profile写法以lin 的tax例程为例tax.ini CODE:DatabaseDBMS=ODBC Database=test DbParm=connectstring='dsn=sybase_lin;UID=dbaWD=sql'Copy to clipboard三.打包所需文件参看以下文章:四.容易出现的问题及解决方法导致ASA数据库无法连接的问题有以下几种:1、ODBC配置错误。没有配置数据源,数据库的用户名或口令错误等都会导致数据库无法连接。解决的方法:检查数据源的配置,假设没有在ODBC中配置数据源那么按照向导添加数据源即可;口令错误只需改为

12、正确的即可。2、连接时提示LOG文件错误。这样的问题大多出如今重装系统后、源码移植到其他系统、数据库文件途径改变之后。解决的方法:在创立ASA数据库的时候不创立LOG文件,假设已经创立了LOG文件那么可以利用PB自带的工具Sybase central来去掉LOG文件和数据库文件的关联。操作步骤如下:a启动Sybase central在左边的树型目录中选择Utilities;b双击右边出现的条目中的change log file settings,直接next;c点Browse选择需要去除log文件的数据库文件,选好后next;d这里你会看到一些数据库的信息,log文件名,文件大小等。next;

13、e去掉Maintin the following transaction log file前面的对勾,Finish;f配置ODBC连接数据库就可以了。3、数据库文件损坏。此类错误一般不常见,可能由于病毒破坏或误操作引起。解决的方法:假设以前有备份用备份文件覆盖原文件即可,假设没有备份文件就只能重新建库了!PB8如何使用OLE DB练到ASA数据库本文来自sybase网站翻译by金色年华原文出处:.c_pb_dbms_00017.htm Connecting to ASA Server7.01 GAvia OLE DB in PowerBuilder 8Adaptive Server Anywh

14、ere includes an OLE DB provider named ASAProv.One of the features of ASAProvdboledb7.dllis that you do not have to deploy ODBC.In other words,you can connect to an ASA database either via OLE DB or via OLE DB/ODBC bridge.在pb中通过OLE DB连接到ASA数据库的步骤如下:在命令提示符下键入如下命令,启动ASADEMO:dbsrv7 asademo-x tcpip-n asa

15、demo"asademo"-你选择运行的数据库.确定你没有正在运行一个同名的数据库,否那么会出错有两个方法通过OLE DB连接到ASA Server:1OLE DB/ODBC bridge对于这种连接,你必须在数据库参数中,指定有效的ODBC数据源,连接的脚本如下:/Profile asa_oledb SQLCA.DBMS="OLE DB"SQLCA.LogPass="sql"SQLCA.LogId="dba"SQLCA.AutoCommit=False SQLCA.DBParm="ROVIDER=

16、9;ASAProv',DATASOURCE='asa'"2OLE DB不需要配置ODBC你可以通过一个扩展名为.udl的单独的文件,提供连接信息,在OLE DB中访问数据.这个文件与Microsoft DataLink.udlfile类似.你必须在系统中安装Datalink API以便于创立和使用.udl文件.创立.udl文件的方法:在当前目录里的空白处单击鼠标右键,选择新建文件,选择Microsoft Data Link.假设没有创立Microsoft Data Link的选项,需要创立一个文本文件,然后更改扩展名为.udl.双击这个文件,添加连接信息.详情

17、请访问msdn.microsoft 搜索Data Link此处原文有乱码,详细内容不详.在pb中使用.udl文件时,要确认在数据库中已经创立了Catalog Tables由pbcat.名字开头,然后用这几张表存放一些PB中的信息,假设这几张表无法创立,就会出现出错信息.你可以通过连接到系统中已有的ODBC数据源.假设这些表不存在,就会提示Catalog Tables没有被创立.用以下信息来创立.udl文件:Provider Tab:Select"Adaptive Server Anywhere Provider"Connection Tab:Location:eng=asa

18、demo;dbn=asademo;Links=TCPIP;Select radio button for一.连接步骤1效劳器安装SQL Server并启动,创立数据库。2客户机安装SQL Server客户端。3启动PB,配置数据源描绘通过直连接口,不建议用ODBC。4连接。二.DB_profile的写法在ini文件里设置DatabaseDBMS=MSS Microsoft SQL Server 6.x Database=databasename UserId=LogID=DatabasePassword=LogPass=ServerName=AutoCommit=False在程序里用profi

19、lestring读取附加资料:ms sql server配置文件设置ms sql server配置文件设置:dbms="mss"/只须在*.ini文件中用这个代码便告诉pb使用的ms sql server Database:所用数据库LogId:sql server的登陆账号LogPass=口令servername:允许数据库效劳器连接的计算机名autocommit:控制pb是工作在事务处理范围内还是工作在事务处理范围外dbparm:dbms的专用连接参数以下参数:language:在显示错误消息和日期格式时指定要使用的语言,在效劳器上必须设置该直.lock:事务处理隔离层

20、log:文本和图像数据的更新是否应该纪录到事务日志中.systemprocs:系统存储过程和用户定义的存储过程是否显示在各种各样的pb画板中.pbcatalogowner:pb存储中表的缺省者.async:允许在效劳器上进展同步操作.0:同步,1:异步dbgettime:当async=1时,使用该参数设置用户在检索行时pb等待来自pb的响应的秒数.cursorlock:release和cursorscroll参数一起使用可设置光标的锁定选项.lock,opt,optval,readonly cursorscroll:设置光标的滚动选项.staticbind:控制pb是否在检索数据前获取dbms

21、中的结果集描绘.dbtextlimit:控制返回的文本字段的最大长度而不用将文本作为二进制大型数据对象来处理.appname:设置连接时所使用的应用程序名.host:设置连接似的工作站名.packetsize:设置使效劳器向pb传送数据时所设置的包大小.secure:设置是否想使用winnt集成逻辑平安性和平安sql server连接缺省0使用标准平安性,1集成平安性.Powe rBuilder与Oracle 7.3的连接PowerBuilder与Oracle的连接PowerBuilderPB和Oracle分别是前端开发工具和RDBMS的主流产品。PB提供了两种与Oracle连接的接口:Pow

22、erSoft内置的数据库接口Native Database Interface和ODBC接口。本文介绍使用PB6.0内置Oracle接口的方法,包括数据描绘文件的设置、存储过程的调用和存储过程作为数据窗口数据源的操作方法等内容,使用的RDBMS的Oracle 7.3。PowerBuilder与Oracle的连接假定已安装Oracle客户端应用程序。可用Sqlplus或Tnsping等是否能连接到Oracle数据库,确定在SQLNET配置文件中使用的数据库别名Database Alias,又称效劳器名,Server Name。如有疑问,可在Oracle客户端程序目录下tnsname.ora文件中

23、找到。另外保证搜索途径已包括SQLNET应用程序的安装目录如C:ORAWIN95BIN。进入PB的Database Profiles画笔,可看到所有已安装的数据库接口PB6.0缺省安装的是Oracle 7.3版的接口,如使用低版本的Oracle,需在安装时指定,选择"O73 Oracle 7.3",点击"New"按钮,进入Database Profile Setup对话框。在"Connection"页输入以下信息:Profile Name:为该Database Profile起一个有意义的名称;ServerTNS:ServerName

24、,其中ServerName为上述数据库别名效劳器名,如TNS:ORA73;Login ID:Oracle数据库中实际的用户名,由于PB初次连接到数据库时要自动建立五个系统表PowerBuilder Catalog TableBCATTBL,PBCATCOL,PBCATEDT,PBCATFMT,PBCATVLD,存储表的扩展属性,因此第一个连接到Oracle的用户必须具有建表、给PUBLIC角色受权等权限。例如可用SYSTEM用户进展第一次连接,此后的连接对用户那么无特殊要求;Password:该用户的口令。设置上述内容后,即可连上Oracle。为优化数据库连接,还可设置以下选项:Prompt

25、for Database Information:连接时是否提示用户输入用户名和口令;Generate Trace:启动DB跟踪工具,跟踪连接;Thread Safe:开发需要多线程环境支持的分布式应用时,选择该项。缺省为未选,适用于非分布应用;PBDBMS:与存储过程调用方式有关的参数。Oracle为7.2或更高版本时,去除该选项,此时带IN OUT参数的存储过程可作为数据窗口数据源。7.2版本以下,选择该项,调用PBDBMS.Put-Line建立存储过程的SQL语句,缺省是选中;Commit on Disconnect:断开连接时,指定提交或回退未提交的事务;Case Sensitive:

26、连接的Oracle效劳器是否区分大小写。注意该项选中时,所有主键、包含主键的表名、外键须全为大写字符。PowerBuilder Catalog Tables Owner:指定拥有PB系统表的用户,缺省为"SYSTEM"。假设要使用多种显示格式或有效性规那么,可以在不同的用户下建立几套系统表;Table Criteria:指定满足哪些条件的表、视图和同义词可在"Select Tables"对话框中显示出来。例如DEV用户下销售子系统的表都以SALE开头,那么可以用SALE%、DEV、"TABLE"、"VIEW"指定只

27、显示DEV用户以SALE开头的表和视图;Asynchronous:选择该项,可在一个复杂的SQL语句执行过程中,返回第一行结果前,切换到其他操作;Number of Seconds to Wait:假设上一项选中,还可进一步通过该项指定检索数据时,等待数据库响应的时间;Retrieve Blocking Factor:决定数据窗口对象一次可从数据库取出的记录数;Number of SQL Staments Cached:PB可将数据窗口对象产生的SQL语句和嵌入式SQL语句保存在SQL语句缓冲区,该参数指定缓冲区为PB保存的SQL语句数目。该数值可由下式计算:SQLCache=效劳器OPEN-

28、CURSORS数-5保存的游标数-本连接预期使用的最大游标数;Disable Bind:指定是否将输入变量与SQL语句绑定,此参数影响PB为数据窗口对象生成INSERT语句的方式;Static Bind:数据窗口对象检索数据前是否检测SELECT语句的合法性;在Syntax页,还可指定日期、时间的格式等。在Preview页可查看Database Profile设置对应的PowerScript写法。Oracle存储过程的使用归纳起来PB6.0中调用Oracle存储过程有以下四种方法。方法一:以关键字RPCFUNC声明存储过程;方法二:以DECLARE PROCEDURE语句声明存储过程;方法三:

29、以动态SQL语句实现;方法四:调用函数PBDBMS.Put-Line。一般情况下,方法一能得到较好的运行效率和更完善的功能。因此推荐使用方法一。但是某些类型的存储过程只能使用其他方法。以下重点介绍方法一和方法二。两种方法比较起来,有以下几点主要区别:1方法一适用于具有IN、OUT和IN OUT参数的存储过程,而方法二仅支持IN和OUT参数,不支持IN OUT参数;2方法一对参数的数目无限制,方法二最多支持255个参数;3方法一不支持记录Recorder的传递,方法二可传递和接收记录。方法一操作步骤:1在用户对象画笔中创立一个Class-Standard类型的,从Transaction继承的用户

30、对象。2在此用户对象中,声明Local External Functions,将存储过程以RPCFUNC关键字声明为外部函数。在Declare Local External Functions对话框中按Procedures按钮选择要调用的后台存储过程,或直接输入类似subroutine TESTlong id,ref string nameRPCFUNC ALIAS FOR"DEV TEST"的语句。例如中DEV TEST的参数为id IN NUMBER,name IN OUT VARCHAR2。3保存该用户对象。4在Application画笔中,进入应用属性对话框,在Va

31、riable Types页,将上Transaction用户对象设置为缺省的全局变量SQLCA。5脚本中,编码调用相应的外部函数。形式:SQLCA函数名参数。如可用"SQLCA TESTln-id,ls-name;"调用例子中定义的DEV TEST存储过程。其中ln-id,ls-name为调用参数。方法一本卷须知:1由于PB中String类型的数据长度是动态分配的,因此对Ref String类型的参数,每次调用前需要申请足够的空间。例如上例从输入的id值检索name,后台声明的NAME数据类型为VARCHAR230,每次调用SQLCA TEST前需要用ls-name=SPAC

32、E30置ls-name为足够长度的空串。2类似地当传递的参数为数组后台称PL/SQL Table时,声明参数为相应类型的动态数组,并在每次调用前设置数组上界为足够大的值。例如:DEV用户的DEPT包中声明了TYPE tbl-name IS TABLE OF VARCHAR230INDEX BY BINARY-INTEGER;存储过程EMP-OF-DEPTdept-id IN NUMBER,name OUT DEPT.tbl-name返回部门编写为dept-id的部门的所有员工,置name数组中。假定所有部门的员工数目不超过100,那么可用以下语句声明和调用DEV.EMP-OF-DEPT:Dec

33、lare External Functions对话框中:Subroutine EMP-OF-DEPTlong dept-id,ref string nameRPCFUNC ALIAS FORDEV.EMP-OF-DEPTPowerScript脚本中:long ln=dept-id string lsa-namelsa-name100=/置动态数组lsa-name上界为100 ln-dept-id=2 SQLCA.EMP-OF-DEPTln-dept-id,lsa-name/检索部门2的所有员工的名字方法二使用方法:在脚本中参加如下编码以DEV TEST为例:long ln-id string

34、ls-name ln-id=100 DECLARE test PROCEDURE FOR DEV.TEST:ln-id;/test有一个IN参数,一个OUT参数EXECUTE test;FETCH test INTO:ls-name;方法三使用方法:根据输入输出参数的不同,PB中的动态SQL语句有四种格式:1无输入输出参数;2只有输入参数,无输出参数;3有确定数目输入输出参数;4输出结果列的数目不定。其中第1、第2中格式的动态SQL语句也可用来调用简单的存储过程。1没有输入输出参数的存储过程。例如DEV DEMO1存储过程没有输入输出参数,可用以下语句调用:sqlstring=EXECUTE

35、DEMO1EXECUTE IMMEDIATE:sqlstring;2只有输入参数的存储过程。例如DEV.DEMO2name IN VARCHAR2,birthday IN DATEPREPARE SQLSA FROMEXECUTE DEMO2?,?;EXECUTE SQLSA USING:ls-name,:ldt-birthday;假设是7.2以下版本的Oracle,可用方法四PBDMBS.Put-Line函数调用建立存储过程。此时需选上Database Profile中的PBDBMS复选框。存储过程作为数据窗口的数据源以一个简单数据窗口显示效劳器的系统时间为例说明怎样创立存储过程作为数据源的

36、数据窗口。1在某个包如PACK-TYPE中定义日期类型的Recorder自定义数据类型datarec;2创立返回系统时间的存储过程:PROCEDURE get-sysdatasysdt IN OUT PACK-TYPE.datarecIS BEGIN open sysdt for select sysdate from dual;END;3新建数据窗口,数据源选择Stored Procedure;4在随后的Select Stored Procedure对话框中选择get-sysdate即可。假设作为数据源的存储过程有IN参数,那么这些参数就是数据窗口的检索参数Retrieve Argument

37、。Support for Using PowerBuilder and Oracle 8.x and 9.x and 10g Oracle 8.x and 9.x and 10g的pb支持情况PB10连接SQL Server的配置可能初次使用pb10的朋友无法顺利连接到sql server,一方面没有了mssql server专用接口了,另一方面数据库管理系统DBMS换成了"OLE DB",配置起来有点不顺手!下面就来介绍pb10中用OLE DB连接sql 2000数据库。在安装pb10的时候选择custom/full方式安装默认的安装方式不会安装ole db接口,next

38、-?假设你没有安装.net那么不要选择列表中的ADO.net.项。一路next完成安装。在数据库画板中找到OLE microsoft OLE DB项,在其上右键新建一个配置,在弹出的配置窗口中:profile name:填写配置文件名/任意即可provider:选择数据库管理系统类型,这里选择"SQLOLEDB"项data source:效劳器名和之前的版本不太一样。可以在下拉列表中选择,也可以填入效劳器名或IP地址如:等。假设上面的provider不是"SQLOLEDB"那么此下拉列表中可能没有选项。user ID:用户名。我的用户名

39、是默认的sa password:对应上面user ID的密码,我的密码是空的,所以不填。到这里你就可以顺利的连接到sql server了。但是连接到哪个数据库呢?上面的参数都没有指明,我也找了半天。不要着急,在Extended里填入"database=数据库名"就可以了。不要引号最后的配置文件内容为:/Profile his SQLCA.DBMS="OLE DB"SQLCA.LogId="sa"/我的用户名是sa SQLCA.AutoCommit=False SQLCA.DBParm="ROVIDER='SQLOLE

40、DB',DATASOURCE='NETMANAGER',PROVIDERSTRING='database=zs'"/我的数据库名是:zs;datasource后面也可以是IP地址:DATASOURCE=''至此就完成了pb10下用OLE DB连接sql server的配置!轻易不出手,出手必伤人!伤着你了可别怨我哦!4楼|Posted:2005-06-26 23:37 laozang全心全意,为您效劳级别:P.T ChairMan精华:1发帖:542声威:212点P.T Money:942 PB奉献值:325点

41、在线时间:109小时注册时间:2005-04-26最后登录:2006-12-12在PB中使用FoxPro数据库的方法重庆工业管理学院蒋波-Power Builder是非常优秀的用于客户/效劳器环境信息管理系统开发工具,其优秀之处不仅是因为可以开发基于客户/效劳器形式的系统,而且简单、易学,Power Builder自身是没有数据库管理系统DBMS的,它是首先通过不同的驱动程序联接不同的数据库,再通过这种联接,实现对数据的管理。Power Builder同时随盘附带有一个小型的数据库管理系统:SQL Anywhere,所以用户也可以直接开发用于单机的完好的信息管理系统。-本人以前曾开发过基于Fo

42、xPro环境下的数据库系统,但FoxPro的编程太费事,不但要处理数据的管理,而且还要花大量的精力处理输入、输出的格式等。但有着可视化编程环境的Power Builder却不同,处理输入、输出是件相当简单的事情,于是,本人偿试用Power Builder来管理以前的数据库。c在Power Builder系统中,使用FoxPro的数据库有两种方法:一是利用ODBC联接FoxPro数据库;另一种方法是将FoxPro的数据库转换到SQL Anywhere的数据格式。-一、利用ODBC联接FoxPro数据库-在Power Builder中,直接访问FoxPro数据库只能通过ODBC方式。-在开发环境下

43、,可以直接在PowerBar画板上配置ODBC,联接FoxPro数据库,方法如下:单击Configure ODBC工具钮在Installed Drivers目录框中选择:Microsoft Foxpro Driver*.dbf单击"Create"按钮命名数据源名、选择版本取消"使用当前工作目录"选项单击选定目录,选择被联接数据库所在的目录确定退出-通过ODBC方式联接的FoxPro的数据库,一定要满足FoxPro的数据库格式,即数据库文件构造必须是:"32字节文件描绘假设干个32字节的字段描绘构造描绘完毕符0D记录1,记录2,文件完毕符1A&q

44、uot;。由此看来,传统的DBF数据库文件均可通过该方式联接。对于Visual FoxPro环境下建立的表Table,其构造与传统的数据库构造是不同的,它在字段描绘完毕符0D与记录之间加上了二百多个字节的内容,但在未纳入VFP的数据库Dbc之前,其内容为"00",此时仍可以通过这种方式联接,一旦纳入数据库中,该段字节已被填上了其它内容,无法再联接。-在Power Builder应用程序中,使用事务处理对象来联接数据库,这种事务处理对象,即有默认的SQLCA,用户也可以自己生成,以方便访问多个数据库。在程序中使用事务处理对象时,一般必须先指明DBMS、DbParm两个属性,对

45、于FoxPro数据库,还必须指明Database、userid、servername、几个属性,这一点是与访问其他类型的数据库不同的地方。sqlca.dbms="ODBC"/指定联接方式ODBC sqlca.database="D:prgpubdata"/指定被联接数据库所在目录sqlca.userid="public"/用户识别号,都为public sqlca.servername="FOXPRO"/效劳器名:均为FOXPRO sqlca.dbparm="Connectstring='DSN=t

46、scxs'"/数据源名connect using sqlca;/施行联接-通过对FoxPro数据库的联接,用户便可以在Power Builder开发环境下、应用程序中使用这些数据库,快速地开发出自己的信息管理系统,实现对这些数据库的维护与管理。-二、将DBF文件转换为SQL Anywhere的DB文件格式-在Power Builder环境下,附带有一个数据库系统-SQL Anywhere,在Power Builder中利用它,用户可以直接建立、维护数据库。在SQL Anywhere中,数据库构造虽然与VFP不同,但概念是一致的,即:数据库是系统中相关的各种数据,这些数据又因不

47、同用处组织成不同的表,这些表共同构成数据库,与传统的数据库DBF相类比,PB、VFP中的表即是传统意义的数据库,PB、VFP中的数据库类似于传统的数据库DBF文件所在的目录。SQL Anywhere中提供了将传统的DBF文件转换为该系统下的数据库文件DB中的表的工具。为了实现这一转换,用户必须先建立一个新的表,再将DBF格式的文件内容导入该表中。-对于DBF文件,必须是传统意义上的数据库,如FoxPro、dBase、FoxBASE环境下的数据库文件。该种数据库文件严格遵循"数据文件=数据库构造+数据库记录"这一格式。其构造如下:"32字节文件描绘假设干个32字节的

48、字段描绘构造描绘完毕符0D记录1,记录2,文件完毕符1A"03 62 0A 07 02 00 00 00-81 00 4C 00 00 00 00 00/文件描绘:时间、长00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00度、记录长、记录数4E 41 4D 45 00 00 00 00-00 00 00 43 01 00 00 00/第一个字段:名、类28 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00型、长、起始位41 55 54 48 4F 52 00 00-00 00 00 43 29 00

49、00 00/第二个字段0F 00 00 00 00 00 00 00-00 00 00 00 00 00 00 000D 20 50 6F 77 65 72 42-75 69 6C 64 65 72 20 50/构造完毕符0D、72 6F 67 72 61 6D 6D 69-6E 67 20 20 20 20 20 20记录1 20 20 20 20 20 20 20 20-20 20 4A 6F 68 6E 20 536D 69 74 68 20 20 20 20-20 1A/文件完毕符1A-将DBF文件直接转换为PBSQL Anywhere中的表,操作步骤如下:在PB中建立新表翻开新建的表

50、单击数据库画板中的"数据操作Data manipulation"按钮选择菜单:Rows?Import从"文件类型"下拉框中选择dbaseII&III*.dbf选择被导入文件所在的目录及文件名单击"翻开"按钮系统将翻开指定的文件,将该文件中的所有记录导入新建的表中。-但系统不提供直接将导入数据保存在本数据库表中。假设要将导入的记录保存为SQL Anywhere环境下的数据库表中,可以先将导入数据行以SQL格式保存在.sql类型文件中,在利用SQL语句将这些数据行插入新表中。步骤如下:按上面所列的步骤导入数据库DBF文件中的数据选

51、择菜单:File?Save Row As在"存为类型"列表框中选择:SQL选择保存途径,输入保存文件名,单击保存关闭"Data manipulation"窗口,回到数据库画板单击"DB Administration"数据库管理器选择菜单:File?Open确信文件类型为:SQL*.sql选择第4步中所保存的文件,单击"翻开"按钮删除文件起始部分的第一条SQL语句:CREATE TABLE单击"Execute"执行按钮,系统将把原数据库中的所有行插入到新表中。-需要注意的是,新建的表在字段设置上必

52、须与原DBF文件中的字段保持一致,即:新表中的字段数必须等于或大于原DBF文件中的字段数新表中的字段顺序要与原文件中的字段顺序一样,即使新表中字段数更多,但新的字段必须放在最后新表与旧文件中字段名可以不一样新表中的数据类型必须与旧表中的数据类型兼容:字符?字符,数值?数字,数字?字符数据格式相一致,如两个文件中的日期格式必须一致新表中字段长度必须能包容旧数据库文件中的对应字段中的数据,如:旧数据库某一字段宽度为C20,但库中所有记录在该字段的实际最长为14,那么,新表中的字段宽度至少应为C14-假设你愿意,也可以将原FoxPro中的数据库先转换到TXT格式文件,再将TXT格式的文件导入SQL

53、Anywhere数据库表中,不过TXT文件中一条记录独占一行,各字段间必须用Tab键符隔开,其导入方法与DBF文件中数据的导入方法类似。-以上两种方法均可实如今Power Builder下访问FoxPro数据库,但两种方法之间有些不同之处:从系统需求来看:第一种方式使用ODBC直接访问DBF文件,只要Power Builder根本系统即可,不需要安装数据库管理系统DBMS;而第二种方式必须安装SQL Anywhere系统。从运行效率来看:第一种方式速度要慢一些,后一种方式稍快。笔者在应用程序中比较了两种方式在速度上的差异:将FoxPro系统中的一个有15000余条记录的数据库,用第一种方式联接

54、、在数据窗口控制中显示Retieve记录,需要6秒钟左右,后来又用第二种方式:在SQL Anywhere中新建一个表,将这15000条记录导入表中,联接、显示记录,需要时间为3-4秒。对另一个拥有19万余条记录的FoxPro数据库直接使用ODBC,联接、显示的时间为85秒钟。-使用Power Builder的主要优势表达在建立客户/效劳器形式的系统上。对于一般的单机系统、规模较小的系统,可能大多数人不会想到它。但假设你觉得FoxPro太老土,Visual FoxPro又太难学的的话,不妨试试Power Builder。PB下连接Mysql需要安装myodbc,详细的安装和设置请参阅:.y-wi

55、ndows-installer使用DSN方式:ConnectString='DSN=dl;DESC=MySQL ODBC 3.51 Driver DSN;DATABASE=xxxx;SERVER=xxx.xxx.xxx.xxx;UID=xxxxASSWORD=xxxxORT=3306;SOCKET=;OPTION=3;STMT=;'或者ConnectString='DRIVER=MySQL ODBC 3.51 Driver;SERVER=xxx.xxx.xxx.xxx;DATABASE=xxxx;UID=xxxxWD=xxxxORT=3306;OPTION=3'

56、PB中连接Access数据库的三种方法方式一:SQLCA.DBMS="ODBC"SQLCA.AutoCommit=False SQLCA.DBParm="ConnectString='driver=Microsoft Access Driver*.mdb;DBQ=c:foodmart.mdb'"CONNECT;IF SQLCA.SQLCode 0THEN MessageBox"数据库连接失败","请与管理员联络。错误号:"+StringSQLCA.SQLCode+"rn错误原因:"

57、;+SQLCA.SQLErrTextRETURN else MessageBox"数据库连接成功","如今进入系统."end if方式二:SQLCA.DBMS="OLE DB"SQLCA.AutoCommit=False SQLCA.DBParm="ROVIDER='Microsoft.Jet.OLEDB.4.0',DATASOURCE='C:foodmart.mdb'"CONNECT;方式三:建立DSN,通过ODBC连接。这个就不用多说了。例如:/Profile my_ass SQ

58、LCA.DBMS="ODBC"SQLCA.AutoCommit=False SQLCA.DBParm="ConnectString='DSN=my_ass'"catalog tables could not be created and are not available for use问题解决方法:这种情况多见于从SQL server转到Access数据库,用ODBC连接的情况把sqlserver数据库里的五个'pb'字母开头的数据表导入到access数据库里去,再连接就不提示了关于动态注册ODBC数据源关于动态注册Ac

59、cess数据源/*/函数名:gf_setodbc_access/功能:完成access数据源的注册功能/输入参数:/as_database数据库名/即Access数据库文件名字,不含扩展名/as_path数据库文件所在的目录/返回值:/true表示自动配置成功/false表示自动配置失败/设计者:Adamswater/完成时间:2005年6月/*boolean lb_rtn string ls_root,ls_root_dsn,ls_root_Jet,ls_root_Engines integer li_rtn string ls_dsnname,ls_dbfullname,ls_driver

60、,temp,ls_version string ls_syspath environment env integer rtn ls_syspath=Space40/获得*作系统的目录GetSystemDirectoryAls_syspath,60ls_driver=ls_syspath+"odbcjt32.dll"lb_rtn=true ls_root="HKEY_LOCAL_MACHINEsoftwareodbcodbc.ini"/数据源名字为:文件名字+"_DT"ls_dsnname=as_database+"_DT&q

61、uot;ls_root_dsn=ls_root+""+ls_d snname ls_root_Engines=ls_root_dsn+""+"Engines"ls_root_Jet=ls_root_Engines+""+"Jet"ls_dbfullname=as_path+""+as_database+".mdb"/注册数据源的名字li_rtn=registrysetls_root,ls_dsnname,regstring!,""if li_rtn=-1 then return false end if/注册数据库名字li_rtn=registrysetls_root_dsn,"DBQ",regstring!,ls_dbfullnameif li_rtn=-1 then return false end if/注册数据库驱动程序li_rtn=registrysetls_root

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论