用pb8作com组件时如何连接数据库

sunsatan 2002-07-24 01:07:10
请问各位专家,我用pb8做com组件时需要连接数据库我在用户对象中添加了一个函数uf_con内容如下:
//连接数据库
SQLCA.DBMS = "ODBC"
SQLCA.Database = "MyCom"
SQLCA.AutoCommit = false
SQLCA.DBParm = "ConnectString='DSN=MyCom;UID=dba;pwd=sql'"

Connect Using sqlca;

ds_datastore = CREATE DataStore

if sqlca.sqlcode = 0 then
return 1
else
return -1
end if
编译可以通过但是在ASP中使用时总是不能连接数据库请问是什么原因?
...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsatan 2002-07-25
  • 打赏
  • 举报
回复
oceanaut(海魂):感谢你的代码,不过我是要在PB作的COM组件中连接数据库而不是在PB的一般应用中。我写的代码在应用程序中可以但是在COM组件中由ASP调用时就不行了,请问谁可以指导我以下谢谢。
海洋‘s 2002-07-24
  • 打赏
  • 举报
回复
在PB程序中实现ODBC数据源的添加

作者:鹿寒

思路:

主要是利用PB对注册表操作函数RegistryGet()和RegistrySet(),这两个函数以及其他注册表函数在PB的帮助里都有详细说明。

再就是利用PB的ProfileString()函数读取INI文件中预先定义好的参数。

 

写注册表的源程序:

string ls_sys[],ls_driver[],st_driver,st_path

integer li_rtn

ls_me="新星科技股份有限公司(New Star, Inc.)"

ls_version="2.0"

ls_sys[1]="HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0"

ls_sys[2]="HKEY_CURRENT_USER\Software\"+ls_me+"\仓储管理系统\"+ls_version

ls_sys[3]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"

ls_sys[4]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI"

li_rtn = RegistryGet(ls_sys[1], "Driver", RegString!, st_driver)

IF li_rtn = -1 THEN

messagebox("错误","未安装Sybase SQL Anywhere 5.0 !",information!,ok!)

RETURN

END IF

li_rtn = RegistryGet(ls_sys[2], "InstPath", RegString!, st_path)

IF li_rtn = -1 THEN

messagebox("错误","读取安装路径出错 !",information!,ok!)

RETURN

END IF

string envfile,ls_source[],ls_drivepath,ls_temp

integer i

envfile="regedit.ini"

ls_source[1]="cl"

ls_source[2] =ProfileString(envfile,"INI","AutoStop"," ")

ls_source[3] =ProfileString(envfile,"INI","DatabaseFile"," ")

ls_source[4] =ProfileString(envfile,"INI","DatabaseName"," ")

ls_source[5] =ProfileString(envfile,"INI","Description"," ")

ls_source[6] =ProfileString(envfile,"INI","Driver"," ")

ls_source[7] =ProfileString(envfile,"INI","PWD"," ")

ls_source[8] =ProfileString(envfile,"INI","Start"," ")

ls_source[9] =ProfileString(envfile,"INI","UID"," ")

li_rtn=RegistrySet(ls_sys[3], ls_source[1] , RegString!, "Sybase SQL Anywhere 5.0")

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

ls_sys[4]=ls_sys[4] + "\" + ls_source[1]

li_rtn=RegistrySet(ls_sys[4], "AutoStop" , RegString!, ls_source[2])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

