问题1,将SQL7的客户端网络设置,设置为NAMED PIPES,并将服务器所在的机器名在配置中写好.问题2,参考使用动态SQL语法3 来处理. DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ; PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject} ; OPEN DYNAMIC Cursor {USING ParameterList} ; EXECUTE DYNAMIC Procedure {USING ParameterList} ; FETCH Cursor | Procedure INTO HostVariableList ; CLOSE Cursor | Procedure ;具体就是: string ls_sql DECLARE cur_unright DYNAMIC CURSOR FOR SQLSA ; ls_sql = "select menu_item.menu_id from menu_item where menu_item.menu_id not in (select menu_right.menu_id from menu_right where menu_right.user_id=? order by menu_id " PREPARE SQLSA FROM :ls_sql ; OPEN DYNAMIC cur_unright using :gs_userid ; fetch cur_unright into :ls_menuid; .. ............. .. close cur_unright;
谢谢met(金属羊),但问题仍然存在: 问题1,在客户端的ODBC中设置数据源,设置为NAMED PIPES根本就连不通,只有设置为TCP/IP才出现我说的现象:第一次不行,第二次又可以。问题2,按你写的代码,执行OPEN DYNAMIC cur_unright using :gs_userid ;后sqlca.sqlcode返回是-1,错误信息为“语法错误或访问冲突”。该如何解决?
同样的程序,连SQL anywhere就没问题,连SQL Server就不行,不知怎么回事?
问题1,干吗一定用ODBC?专用接口不好?问题2,那就这样写: string ls_sql DECLARE cur_unright DYNAMIC CURSOR FOR SQLSA ; ls_sql = "select menu_item.menu_id from menu_item where menu_item.menu_id not in (select menu_right.menu_id from menu_right where menu_right.user_id='"+ gs_userid+"' order by menu_id " PREPARE SQLSA FROM :ls_sql ; OPEN DYNAMIC cur_unright ; fetch cur_unright into :ls_menuid; .. ............. .. close cur_unright;
ls_sql = "select menu_item.menu_id from menu_item where menu_item.menu_id not in (select menu_right.menu_id from menu_right where menu_right.user_id='"+ gs_userid+"') order by menu_id "我这句话少写了一个右刮号,你看看现在放的位置对不对?然后用这句来用.
多谢met(金属羊),按你提供的语句,第二个问题已经解决!第一个问题呢?改成直连一样不行。
问题一: 1.PB中可以连接吗?sql server端配置的是什么协议?name/pipe or tcp/ip 2.数据库有冲突吗? 3.isql/w都可以连通吗? 如果上面问题解决,连接中 怎么用do while循环处理?连接不上就退出贝。
DECLARE Cursor | Procedure DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea ;
PREPARE DynamicStagingArea FROM SQLStatement {USING TransactionObject} ;
OPEN DYNAMIC Cursor {USING ParameterList} ;
EXECUTE DYNAMIC Procedure {USING ParameterList} ;
FETCH Cursor | Procedure INTO HostVariableList ;
CLOSE Cursor | Procedure ;具体就是:
string ls_sql
DECLARE cur_unright DYNAMIC CURSOR FOR SQLSA ;
ls_sql = "select menu_item.menu_id from menu_item where menu_item.menu_id not in (select menu_right.menu_id from menu_right where menu_right.user_id=? order by menu_id "
PREPARE SQLSA FROM :ls_sql ;
OPEN DYNAMIC cur_unright using :gs_userid ;
fetch cur_unright into :ls_menuid;
..
.............
..
close cur_unright;
问题1,在客户端的ODBC中设置数据源,设置为NAMED PIPES根本就连不通,只有设置为TCP/IP才出现我说的现象:第一次不行,第二次又可以。问题2,按你写的代码,执行OPEN DYNAMIC cur_unright using :gs_userid ;后sqlca.sqlcode返回是-1,错误信息为“语法错误或访问冲突”。该如何解决?
string ls_sql
DECLARE cur_unright DYNAMIC CURSOR FOR SQLSA ;
ls_sql = "select menu_item.menu_id from menu_item where menu_item.menu_id not in (select menu_right.menu_id from menu_right where menu_right.user_id='"+ gs_userid+"' order by menu_id "
PREPARE SQLSA FROM :ls_sql ;
OPEN DYNAMIC cur_unright ;
fetch cur_unright into :ls_menuid;
..
.............
..
close cur_unright;
1.PB中可以连接吗?sql server端配置的是什么协议?name/pipe or tcp/ip
2.数据库有冲突吗?
3.isql/w都可以连通吗?
如果上面问题解决,连接中
怎么用do while循环处理?连接不上就退出贝。
1.sql server端配置的是tcp/ip,并且只能是tcp/ip,用name/pipe不行。在PB7的Database Profiles里作连接也是一样,须连接两遍,即第一遍连接不上,再连一次就可以了,若连接上了后断开连接(不是退出PB,若退出PB又须连两遍才能连上)再连,又能连接正常!
2.数据库有冲突是什么意思?能解释一下吗?
3.用isql/w怎么连啊?
4.连接中用do while循环处理主要是我想看看连几遍能连上,没有别的意思。再次谢谢!
DBMS=?LOGID=?等等
SQLCA.DBMS = "MSS Microsoft SQL Server 6.x"
SQLCA.Database = "swnet"
SQLCA.LogPass = "password"
SQLCA.ServerName = "huaxu-server"
SQLCA.LogId = "sa"
SQLCA.DBParm = ""
select czymc into: ls_czymc from student_czy where czydm = 10 using sqlca;
messagebox("",ls_czymc)
结果什么也没有啊
如果有IPX协议就删除IPX协议.
NETBUI协议如果没有,请安装.另外该程序换其他机器运行运行,看是机器问题还是本身软件问题.
建议用直连驱动,不要用ODBC~~
连2次的问题是因为延迟~~
2、拼写、格式问题~~