最近改一个史前文明的代码,PB9+SQLSERVER2000,在winXP下写的一个软件,用户因为换到Win10下,只能装SQLSERVER2008,连接不上数据库,于是需要改一下数据库连接部分的代码;同时也改一些小功能;(SQLSERVER2008与PB不能用专用接口了,只能走ODBC连接了,看到有人说OLEDB方式也可以,我不搞技术好多年,没试)
连接的部分很容易,但接着发现了一个错误,在SQL2008下,数据窗口的SQL语句,不能在子查询带参数了! SELECT a FROM t1 WHERE a NOT IN (SELECT b FROM t2 WHERE c = :s_name)
比如:,这样的数据窗,以前是可以在运行时,用retrieve("aaa")来给 s_name 传递参数的;但在SQLSERVER2008中编译能通过,实际retrieve时则会出SQL语法错误!,因此必须写成一个字符串,s_sql = 'SELECT a FROM......Where c = ")' + s_name + '" ',然后在代码里 让这个 datawindow.table.select = s_sql.数据窗口的构成语句
我也不知道是我设置错误还是确实如此,反正这样就可以解决问题。记录一下,以免下次又遇到。
文章评论