【发布时间】:2014-09-21 20:02:25
【问题描述】:
我有一小段代码,输入时从数据库中获取对应的值,也就是像这样的数据库中
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;
【问题讨论】:
-
我们无法从这里看到您的屏幕 - 您在哪一行确切收到错误消息?
-
我在编译时没有任何错误,实际上我在运行时得到了结果,除了弹出“无法在关闭的数据集上执行此操作”消息...感谢您的回复: )
-
我不会设置
Active属性。我只需分配一个连接、SQL 查询并调用Open。此外,无需在finally块中调用Close。如果引发异常(并且数据集不会打开),您将关闭已关闭的数据集。此外,花时间学习如何使用参数。您的代码现在容易受到 SQL 注入攻击。 -
请确保您编辑您的 q 以回答 Copilot 的评论。此外,我没有遵循您在“while not query.eof”循环中尝试执行的操作 - 您似乎正在通过 each 行的字段值覆盖 Stock_Name_Value 和 Stock_Code_Value 的 .text 属性,而不仅仅是其中之一。
-
你为什么同时使用
Active := True(打开查询)和Open;(尝试再次打开已经打开的查询)?
标签: sql database delphi dataset syntax-error