2014-09-26 145 views
0

嗨我忙于一个学校的项目,并想知道我无法工作的东西。SQL更新声明(语法)错误

我有一个名为Users的表的数据库和一个名为Animals的数据库,它们与关系链接。在Animal表中有一个名为UserID的列,并且它链接到用户的名称。我想要做的是让用户有能力采用尚未被采用的动物。在他们可以采用的页面上是与动物表相关的dbedits,它们显示一个动物的所有信息,当您使用dbnavigator时,您将转到下一个动物等。DBedits显示指定动物的列值。一个dbedit显示动物是否被采纳,当你点击它旁边的采纳按钮时,它表示动物是否被采纳,如果不是,你可以采用它。当它不被采用时,用户可以将他的名字放在一个InputBox中,并且这个名字我想放在动物表中,它表​​示用户ID,因为如果你查看用户表,在用户旁边有一个“+”图标,当你点击采用动物的用户的“+”图标时,它应该显示相关动物的信息。在采纳按钮后面,我通过输入框获取用户名,并将其放入一个名为username的变量中,并将动物名称与其中一个dbedits相关联,并将其放入名为nameofanimal的变量中。然后,我想将动物表中的用户标识更改为用户的名称,其中动物的名称= nameofanimal,但它不起作用。我使用ADOQRY,这里是我使用的SQL更新代码,

qryDBV.sql.Text := 'UPDATE Animals SET Adopted = Yes AND UserID = '''+username+''' WHERE (('''+nameofanimal+'''[Adopted] = false)'; 
    qryDBV.ExecSQL; 
    qryDBV.Active := false; 
    qryDBV.sql.Text := 'SELECT * FROM Animals'; 
    qryDBV.Active := true; 
    end; 
+0

当您远离报价条款'和'是'使用where'条款和'YES'是需要被引号包围。 – 2014-09-26 11:05:17

回答

0

更改您的第一行用这个.. 并在where子句中只有... 因此,代码会是这样使用..

qryDBV.sql.Text := 'UPDATE Animals SET Adopted = Yes , UserID = '''+username+''' WHERE (('''+nameofanimal+'''[Adopted] = false)'; 
+0

我仍然得到相同的错误信息,delphi强调了这一行,qryDBV.Active:= false; – Jano 2014-09-26 11:31:34

0
  1. 始终把引号的字符串。
  2. 不要使用,并在您SET子句,但在其中,如果需要
  3. 需要

qryDBV.sql.Text := 'UPDATE Animals SET Adopted = 'Yes', UserID = \''+username+'\' WHERE (\''+nameofanimal+'\'[Adopted] = false)';