Adsquery Handle错误

时间:2014-01-15 00:42:46

标签: sql lazarus

在Lazarus IDE 1.014中使用TAdsquery组件(11.1),并在字符串编辑器中使用以下语法。只有在设计模式下,查询才能在DBgrid中正常工作并设置为活动状态。它也适用于Advanatge Data Archetect。 但是,尝试在compliation期间或之后从代码中打开它,代码或组件给我“无法获得句柄错误”。 (尝试过两种方式)检查所有表格,看起来没问题。 (查询中涉及4个表)。以下是字符串编辑器中的查询:     选择     FOOD_DES.Long_Desc,     NUTR_DEF.NutrDesc,     NUT_DATA.Nutr_No,     NUT_DATA.Nutr_Val,     NUT_DATA.Num_Data_Pts,     NUT_DATA.Std_Error,     NUT_DATA.Src_Cd,     NUT_DATA.Deriv_Cd,     SYNC.NDB_no作为NDB_no1     从     FOOD_DES内部加入     SYNC On FOOD_DES.NDB_No = SYNC.NDB_no,     NUTR_DEF,     NUT_DATA     哪里     NUTR_DEF.Nutr_No = NUT_DATA.Nutr_No和     NUT_DATA.NDB_No = SYNC.NDB_no     订购     NDB_no1

这是我尝试用代码打开它,但我得到了相同的'句柄错误'

adsQuery1.Close;{close the query}
//assign new SQL expression
adsQuery1.SQL.Clear;
adsQuery1.SQL.Add ('Select   FOOD_DES.Long_Desc,NUTR_DEF.NutrDesc,NUT_DATA.Nutr_No,NUT_DATA.Nutr_Val,NUT_DATA.Num_Data_Pts,NUT_DATA.Std_Error,NUT_DATA.Src_Cd,NUT_DATA.Deriv_Cd,SYNC.NDB_no As NDB_no1');
adsQuery1.SQL.Add ('FROM FOOD_DES Inner Join SYNC On FOOD_DES.NDB_No = SYNC.NDB_no, NUTR_DEF,NUT_DATA');
adsQuery1.SQL.Add ('WHERE NUTR_DEF.Nutr_No = NUT_DATA.Nutr_No And NUT_DATA.NDB_No = SYNC.NDB_no');
adsQuery1.RequestLive := true;
adsQuery1.Open;

任何帮助将不胜感激。不确定我是否在属性对话框和/或代码中正确设置了所有参数。组件是Adsquery1链接到Datasource13和DBgrid1。

1 个答案:

答案 0 :(得分:0)

当您使用'where'语句时,这必须是一个有利的参数查询。 您需要在对象检查器中首先设置参数(在本例中为字符串和输入),然后将其作为指南。

AdsQuery1.Params[0].AsString := (ndb);
AdsQuery1.Params[1].AsString := (nut_num);
AdsQuery1.SQL.Text := 'SELECT  tablename field etc
WHERE age = ndb_no =:ndb and nutr_no = :nut_num';
AdsQuery1.Open;
DataSource1.DataSet := AdsQuery1; (datasource could be connected to a grid)