li_rtn=RegistrySet(ls_sys[4], "DatabaseFile" , RegString!, st_path+"\"+ls_source[3])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

li_rtn=RegistrySet(ls_sys[4], "DatabaseName" , RegString!, ls_source[4])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

li_rtn=RegistrySet(ls_sys[4], "Description" , RegString!, ls_source[5])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错?!",information!,ok!)

RETURN

END IF

li_rtn=RegistrySet(ls_sys[4], "Driver" , RegString!, st_driver)

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

li_rtn=RegistrySet(ls_sys[4], "PWD" , RegString!, ls_source[7])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

ls_temp=st_driver

i=pos(ls_temp,"\")

do while i>0

ls_drivepath=ls_drivepath+left(ls_temp,i)

ls_temp=right(ls_temp,len(ls_temp)-i)

i=pos(ls_temp,"\")

loop

li_rtn=RegistrySet(ls_sys[4], "Start" , RegString!, ls_drivepath+ls_source[8])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

li_rtn=RegistrySet(ls_sys[4], "UID" , RegString!, ls_source[9])

IF li_rtn = -1 THEN

messagebox("错误","读取系统文件或写注册表出错 !",information!,ok!)

RETURN

END IF

regedit.ini文件格式如下:

[INI]

AutoStop=yes

DatabaseFile=Psdemodb.db

DatabaseName=仓储管理系统

Description=cl

Driver=

PWD=sql

Start=dbeng50.exe

UID=dba

备注:

程序中ls_sys[2]变量代表的注册表键值是我通过安装程序制作工具自动生成的,每个人使用的制作安装程序的工具不同,这个键值也许不尽相同。其实用意只是在于取得st_path这个变量,它保存应用程序安装后所在路径,其实也可以用API函数得到,至于使用API函数怎么取得当前程序所在路径就不讲了。


 
海洋‘s 2002-07-24
  • 打赏
  • 举报
回复
最好使用自动注册数据源的方式,这样可以避免一些不必要的错误
xingxing 2002-07-24
  • 打赏
  • 举报
回复
有可能是odbc的原因,还有就是系统的路径的问题
// Description: pb日志组件,把log4pb.pbd, callback.pbd加入到开发的libary列表中 // 1. log4pb调用演示例子, 思想仿log4j // 2. 集成对象到application, // 3. 组件文件: log4pb90.pdb + callback.pbd, // 4. SQL目录包含一些数据库对象,目前支持postgresql和MS SQL(修改下表log4pb_log可支持其他数据库) // SQL文件在appliation的SQLCA.database中执行 // 5. 演示集成代码已表示出[*** log4pb integrated code],可搜索出来, copy to your application // 6. 日志可以同记录到数据库,文件(目录log4pb下),和邮件发送,可扩展其它方式(如发送QQ消息) // 7. 日志是异步记录的(每个记录方式开了个线程在后台负责记录处理),大大提高应用程序性能 // 8. 功能可以通过数据库表选择配置(如,多少种记录方式,各线程工频率) // 9. 日志的数据库记录方式,可以配置缓区大小,对于联机事务较多的应用,可配置大点,避免频繁写数据库 ----------------- 安装说明: 1. demo是postgresql的ODBC的数据源,demo的sql语句支持postgresql和MS SQL,对其它db,稍修改sql语句即可 1. 根据目标数据库小修改sql语句 2. demo的ini文件要配置 3. 包提供了demo集成的源代码和logpb90.pbd文件 4. 目前只提供pb90 5. 目前版本已基本稳定(用过一段间了),支持log到pb和文件,QQ消息和email后续版本会提供
FirCmpt组件库1.0: PB专用组件,内容如下: 1.Z01库 应用库 2.WinApi库 Window提供的API函数的包装对象库包含以下组件。 TAPI 该对象提供了一些API函数。 TDialog 基本对象框控件。 TColorDialog 颜色对象框。 TFolderDialog 选择一个目录 TFontDialog 选择一种字体 TOpenDialog 选择一个已存在的文件。 TSaveDialog 选择要保存的文件。 TSystemTime 系统间操 3.FirCmpts库 Fir组件,有字符串管理与操对象,可视化容器对象,分隔条对象,屏幕对象。 TList 基本列表管理对象,可用于管理多种不同类型的数据或对象的对象。 TStrings 基本字符串管理对象。 TCompartStringList 是TStrings的扩充,可以指定分隔符。 TStringList 是TStrings的扩充,可以给每一个串命名。 TVisualManager 可视化对象的管理对象,可以管理一组Fir组件或PB的可视化组件。 TComponent 基本组件对象,该对象有基本的排列方式属性 TPanel 是TComponent的扩充,该对象是基本容器。可以容纳其它的可视化对象或TPanel对象(任何从TComponent继承的对象)。 Tcontrol 单一容器对象,可容纳一个可视化对象或Fir可视对象,将容纳的对象的大小设置与自己一样。 TSpliterBar 分隔条对象 TScreen对象 没什么特殊的地方,可以取到当前屏幕的分辨率。 TExchange 数制转换对象。 TForm对象 基本的窗口对象,以上的可视化对象都必须放置在TForm继承的窗口中才会有用。 4.Types库 一些Fir组件用到的基本结构类型。 TComponentInfo 组件信息。 TGraphObjectInfo PB可视化组件信息。 TObjectInfo Fir对象信息。 TPointer 表示一个点的坐标。 TRecBrush 一个Windows 基本刷子结构 TRecSystemTime Windows系统间操结构 TRect 表示一个矩形范围。 TRectangle 同上。 TRectPos 同上。 5.ZhtBase库 Fir原始组件库。 TBaseComponent, TBaseObject, TExternal, TObject, TVisual。 6.Functions 库 一些常用函数。 checkComponent 检查一个对象是否是Fir组件。 ConvertRect 转换一个矩形范围(PB单位与象素转换) FindStr 查找一个串中是否有指定的子串。 FormatStr, gf_Format 得到格式化字符串。 gf_Connect 通过加密的口令进行数据库连接。 gf_PipeLine 执行数据管道 HyperLink 执行一个超链接。 ReplaceStr 把一个串中指定的子中替换为另一种子串。 具体了例子可以运行程序。 有好建议请与我联系 _z_h_t_@163.com

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