我有一小段代码可以在输入一个代码时从数据库中获取相应的值,也就是说,在这样的数据库中
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;
答案 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
事件做相反的事情。