PB程序 访问服务器的数据库成功,但是程序出错!!!

flakyxd 2018-10-06 02:06:35
如图:



环境PB5开发的ERP系统程序,之前连接的是Win2003 里的sql 2000.
电脑服务器坏了之后,就把数据库物理拷贝出来,附加到新的电脑服务器里的 sql 2000里。
然后,客户端就连接不上,提示:unable to connect: SQL server is unavailable or does not exist
连接方式:
[Database]
Vendors=ODBC,SYB SQL Server v4.x,SYC Sybase System 10 CTLIB,IN5 I-Net v5.x,MSS (Msoft) SQL Server 6.0,O71 ORACLE v7.1,O72 ORACLE v7.2
DBMS=MSS
ServerName=SQLSERVER
Database=dbname
UserID=
DatabasePassword=
LogId=sa
LogPassword=sapd
DbParm=

用上面这个方式连接不了新电脑里的数据库,但是我用其他客户端可以连接新电脑里的数据库。

后来换了个连接方式:

[Database]
Vendors=ODBC,SYB SQL Server v4.x,SYC Sybase System 10 CTLIB,IN5 I-Net v5.x,MSS (Msoft) SQL Server 6.0,O71

ORACLE v7.1,O72 ORACLE v7.2
DBMS=ODBC

; DBParm=DelimitIdentifier can be added to DbParm
; to control whether quotes are placed around
; table and column names in SQL
; DbParm=DelimitIdentifier='YES'
DbParm="ConnectString='DSN=odbc1;database=dbname;server=SQLSERVER;UID=sa;PWD=sa'"
connect;


这个odbc1在客户端里的ODBC数据源里添加了,然后成功连接数据库,程序也可以登录了
但是用的过程中出现了


另外,我在服务器里用程序也可以连接登录,也不会出现这个错误,操作也正常。
我试过在win2008服务器里安装sql2008结果也一样。
有没有办法解决客户端连接登录后操作不会出错的办法?
这个ERP系统叫融丰,找了他们的电话已经没有这个公司了。
...全文
804 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
flakyxd 2018-10-22
  • 打赏
  • 举报
回复
引用 29 楼 r00_a2lBUR 的回复:
那么老的系统还能运行,厉害啊

确实挺强的,客户端到win7还能正常运行很不错。
r00_a2lBUR 2018-10-21
  • 打赏
  • 举报
回复
那么老的系统还能运行,厉害啊
WMERP 2018-10-19
  • 打赏
  • 举报
回复
PB runtime 工具包,你试试找找瞎子啊或者在PB开始菜单中中自己制作一个
flakyxd 2018-10-19
  • 打赏
  • 举报
回复
能连接的客户端还有个必要条件就是,服务器的区域语言和高级选项里必须选英语或日语就可以连接,而且不出错。
或是不改区域语言和高级选项,sql server 的服务器设置里 默认语音改为 英语也可以连接,而且不出错。
但是其他客户端还是无法连接
flakyxd 2018-10-19
  • 打赏
  • 举报
回复
我现在可以连接的客户端的PB都是60版本的DLL,复制到其他客户端后注册失败
flakyxd 2018-10-18
  • 打赏
  • 举报
回复
今天在一台客户端里安装了PB开发工具各个版本后,就可以连接服务器了,而且不出错。
难道我要每台客户端都安装PB开发工具吗?这个不现实。。。
flakyxd 2018-10-16
  • 打赏
  • 举报
回复
引用 21 楼 yusantos 的回复:
看一下你的客户端软件目录里面是否有这个文件。ntwdblib.DLL 没有的话网上下一个放进来。再试一下。

有,版本是6.50.409
flakyxd 2018-10-16
  • 打赏
  • 举报
回复
引用 22 楼 wosind 的回复:
用的IP还是实例名访问。
telnet端口有没有正常打开。
本机访问、局域网问、互联网访问是有区别的,本机能访问不能说明其他方式就没有问题。

