休斯顿我们遇到了问题!
嗨伙计们,我正在尝试提高应用的性能。我试图做的只是准备一次sql语句,之后只需更改要执行的参数即可。没有准备另一个时间。
为此我写了这段代码。它运行!
// Show Items' Note
If not DataModule_SmCube.SQLQuery_Notes.Prepared Then
Begin
// Se o campo note possuir até 8190 bytes, retorna como Varchar, caso contrário como Blob - Gambiarra Carlos H. Cantú
DataModule_SmCube.SQLQuery_Notes.ReadOnly:=True;
DataModule_SmCube.SQLQuery_Notes.SQL.Clear;
DataModule_SmCube.SQLQuery_Notes.SQL.Add('SELECT sourceItemID, iif(octet_length(items.note) <= 8190, cast(items.note as varchar(8190)),null) as blob_txt, iif(octet_length(items.note) > 8190, items.note, null) as blob_blob FROM items WHERE item = :item;');
DataModule_SmCube.SQLQuery_Notes.Prepare;
End;
DataModule_SmCube.SQLQuery_Notes.Close;
DataModule_SmCube.SQLQuery_Notes.Params.ParamByName('item').AsString := Main.GridView_Notes.Columns.Items[0].Field.Text;
DataModule_SmCube.SQLQuery_Notes.Open;
但是当我跟踪服务器活动时(使用FB Tracemanager),我看到每次打开查询时它都会自动准备它。
我错过了什么?我需要做些什么才能改变这种行为?这是组件问题吗?我使用SQLdb本机lazarus组件1.6 + Free pascal 3.0
P.S。如果我不调用Close和Open过程,则查询不会更新...