以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- [原创] 经验谈:关于在狐表中使用SQL语句。 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=1148)
|
-- 作者:wcs
-- 发布时间:2008/11/16 17:09:00
-- [原创] 经验谈:关于在狐表中使用SQL语句。
我用一条语句,来查询会计数据库中的会计凭证,同时引用狐表中的全局变量 vars("账套") 、vars("开始日期")和 vars("结束日期")。 这条代码是可以正确执行的: Dim q As new QueryBuilder q.TableName = "会计凭证查询" q.ConnectionName = “会计数据库” dim s as string s = "select * from [z_tablqpz] where sszt = "&vars("账套")&" and cast(cast(pzrqn as char(4))+\'-\'+cast(pzrqy as char(2))+\'-\'+cast(pzrqr as char(2)) as datetime) between \'"&vars("开始日期")&"\' and \'"&vars("结束日期")&"\'" q.SelectString = s q.Build
如果将\'"&vars("开始日期")&"\' and \'"&vars("结束日期")&"\' 改成 "&vars("开始日期")&" and \'"&vars("结束日期")&" 那是没有执行结果的。 但是,同样是引用全局变量,"&vars("账套")&" , 两边不能有‘’。
为这个搞了几个小时,一直以为SQL语句本身有问题,原来问题出在这个地方。
经验小结:在where 中,如果比较的是列的值,则不用‘’,如果比较的是表达式生成的值,则要用‘’。 我不明白为什么,但这样可以搞定查询。
说明:这条查询用来查询SQL数据库中的会计凭证(几十万条),但源库里的年、月、日是分别以整数存放的,非得将它们整到一起,再用全局变量限制查询结果,没办法,只有用SQL查询来解决问题! SQL查询的功能很强大,有些功能也是狐表无能为力,为此,还是要研究一下SQL查询。
[此贴子已经被作者于2008-11-17 21:46:54编辑过]
|
-- 作者:老有所乐
-- 发布时间:2008/11/16 17:41:00
--
学习
|
-- 作者:gdtgl
-- 发布时间:2008/11/16 18:03:00
--
可能foxtable的语句还没有规范好?楼主试到成功就好了。每个软件的特征是需要了解的(了解脾性,呵)
注:楼主说学sql语言。我也认同sql基本的很值得学,我今天也在试用foxtable写个小管理软件的感想: foxtable是打开表时1次加载....但不同人录单,数据已有变化,就需要使用到sql语言,了解后台数据的变化.(目的是写不重复的,按每年从新开始编号)
foxtable本身的语言+ 简单的sql语言,二者用好。做很多系统根本不成问题了。
另:foxtalbe中的select,与sql语言的select有重复,可能会让初学者有点不适应,以自已第一次看到这个select....以为用sql语法。
|
-- 作者:wcs
-- 发布时间:2008/11/16 19:19:00
--
以下是引用gdtgl在2008-11-16 18:03:00的发言:
注:楼主说学sql语言。我也认同sql基本的很值得学,我今天也在试用foxtable写个小管理软件的感想: foxtable是打开表时1次加载....但不同人录单,数据已有变化,就需要使用到sql语言,了解后台数据的变化.(目的是写不重复的,按每年从新开始编号)
foxtable本身的语言+ 简单的sql语言,二者用好。做很多系统根本不成问题了。
非常认同这个观点,目前狐表是一次性加载数据,集中处理,不能实时更新数据。虽然老六说保存和同步的速度较快(只保存修改了、新增了的行),但我还是感觉慢了!
所以,在狐表中运用一下SQL查询,效率提高不少。
建议,狐表在支持SQL方面,要灵活一些,这个我已多次提出建议了! 建议,帮助文件中关于SQL查询方面的例子多些,深入一些!
|
-- 作者:gdtgl
-- 发布时间:2008/11/16 19:34:00
--
如果不断实时更新数据,不断在后台数据库查找(数据量小没感觉,大了就清楚)。 做到实时估计也不难:foxtable有1个计时器,隔多少时间执行1次。
我要表达意思:sql语言是要学习。(对于数据库管理软件,用什么开发软件都不可能不使用sql语言,在foxtable也1样)
|
-- 作者:wcs
-- 发布时间:2008/11/16 20:32:00
--
数据源中有几十万条数据,计时器每一分钟用SQL查询提取一次,必需限定条件,比如日期、编号等等,否则速度还是吃不消。
这也是我在一楼提到的方法,将全局变量放到sql查询里面。
不过,有时我一分钟也等不了,只有将它放到窗口按键里,手动执行。
|
-- 作者:kylin
-- 发布时间:2008/11/17 8:20:00
--
以下是引用wcs在2008-11-16 17:09:00的发言:
我用一条语句,来查询会计数据库中的会计凭证,同时引用狐表中的全局变量 vars("账套") 、vars("开始日期")和 vars("结束日期")。 这条代码是可以正确执行的: Dim q As new QueryBuilder q.TableName = "会计凭证查询" q.C dim s as string s = "select * from [z_tablqpz] where sszt = "&vars("账套")&" and cast(cast(pzrqn as char(4))+\'-\'+cast(pzrqy as char(2))+\'-\'+cast(pzrqr as char(2)) as datetime) between \'"&vars("开始日期")&"\' and \'"&vars("结束日期")&"\'" q.SelectString = s q.Build
如果将\'"&vars("开始日期")&"\' and \'"&vars("结束日期")&"\' 改成 "&vars("开始日期")&" and \'"&vars("结束日期")&" 那是没有执行结果的。 但是,同样是引用全局变量,"&vars("账套")&" , 两边不能有‘’。
为这个搞了几个小时,一直以为SQL语句本身有问题,原来问题出在这个地方。
经验小结:在where 中,如果比较的是列的值,则不用‘’,如果比较的是表达式生成的值,则要用‘’。 我不明白为什么,但这样可以搞定查询。
说明:这条查询用来查询SQL数据库中的会计凭证(几十万条),但源库里的年、月、日是分别以整数存放的,非得将它们整到一起,再用全局变量限制查询结果,没办法,只有用SQL查询来解决问题! SQL查询的功能很强大,有些功能也是狐表无能为力,为此,还是要研究一下SQL查询。
先收藏经验,以后有用,顶一个,呵呵
|
-- 作者:狐狸爸爸
-- 发布时间:2008/11/17 9:45:00
--
呵呵,foxtable并没有自己的sql语法的,sql的语法完全由你自己使用的后台数据库决定。
动态合成sql语句的时候,必须保证所合成的语句符合sql语法,而检察的方法也很简单,在命令窗口:
dim s as string s = "select * from [z_tablqpz] where sszt = "&vars("账套")&" and cast(cast(pzrqn as char(4))+\'-\'+cast(pzrqy as char(2))+\'-\'+cast(pzrqr as char(2)) as datetime) between \'"&vars("开始日期")&"\' and \'"&vars("结束日期")&"\'" output.show(s)
大多数时候,目测输出的语句,即可看出问题所在,实在不行,将输出的语句复制到查询表定义窗口进行测试。
|
-- 作者:shxiaoya
-- 发布时间:2008/11/17 10:11:00
--
sql语句中日期要用单引号印起来,楼主开始的公式不符合sql语法当然就查不出来了。
|
-- 作者:kylin
-- 发布时间:2008/11/17 10:17:00
--
以下是引用狐狸爸爸在2008-11-17 9:45:00的发言:
呵呵,foxtable并没有自己的sql语法的,sql的语法完全由你自己使用的后台数据库决定。
动态合成sql语句的时候,必须保证所合成的语句符合sql语法,而检察的方法也很简单,在命令窗口:
dim s as string s = "select * from [z_tablqpz] where sszt = "&vars("账套")&" and cast(cast(pzrqn as char(4))+\'-\'+cast(pzrqy as char(2))+\'-\'+cast(pzrqr as char(2)) as datetime) between \'"&vars("开始日期")&"\' and \'"&vars("结束日期")&"\'" output.show(s)
大多数时候,目测输出的语句,即可看出问题所在,实在不行,将输出的语句复制到查询表定义窗口进行测试。
2个好办法,顶
|