关于对ACCESS数据库进行SQL查询时参数的问题(300分)

  • 主题发起人 主题发起人 萧月禾
  • 开始时间 开始时间

萧月禾

Unregistered / Unconfirmed
GUEST, unregistred user!
近日在写一个DEMO的时候,使用ACCESS数据库。
在对该数据库表进行操作的数据集控件如ADODataSet中
写以下代码:
Select * from TableName
Where @Flag
其中@Flag为一布尔型参数,在Parameters属性中对它进行设置

开始给该参数赋值“False”,然后执行查询(ADODataSet.Active:=True)
返回0记录集合(正确);

然后再给该参数赋值“True”,然后执行查询
返回TableName表的所有记录(正确);

但再次给该参数赋值“False”,然后执行查询
仍然返回TableName表的所有记录(错误);

最后发现在这里只要是布尔型的参数,一旦给它赋值为True
它就一直是True了,甚怪哉

后来我用这样的方法
Select * from TableName
Where @Flag = 1

这时@Flag是整数型参数,只要设置它是否为1则达到正确的查询目的

但我还是不了解为什么布尔型的参数会那样?
大家是否也曾遇到过这种情况?


 
参数不是 flag = :flag这样写的吗?
 
不知道ADODataSet 如何解释和传送“ Where @Flag(布尔型参数)” 的,我这里没装ACCESS数据库,
否则会直接在ACCESS的查询中试一下 Select * from TableName Where @Flag 的结果,
这样就大概知道问题出在什么地方了。

 
sql 并不知道 @Flag 是布尔类型
 
刚才研究了一下,确实如你说的,我使用Select * From TableName Where Flag=:Flag
则不会出现你说的情况,上述的情况是在代码中,如果直接在Delphi编译器中则使用
Flag=:Flag会报一个类型不匹配的错误,只要将Parameters中的DataType属性改一下然后
保存,再改回来保存一下就好了.按照这个思路我试了一下使用
Select * From TableName Where @Flag,在
设置了为True后,然后更改Parameters中的DataType属性保存,然后在改为ftBoolean
就可以了.看来是没有来得及更新.[:)]
 
0和1 好像就能达到查询的目的
 
不知道你有没有修改Access中boolean 字段的格式?
如果为“真/假”则“True的值等于–1, False的值等于0。”

 
飘摇客,应该还是不行罢,我一开始就把参数的属性设好了
它的问题是赋了一次True值后,该参数值就一直为True了

kunmeng,我在Delphi中该控件的参数属性设置其默认值,输入0、-1,它自动会转为
False和True,而在程序中最开始对该参数直接赋值False或True是可以的

 
刚开始将属性设置为True是一直为True的,但是如果在编辑器环境再更改一下
Parameters的DataType,保存一下,然后再改回来,这时候设置为
False后就不会出现你说的情况了.就查不出数据了.
认为是DataType没有及时更新.
 
access中的“是/否”
有3类: 真/假 True
是/否 Yes
开/关 On
要对应才行。
 
接受答案了.
 
后退
顶部