2015-02-06 25 views
0

我试图在Adobe AIR这里传递一个不为空值sqlite的参数在AS3桌面, 是代码示例:在AS3不为空的SQL语句

stat.text = "SELECT * FROM people, WHERE gender = @gender AND year = @year AND month = @month"; 
stat.parameters["@gender"] = genderBox.value; 
stat.parameters["@year"] = year.text; 
stat.parameters["@month1"] = month.text; 

其中genderBox是一个组合框当然男性和女性的其他值都是文本框。我想使genderBox具有3个值,第三个是男性和女性,所以当用户选择两个语句时,选择男性和女性我都希望它传递类似非空值的东西,并选择该列中的所有内容,但选择其他列月份和年份

+0

所以,你要运行没有'WHERE gender = @ gender'的查询?你为什么不那样做? – 2015-02-06 18:43:01

+0

@CL。那么我不能删除,因为有时我想让用户选择一个性别而不是两个,有时甚至是所有的记录 – 2015-02-06 19:15:43

回答

2

为什么不分两步创建语句?

stat.text = "SELECT * FROM people WHERE year = @year AND month = @month"; 
if (genderBox.value) { 
    stat.text += " AND [email protected]"; 
    stat.parameters["@gender"] = genderBox.value; 
} 

我不知道stat.text是否可以这样附加,但我认为这个想法很清楚。

如果你仍想保留它在一块,改变平等的非平等这样的:

stat.text = "SELECT * FROM people WHERE gender != @gender AND year = @year AND month = @month"; 

使用帕拉姆@gender也将反向的逻辑。如果您的genderBox返回“男性”,则查询将搜索所有女性。如果它返回“女性”,它会搜索男性。要搜索全部,只需传递一个不存在的值。所以这将需要改变性别框的逻辑,它会变得混乱。实际上这不是一个好方法。

UPDATE

如果你可以使组合框返回一个逗号分隔的列表,如“男,女”作为第三个值,可以使用下面的查询:

SELECT * FROM people WHERE gender in(@gender)... etc 
+0

谢谢我认为第一个选项是最好的,它甚至似乎在其他值的工作,当超过那些两个像他们的工作或其他任何东西,但没有尝试,所以我会尝试任何给你我的结果。
第二种解决方案是好的,也许我会尝试它,如果第一个不会工作,但关于第三个我完全不能理解 – 2015-02-06 21:15:36

+0

谢谢@andrei-nikolaenko第一个解决方案很好 – 2015-02-07 08:12:14

+0

第三个解决方案是标准SQL语法:“(1,2,3 ...)中的性别”表示它将搜索与列表中的任何值匹配的所有内容。所以你的组合框应该返回“男性”,“女性”或“男性,女性”。 – 2015-02-07 12:42:02