【发布时间】:2014-01-26 01:02:00
【问题描述】:
此查询当前没有返回任何结果,它应该返回。你能看出这个查询有什么问题吗
字段标题为 NEED_2_TARGET、ID 和 CARD
NEED_2_TARGET = 整数
卡片 = 字符串
ID = 整数
名字的值是'Ash Imp'
{this will check if a second target is needed}
//**************************************************************************
function TFGame.checkIf2ndTargetIsNeeded(name: string):integer;
//**************************************************************************
var
targetType : integer; //1 is TCard , 2 is TMana , 0 is no second target needed.
begin
TargetType := 0;
Result := targetType;
with adoquery2 do
begin
close;
sql.Clear;
sql.Add('SELECT * FROM Spells WHERE CARD = '''+name+''' and NEED_2_TARGET = 1');
open;
end;
if adoquery2.RecordCount < 1 then
Result := 0
else
begin
Adoquery2.First;
TargetType := adoquery2.FieldByName(FIELD_TARGET_TYPE).AsInteger;
result := TargetType;
end;
end;
sql db 如下所示
ID CARD TRIGGER_NUMBER CATEGORY_NUMBER QUANTITY TARGET_NUMBER TYPE_NUMBER PLUS_NUMBER PERCENT STAT_TARGET_NUMBER REPLACEMENT_CARD_NUMBER MAX_RANDOM LIFE_TO_ADD REPLACED_DAMAGE NEED_2_TARGET TYPE_OF_TARGET
27 Ash Imp 2 2 15 14 1 1
【问题讨论】:
-
显示你的数据来证明你的假设。
-
请编辑您的问题以提供应该匹配但不匹配的数据。此外,如果您使用参数化查询,它们的执行速度会更快(它们只编译一次),并且您可以消除所有
"'+name+'"垃圾。您也不应该在没有SQL.Clear的情况下首先使用SQL.Add,如果您使用的是单个语句,则可以使用SQL.Text将整个SQL 语句替换为一行代码。Add附加到现有 SQL 的末尾,这意味着您可能没有按照您的想法执行。 -
我知道它没有返回任何结果,因为我跟踪扔了它,当我到达
if adoquery2.RecordCount < 1 then Result := 0它给我结果 0 -
这看起来不像“字段是 NEED_2_TARGET、ID 和 CARD”,以及您对 Gordon 的回复(他说“比较 值 时访问区分大小写”)是“数据库中的所有字段都是大写” - “Ash Imp”对我来说似乎不是全部大写。话虽如此,根据您提供的信息,我认为您的查询没有任何问题(假设现在是准确的)。
-
@GordonLinoff re:“比较值时访问区分大小写” - 不,不是。看here。