# 常见问题
# 客户端连接不成功
- 查看satserver.exe是否启动
- 观察客户端点连接后,satserver命令行窗口是有日志输出
没有日志输出情况:
- 用telnet测试服务端端口是否能够访问。
方法:在命令窗口中输入telnet 127.0.0.1 5555 其中IP和端口号换成自己的,看是否正常连接。不正常请检查是否端口被防火墙限制了。
如果显示telnet命令不存在,请打开telnet服务,具体请百度。 - 自己的程序启动后是否调用satodbc_install方法,有UAC权限的电脑第一次运行时需要右键以管理员权限运行,或者把UAC关闭。
有日志输出情况: 查看日志,日志会输出配置的驱动返回的错误,根据情况进行调整。
- 版本不匹配的情况
************************************************
************** 欢迎使用SatRDA组件 **************
************** 技术支持QQ:9091178 **************
************************************************
[SatRDA] Http listening on :5555
2021-03-02 14:42:42.923 info Started POST /api/connect.go for 127.0.0.1:25773
******error: satrda版本不匹配,当前版本:11, dll版本10 ******
2021-03-02 14:42:42.939 info Completed 200 OK in 16.9549ms
使用的satrda.dll和satserver不匹配,请确保版本一致。一般把原来下载的demo删掉,服务端和dll都用相同的版本就可以。
提示: 注册的驱动路径可以在注册表中搜索
- 连接名不对
************************************************
************** 欢迎使用SatRDA组件 **************
************** 技术支持QQ:9091178 **************
************************************************
[SatRDA] Http listening on :5555
2021-03-02 14:42:42.923 info Started POST /api/connect.go for 127.0.0.1:25773
******error: connect info is not exists ******
2021-03-02 14:42:42.939 info Completed 200 OK in 16.9549ms
请检索客户端的连接串DB_NAME的值是否和dbconfig中设置一致,这里不是数据库实际名称,如示例中是mycon1
- 如果提示驱动不存在,或者连接问题请在odbc32位管理器建立系统DSN, 并测试连接正常,直接将dbconfig中的连接指定为DSN方式 如:"orcl": {"DBType": "odbc","Provider": "DSN=dbt;uid=system;pwd=sql; "}
# 某些xp提示加载satrda.dll失败
在SatRDA群文件下载VC2008运行库并安装
# PB提示找不到dll文件
- 关掉工程,在当前目录打开工程(一般就可以了)
- 把整个project编译一遍
- 目录太深了,把目录放到根目录,不要有中文。
# PB发布后连接不上
检查程序路径下面是否有pbodbxxx.dll,没有在pb安装目录下找出来加入。其中xxx是版本号,如pb9.0为pbodb90.dll
# 服务端64位Oracle客户端解决办法
- SATRDA QQ群里下载 instantclient-basiclite-nt-12.2.0.1.0.zip和instantclient-odbc-nt-12.2.0.1.0.zip 解压到一起
- 双击odbc_install安装
# PB调用带有输出参数的存储过程
Pb通过odbc驱动执行存储过程输出参数存在bug,需要以rpc方式调用具体见:http://blog.csdn.net/pcwe2002/article/details/52675426 (opens new window)
# PB插件发布到服务器后需要的运行库
- Pb10及以上参考以下12.5的dll
atl71.dll msvcp71.dll msvcr71.dll libjcc.dll libjtml.dll libjutils.dll nlwnsck.dll pbdwe125.dll pbshr125.dll pbvm125.dll pbodb125.dll
可以通过powerbuidler runtime packager打包运行库安装,安装后把atl71.dll msvcp71.dll msvcr71.dll这三个文件再拷到运行库安装的文件夹
- Pb9需要运行库 Libjcc.dll pbdw90.dll pbvm90.dll
提示: 建议通过pb自带的打包工具打包运行库到服务端安装
# 64位系统打开32位odbc
命令行窗口运行 C:\Windows\SysWOW64\odbcad32.exe 可以打开32位管理器
# SQLSERVER 触发器返回错误得不到
触发器中加上SET NOCOUNT ON;
# PB日期类型更新插入不正确
两种方式都可以
- 找到默认的pbodbxx.ini(xx表示pb版本如pbodb90.dll)中的对应数据的日期格式调整正确,并放到工程下
- pb连接参数加上 ,DateTime='{t\s''YYYY-MM-DD hh:mm:ss.fff''}'
# Oracle乱码
查看字符集编码, 在数据库服务器端 启动 sqlplus
SQL->select userenv('language') from dual
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
在系统的环境变量里面加了个NLS_LANG值也是等于上面查询的字符串(SIMPLIFIEDCHINESE_CHINA.ZHS16GBK)
# Oracle Restful方式速度慢
Oracle 11G取参数信息比较慢,
解决办法:连接字符串中加入DBOwner信息,可以加快访问速度,注意用户名需要大写
# Oracle describe("DataWindow.Table.Select")
得到的select语法可能不正确
解决办法:
- 在数据窗口data source里选择convert to syntax
- 安装oracle in instanceclient驱动
# Oracle in instanceclinet驱动安装不上
群里下载oracle_instantclient_11_2.reg,记事本打开,修改里面dll路径为驱动对应路径后保存。 32位系统直接双击导入 64位系统运行 C:\Windows\SysWOW64\regedit.exe , 然后再点击菜单“文件”-“导入”
# Oracle连接串无法连接
连接串示例:"Provider":"driver=Oracle in OraDb10g_home1;SERVER=ORCL;DBQ=orcl;uid=system;pwd=sql;EXC=T" 其中DBQ不设置可能连接不上
# PB连接Oracle更新日期出错
pb连接串加上这样的参数 ,DateTime='{t\s ''YYYY-MM-DD hh:mm:ss.fff''} ' ,Date={\d''YYYY-MM-DD''}
# 浏览器插件delphi不显示在任务栏
在主窗口的create事件中写
SetWindowLong(application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
# 浏览器插件在IE加载不成功
- IE的设置 Intenet选项里切换到“高级”标签,把“启用增强保护模式”的勾去掉
- 安全里面把启用保护模式的勾去掉
# 浏览器运行下载后程序未解压
用UpdateTool生成程序包时,如果文件有更新,一定要确保先点击过刷新列表,然后再点开始生成
# 浏览器出现插件没有响应

# Satserver.exe无法启动一闪而过
配置文件未正确设置,请在命令行窗口里面运行satserver,查看satserver的日志输出
# MySQL连接时间长后断开
Odbc驱动选上Enable automatic reconnect
# 服务端无响应
某些机器,以命令窗口方式运行服务端,如果拖动命令窗口,或者用鼠标点击命令窗口,可能出现服务端无响应的情况。点击命令窗口左上角图标,选择属性,将 ”快速编辑模式” 前面的勾去掉
# 后台管理界面加载不正常
这是因为windows环境下读取了注册表中的Content Type。 修改如下:
- 运行cmd: 输入regedit 并回车
- 在注册表HKEY_CLASSES_ROOT中找到.css 点击.css文件夹 修改Content Type 为 text/css
# BDE使用TUpdateSQL更新不成功
Bde使用TUpdateSQL生成的更新语句(假设有name列)包含where name = :OLD_name的条件,当name列值为null时,实际生成语句为 where name = null不合法。通过在数据库连接参数加上AnsiNPW=no解决。即连接时会执行set ansi_nulls off
# Delphi ado日期时间类型参数传递后没有时间
Delphi ado的已知bug,通过设置ado参数类型为timestamp解决。
Qry.Parameters.ParamByName('d').ParameterObject.Type_ := adDBTimeStamp;
Qry.Parameters.ParamByName('d').Value := DT;
# Delphi adoquery如何执行存储过程
procedure TForm2.btn2Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('execute sp_fun_test2 :a,:b,:c');//c为输出参数,和oledb不同这里不要添加output 关键字!
ADOQuery1.Parameters.ParamByName('a').Value:=250;
ADOQuery1.Parameters.ParamByName('b').Value:=40;
ADOQuery1.Parameters.ParamByName('c').Direction := pdOutput;
ADOQuery1.ExecSQL;
showmessage(VarToStr(ADOQuery1.Parameters.ParamByName('c').Value));
end;