以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  连接sql server的代码导致整个公式都不执行  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=182397)

--  作者:popypopy
--  发布时间:2020/9/29 0:15:13
--  连接sql server的代码导致整个公式都不执行
我在公式里想添加连接sql server数据库做数据存储和查询,但是一加入数据库的语句,整个公式就不执行和显示任何结果了。我尝试了ODBC、DSN less这两种连接方式,都不行。我已经验证确认数据库是可以通过其他方式比如web程序连接和查询的,也就是说服务器的地址、数据库名、用户名和密码等设置都是正确的

以下是连接数据库的两种代码:
DATABASE(\'provider=MSDAORA;Data Source=9BC2\\SQLEXPRESS;User ID=sa;Password=xxxxx;\');
DBTABLE(\'Select top 1 * From tupe Order By ID\');
cc:=DBVALUE(\'stkname\');  
DBREADTYPE(1);
上述代码中我把provider改成Sqloledb也不行。

ODBC的连接代码:
DATABASE(\'Data Source=stk;UID=sa;PWD=1qaz@WSX;\');
DBTABLE(\'Select top 1 * From tupe Order By ID\');
cc:=DBVALUE(\'stkname\');  
DBREADTYPE(1);

把连接数据库的代码去掉后公式就能够正常执行和显示结果

--  作者:无为剑
--  发布时间:2020/9/29 8:51:47
--  
数据库功能需要收费版才能支持,另外你试试改到Access数据库看看呢?看看是都不行还是就只是Sql server不行
--  作者:popypopy
--  发布时间:2020/9/30 4:46:37
--  
连接access数据库也不行
--  作者:popypopy
--  发布时间:2020/10/13 8:39:33
--  
我现在已经开通了金字塔信达证券版专业版的模拟交易,可以使用专业版的功能了,但是发现还是不能连接sql server。以下是连接sql server的代码范例:
DATABASE(\'driver=9BC2\\SQLEXPRESS;Server=127.0.0.1;DATABASE=stock;UID=sa;PWD=xxxxx\');
DBTABLE(\'Select top 1 * From tupe Order By ID\');
cc:=DBSTRING(\'stkname\'); 
DBREADTYPE(1);   

只要一加入这段代码,策略就不执行了,信息窗口什么都不输出

--  作者:无为剑
--  发布时间:2020/10/13 8:48:54
--  
光是上面的信息我们无法帮你看到问题的,因为我们也不知道你的数据库信息和表信息是否有异常,你可以看一下我们提供的数据库ACCESS范例,完全按照范例上的运行看看,逐步排查问题。

利用数据库扩充金字塔的数据存放及分析能力
http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=401

--  作者:popypopy
--  发布时间:2020/10/13 12:32:16
--  
access数据库按照论坛帖子里的指南可以连接。

但sql server就是连接不上,而且我的sql server通过web服务是可以访问的,可以正常输出数据。
我把帖子范例中的test.mdb导入到sql server中生成了同样名称的数据库test, 里面也添加了同样名称的表SH600000, 通过web服务也可以访问,但是在金字塔里就不行

能否再帮我分析下我的连接字符串有什么问题:
DATABASE(\'driver={SQL Server};Server=127.0.0.1;DATABASE=test;UID=sa;PWD=xxxx);
//检索数据库表
DBTABLE(\'Select * From SH600000 Order By StockDate desc\');
//读取STOCKCLOSE字段数据 
cc:DBVALUE(\'STOCKCLOSE\'); 

我的sql server服务器名是:9BC2\\SQLEXPRESS


[此贴子已经被作者于2020/10/13 12:33:09编辑过]

--  作者:popypopy
--  发布时间:2020/10/13 13:31:21
--  
另外连接access数据库还遇到一个问题,用范例的中的代码
DATABASE(\'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\stk\\test.mdb\'); 
DBTABLE(\'Select * From SH600000 Order By StockDate desc\');
cc:DBVALUE(\'STOCKCLOSE\');  

msgout(1,numtostr(cc,2));

我只能读取和输出第一条数据 而不是完整的数据集。
我尝试用msgout(1,numtostr(cc[3],2)); 想输出第3条数据,但显示的还是第一条数据的值
怎样写才能循环输出所有的数据?

--  作者:无为剑
--  发布时间:2020/10/13 17:13:04
--  
1,Server=127.0.0.1 这个是表示本地的服务器数据库连接,你测试时是在数据库的服务器上吗?否则的话这里你要写上SERVER的服务器地址。
2,改用逐K线运行模式输出整个数据集

--  作者:popypopy
--  发布时间:2020/10/13 19:34:40
--  
1. sql server就是安装在本机的,所以地址用的是127.0.0.1
2. 是运行在逐k线模式下的,但是数据集只能输出第一条。

--  作者:无为剑
--  发布时间:2020/10/13 21:11:16
--  
1, 这个问题我们就无法帮你解决了,你可以使用其他工具使用ADO调用的方式看看能否正常连接你的SQL服务器。比如VB,VC等开发工具

2,逐k线模式下,你直接这样输出,不要指定数组
msgout(1,numtostr(cc,2));


[此贴子已经被作者于2020/10/13 21:11:37编辑过]