此查询当前没有返回任何结果,它应该。你能看到这个查询有什么问题吗
字段标题为NEED_2_TARGET,ID和CARD
NEED_2_TARGET =整数
CARD = string
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
答案 0 :(得分:3)
有很多事情可能会出错。
在您的故障排除中,首先也是最重要的是接受您的查询并直接针对您的数据库运行它。即首先通过消除其他错误的可能性来确认您的查询是正确的。更多的事情证实了工作,更少的“噪音”分散你的注意力来解决问题。
Close
和Open
您的查询,您可能正在查看先前执行的结果集。
Active
时更改查询文本,甚至是否依赖于您正在使用的数据访问组件。关键是,值得检查。...CARD = "'+name+'" ORDER...
而是使用...CARD = '''+name+''' ORDER...
CARD
列的数据类型。如果它是固定长度的字符串,则将填充数据值。例如。如果CARD
为char(10)
,那么您实际上可能需要查找'Ash Imp '
。
SELECT * FROM Spells WHERE CARD LIKE '%Ash Imp%'
是否有效。最后,正如其他人所建议的那样,您最好使用参数化查询,而不是自己动态构建查询。
答案 1 :(得分:2)
@GordonLinoff db中的所有字段都是大写
如果确实如此,那就是你的问题。 SQL通常会对字符/字符串值进行区分大小写的比较,除非您告诉它不要这样做,例如使用STRCMP()
(MySQL 4 +),LOWER()
或UPPER()
(SQLServer,Firebird)等等。我也会把括号中的条件包括在内:
sql.Text := 'SELECT * FROM Spells WHERE (NEED_2_TARGET = 1) AND (STRCMP(CARD, "'+name+'") = 0) ORDER by ID';
sql.Text := 'SELECT * FROM Spells WHERE (NEED_2_TARGET = 1) AND (LOWER(CARD) = "'+LowerCase(name)+'") ORDER by ID';
sql.Text := 'SELECT * FROM Spells WHERE (NEED_2_TARGET = 1) AND (UPPER(CARD) = "'+UpperCase(name)+'") ORDER by ID';
答案 2 :(得分:1)
这是
的问题With Adoquery2 do
begin
...
end
在sql中使用name
时,它真的得到adoquery2.name
而不是var名称。我通过将name
更改为Cname
来解决此问题。之后没有更多问题。