用IP和实例名访问都试过了结果一样。
局域网问不能访问
aolixiaox 2018-10-12
  • 打赏
  • 举报
回复
用的IP还是实例名访问。
telnet端口有没有正常打开。
本机访问、局域网问、互联网访问是有区别的,本机能访问不能说明其他方式就没有问题。
yusantos 2018-10-12
  • 打赏
  • 举报
回复
看一下你的客户端软件目录里面是否有这个文件。ntwdblib.DLL 没有的话网上下一个放进来。再试一下。
flakyxd 2018-10-12
  • 打赏
  • 举报
回复
虽然看到了连接参数,但是参数是没问题的。不知道为什么连接不了
同样配置文件timeway.ini 我在服务器本机上可以连接,在客户端就不能连接
问题还是出在服务器那里
我理解的DBMS=MSS (Msoft) SQL Server 6.0 这个方式是 Microsoft SQL Server类型的OLE DB
到底是什么呢?
yusantos 2018-10-12
  • 打赏
  • 举报
回复
这么老的系统还在用,不容易。赶紧换SAP吧。
flakyxd 2018-10-10
  • 打赏
  • 举报
回复
看了ddlb_1.text = ProfileString ("timeway.ini", "database", "dbms", "")
ddlb_1的属性里看到如下 有string Item[]={"ODBC"


inherited from dropdownlistbox
int X=605
int Y=1185
int Width=978
int Height=404
int TabOrder=140
boolean VScrollBar=true
long BackColor=12639424
int TextSize=-9
int Weight=400
string FaceName="Arial"
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
string Item[]={"ODBC",&
flakyxd 2018-10-10
  • 打赏
  • 举报
回复
真正读取的是timeway.ini

/* Populate sqlca from current PB.INI settings */
ddlb_1.text = ProfileString ("timeway.ini", "database", "dbms", "")
//sqlca.database = ProfileString ("timeway.ini", "database", "database", "")
sle_1.text = ProfileString ("timeway.ini", "database", "userid", "")
sle_2.text = ProfileString ("timeway.ini", "database", "dbpass", "")
sle_4.text = ProfileString ("timeway.ini", "database", "logid", "")

sle_3.text = ProfileString ("timeway.ini", "database", "LogPassWord", "")

//sqlca.servername = ProfileString ("timeway.ini", "database", "servername", "")
sle_6.text = ProfileString ("timeway.ini", "database", "dbparm", "")
sle_5.text = ProfileString ("timeway.ini", "database", "lock", "")
sle_7.text = ProfileString ("timeway.ini", "database", "prompt", "")
CHOOSE CASE upper(ProfileString ("timeway.ini", "database", "autocommit", ""))
CASE 'TRUE'
sqlca.AutoCommit = TRUE
CASE 'FALSE'
sqlca.AutoCommit = FALSE
END CHOOSE


st_10.text = GLOBAL_VENDOR_NAME
st_11.text = GLOBAL_VENDOR_NAME_E
string ls_add_string,ls_add_string2,string_I,string_J
Integer I,J

ddlb_server_name.SetRedraw(false)
ddlb_server_name.Reset( )
ddlb_database_name.SetRedraw(false)
ddlb_database_name.Reset( )

if FileExists("timeway.ini")=false then
messagebox("问题","资源文件‘TIMEWAY.INI’未发现!")
// close(w_m_login1)
else
string_J = ProfileString ("timeway.ini", "TW_MRPII", "I", "")
J=integer(string_J)
FOR I=1 TO J
string_I = "servername" + string(I)
ls_add_string = ProfileString ("timeway.ini", "TW_MRPII", string_I, "")
ddlb_server_name.AddItem(ls_add_string)
string_I = "database" + string(I)
ls_add_string2 = ProfileString ("timeway.ini", "TW_MRPII",string_I, "")
ddlb_database_name.AddItem(ls_add_string2)
NEXT
end if

ddlb_server_name.SetRedraw(true)
ddlb_database_name.SetRedraw(true)
ddlb_server_name.selectitem(1)
ddlb_database_name.selectitem(1)

LOGIN_NUMBER = 0
//sle_password.setfocus()
sle_user_name.setfocus()
setpointer(arrow!)
flakyxd 2018-10-10
  • 打赏
  • 举报
回复
引用 15 楼 wosind 的回复:
PBKiller2.5.18
9以前的版本都可以反编译


//string name
int rownum
this.triggerevent("timeway_splash")
//this.postevent("timeway_splash")
/* Populate sqlca from current PB.INI settings */
//sqlca.DBMS = ProfileString ("pb.ini", "database", "dbms", "")
sqlca.DBMS = ddlb_1.text
//sqlca.database = ProfileString ("pb.ini", "database", "database", "")
sqlca.database = ddlb_database_name.TEXT
//sqlca.userid = ProfileString ("pb.ini", "database", "userid", "")
sqlca.userid = sle_1.text
//sqlca.dbpass = ProfileString ("pb.ini", "database", "dbpass", "")
sqlca.dbpass = sle_2.text
//sqlca.logid = ProfileString ("pb.ini", "database", "logid", "")
sqlca.logid = sle_4.text
//sqlca.logpass = ProfileString ("pb.ini", "database", "LogPassWord", "")
sqlca.logpass = sle_3.text
//sqlca.servername = ProfileString ("pb.ini", "database", "servername", "")
sqlca.servername = ddlb_server_name.TEXT
//sqlca.dbparm = ProfileString ("pb.ini", "database", "dbparm", "")
sqlca.dbparm = sle_6.text
sqlca.lock = sle_5.text
sqlca.AutoCommit = true

string SYSTEM_STR

window wo
SYSTEM_STR = ProfileString ("timeway.ini","TW_MRPII","SYSTEM_STR","")
/* Uncomment the following for actual DB connection */
setpointer(hourglass!)
connect;

if sqlca.sqlcode <> 0 then
MessageBox ("Connect error","数据库连接错误:无法连接数据库." + sqlca.sqlerrtext)
return
end if


setpointer(hourglass!)
//if KeyDown(KeyEnter!)=TRUE then
integer PRIVIILEGE_VAR
string USER_NAME_VAR,PASSWORD_VAR
USER_NAME_VAR = w_m_login1_inv.sle_user_name.text
PASSWORD_VAR = w_m_login1_inv.sle_password.text
SELECT max(dbo.M_LOGIN.PRIVIILEGE)
INTO :PRIVIILEGE_VAR
FROM dbo.M_LOGIN
where LOGIN_NAME = :USER_NAME_VAR and PASSWORD = :PASSWORD_VAR;
USERNAME_FIRST = USER_NAME_VAR
IF PRIVIILEGE_VAR > 0 THEN
date dtu
dtu = date(2198,12,31)
if dtu < today() then
messagebox("OK","系统连接出错!")
close(parent)
return
end if
declare dtu procedure for sysdtu;
sqlca.sqlcode = 0
execute dtu;
// messagebox('sqlca.sqlcode',string(sqlca.sqlcode))
if sqlca.sqlcode < 0 then
messagebox("Call vendor","请联系软件供应商...,系统连接出错!")
close(parent)
return
end if
// messagebox('SYSTEM_STR',left(SYSTEM_STR,5))
name=sle_user_name.text
select count(*) into :rownum from m_login
where login_name = :name and
(part ='3' or part = '13');
if rownum<1 then
messagebox("OK","你不是本模块用户,无权使用本模块.~r~n欲要使用本模块,请联系系统管理员.")
disconnect;
return
end if
if left(SYSTEM_STR,5) = 'W_SYS' then
// Open (wo,SYSTEM_STR)
// else
Open (w_genapp_frame_inv)
end if
close(parent)
// sle_password.setfocus()
ELSE
messagebox('OK!','非法用户名或口令!')
disconnect;
LOGIN_NUMBER = LOGIN_NUMBER + 1
setpointer(arrow!)
if LOGIN_NUMBER > 2 then
messagebox('Exit','您无权使用本系统!')
setpointer(arrow!)
close(parent)
end if
END IF
//end if

aolixiaox 2018-10-10
  • 打赏
  • 举报
回复
PBKiller2.5.18
9以前的版本都可以反编译
flakyxd 2018-10-10
  • 打赏
  • 举报
回复
引用 13 楼 wosind 的回复:
我前面有告诉你了,一劳永逸的方法就是,PB 反编译一下PBD,找到数据库连接相关的脚本,这些脚本能看出来,程序连接的方式,和一些需要的参数等等,这样就知道服务器要做什么相关设置。

我下载了几个反编译的都是导不出来,能不能给个链接
或是我打包给你,你帮我看下?
aolixiaox 2018-10-10
  • 打赏
  • 举报
回复
我前面有告诉你了,一劳永逸的方法就是,PB 反编译一下PBD,找到数据库连接相关的脚本,这些脚本能看出来,程序连接的方式,和一些需要的参数等等,这样就知道服务器要做什么相关设置。
flakyxd 2018-10-10
  • 打赏
  • 举报
回复


[Database]
Vendors=ODBC,SYB SQL Server v4.x,SYC Sybase System 10 CTLIB,IN5 I-Net v5.x,MSS (Msoft) SQL Server 6.0,O71 ORACLE v7.1,O72 ORACLE v7.2
DBMS=MSS (Msoft) SQL Server 6.0
ServerName=RG
Database=YGERPN
LogId=sa
LogPassword=sasql
; DBParm=DelimitIdentifier can be added to DbParm
; to control whether quotes are placed around
; table and column names in SQL
; DbParm=DelimitIdentifier='YES'
DbParm=
;
AutoCommit=false
AutoQuote=1
; Columns defines how many columns are displayed
; when a table is expanded
Columns=8
;
ForeignKeyLineColor=16711680
IndexKeyLineColor=255
PrimaryKeyLineColor=65280
Prompt=0
Lock=
NoCatalog=No
ReadOnly=0
ShowIndexKeys=1
ShowReflnt=1
StayConnected=1
TableDir=1
TableListCache=18000
TableSpace=*
TerminatorCharacter=;
HideComments=0
ShowRefInt=1
; specify the background color for the column list window header band
TableHeaderColor=
; specify the text color for the column list window header band
TableHeaderTextColor=
; specify the background color for the column list window detail band
TableDetailColor=
; specify the text color for the column list window detail band
TableDetailTextColor=
; specify the text color for the column list window COLUMN NAME column in the detail band
TableColumnNameTextColor=
LEXICON=
path="c:\ERP\database\"
GLOBAL_USER_NAME='永冠塑胶制造(深圳)有限公司'


[TW_MRPII]
I=1
ServerName1=RG
Database1=YGERPN
GLOBAL_USER_NAME='公司'
GLOBAL_COMPANY_NAME='深圳市融丰软件有限公司'
SYSTEM_STR = 'W_SYSTEM5'
timer = 60
ledger=ERP_FIN


这个是erp客户端的INI文件,我觉得这个是没问题的,因为以前这个客户端在XP系统和Win7还有Win10系统下都能连接,
问题的关键在于服务器肯定有什么地方要设置什么的.
flakyxd 2018-10-08
  • 打赏
  • 举报
回复
引用 10 楼 zhgwbzhd 的回复:
PB的MSS方式,区分为TCP和命名管道,这个需要在服务器上都打开。 最好保持原来的方式,否则不知道哪里会出现问题。 原来的是日文版,你最好也采用日文版。这个最好不要乱改。 因为有字符集,字符编码这一说,最好和原来都保持一致。
这是sql server 2008TCP和命名管道 这是sql server 2000TCP和命名管道
加载更多回复(10)

754

社区成员

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

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