Delphi:无法在封闭数据集(XE6)上执行此操作

时间:2014-07-30 08:47:03

标签: sql database delphi dataset syntax-error

我有一小段代码可以在输入一个代码时从数据库中获取相应的值,也就是说,在这样的数据库中

Code     Name

 1        A

 2        B

 3        C

在代码区域输入1时,它返回A,如果在名称区域中输入B,则返回2.

我可以使用以下代码使其正常工作,但会弹出一条错误消息,显示“无法对已关闭的数据集执行此操作”

有谁知道如何解决这个问题?任何帮助,将不胜感激。感谢

procedure TStock_Bookkeeping.Stock_Code_ValueChange(Sender: TObject);
begin
  Price_Per_Share_Value.Text := GetCurrentPrice(Stock_Code_Value.text);
  ExecuteSQL_CodeToName(Stock_Code_Value.Text);
end;

procedure TStock_Bookkeeping.Stock_Name_ValueChange(Sender: TObject);
begin
  ExecuteSQL_NametoCode(Stock_Name_Value.Text);
end;

procedure TStock_Bookkeeping.ExecuteSQL_CodeToName(const inCode: string);
var
  query : TFDQuery;
begin
  query := TFDQuery.Create(nil);
  try
    ConnectToSQLite;
    query.Connection := FDConnection1;
    query.SQL.Text := 'SELECT * FROM Code_Name where Code =' + '"' + inCode + '"' ;
    query.Active := True;
    query.Open();

    while not query.Eof do
    begin
      Stock_Name_Value.text := query.FieldByName('Name').AsString;
      query.Next;
    end;
  finally
    query.Close;
    query.DisposeOf;
  end;
end;

procedure TStock_Bookkeeping.ExecuteSQL_NameToCode(const inName: string);
var
  query : TFDQuery;
  memTable : TFDMemtable;
begin
  query := TFDQuery.Create(nil);
  try
    ConnectToSQLite;
    query.Connection := FDConnection1;
    query.SQL.Text := 'SELECT * FROM Code_Name where Name ='+'"'+ inName+'"';
    query.Active := True;
    query.Open();

    while not query.Eof do
    begin
      Stock_Code_Value.text := query.FieldByName('Code').AsString;
      query.Next;
    end;

  finally
    query.Close;
    query.DisposeOf;
  end;
end;

1 个答案:

答案 0 :(得分:1)

设置断点并遍历代码(F7):

当您更改Stock_Code_ValueChange的值时,如果Stock_Code_Value事件已连接到Stock_Code_Value.Text编辑框,则您正在更改Stock_Name_Value.Text的值,然后触发Stock_Name_ValueChange 1}}事件,但您尚未完成Stock_Code_ValueChange事件。

添加Stock_Name_ValueOnChange := nil作为Stock_Code_ValueChange程序的第一行,Stock_Name_ValueOnChange := Stock_Name_ValueChange作为程序的最后一行,以阻止Stock_Name_ValueChange事件被触发{ {1}}事件正在处理中。

然后对Stock_Code_ValueChange事件做相反的事情。