# 常见问题

# 客户端连接不成功

  1. 查看satserver.exe是否启动
  2. 观察客户端点连接后,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

  1. 如果提示驱动不存在,或者连接问题请在odbc32位管理器建立系统DSN, 并测试连接正常,直接将dbconfig中的连接指定为DSN方式 如:"orcl": {"DBType": "odbc","Provider": "DSN=dbt;uid=system;pwd=sql; "}

# 某些xp提示加载satrda.dll失败

在SatRDA群文件下载VC2008运行库并安装

# PB提示找不到dll文件

  1. 关掉工程,在当前目录打开工程(一般就可以了)
  2. 把整个project编译一遍
  3. 目录太深了,把目录放到根目录,不要有中文。

# 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日期类型更新插入不正确

两种方式都可以

  1. 找到默认的pbodbxx.ini(xx表示pb版本如pbodb90.dll)中的对应数据的日期格式调整正确,并放到工程下
  2. 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语法可能不正确
解决办法:

  1. 在数据窗口data source里选择convert to syntax
  2. 安装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选项里切换到“高级”标签,把“启用增强保护模式”的勾去掉 1
  • 安全里面把启用保护模式的勾去掉 1

# 浏览器运行下载后程序未解压

用UpdateTool生成程序包时,如果文件有更新,一定要确保先点击过刷新列表,然后再点开始生成

# 浏览器出现插件没有响应

1 360浏览器加载程序后,如果程序本身操作慢,卡住了主界面时间长,会出现这个提示,可以更换IE浏览器。建议优化程序,加快程序本身的执行速度。

# Satserver.exe无法启动一闪而过

配置文件未正确设置,请在命令行窗口里面运行satserver,查看satserver的日志输出

# MySQL连接时间长后断开

Odbc驱动选上Enable automatic reconnect
2

# 服务端无响应

某些机器,以命令窗口方式运行服务端,如果拖动命令窗口,或者用鼠标点击命令窗口,可能出现服务端无响应的情况。点击命令窗口左上角图标,选择属性,将 ”快速编辑模式” 前面的勾去掉 3

# 后台管理界面加载不正常

这是因为windows环境下读取了注册表中的Content Type。 修改如下:

  1. 运行cmd: 输入regedit 并回车
  2. 在注册表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
4

# 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;