有两个数据表,DataSet.db ,和 temp_meas.db ,两个表都有Pat_ID,Counter字段,而且temp_meas.db
有且仅有这两个字段,想从Dataset.db中选出与temp_bh相同的Pat_ID, copy到temp_meas.db中, 语句如下,问题1:运行时出现错误提示对话框:Error Creating cursor handle.
问题2:temp_bh是一个变量,保存用户选择的一个人的编号,如代码所示,想把它与字段Pat_ID比较,构成where子句,但不知道该如何写到SQL语句中?
请各位教我?谢谢! implementationuses Diagnosis, Details, patient_choice, Sele_measure;var
  TempQuery:TQuery;{$R *.dfm}.
.
.
procedure TPat_Data_Form.XP_Button3Click(Sender: TObject);
var
  TempString:String;
.
.
.
TempQuery:=TQuery.Create(Self);
TempQuery.RequestLive:=True;
TempQuery.Close;
TempQuery.SQL.Clear;
  TempString:= ' Insert Into temp_meas ';              //1
  TempString:=TempString+' Select Pat_ID,Counter ';
  TempString:=TempString+' from DataSet.db where Pat_ID='+trim(temp_bh);
  TempQuery.sql.text :=TempString;
  TempQuery.Open;
.
.
.By the way, 如果将其中一句(//1)改为:
  TempString:= ' Insert Into temp_meas Pat_ID,Counter ';
出现的错误提示框变成:Invalid use of keyword.
Token:Pat_ID,Counter
Line Number:1.

解决方案 »

  1.   

    sorry,execsql,我觉得应该是这儿的问题
      

  2.   

    谢谢涛涛,你的很对。但是又出来一个新问题:
    本来应该检索出两条记录的,可是只有一条被Insert 到目的数据表里,这又是怎么一回事呢?
      

  3.   

    有点奇怪,再看看你用该条件sql查出来的记录数。
      

  4.   

    DataModule1.Table2.First;   // DataSet.DBTempString:= ' Insert into temp_meas ';
    TempString:=TempString+' Select Pat_ID,counter,StartDate,TotalCount,ErrorCount ';
    TempString:=TempString+' from DataSet.db where Pat_ID='+''''+temp_bh+'''';
    TempQuery.sql.text :=TempString;
    TempQuery.ExecSQL;现在的代码是这样的了,明明DataSet.db中有两个Pat_ID=001的记录,可是当给temp_bh赋
    001后,用上面的SQL只找得到一条记录,怎么可能有这种情况?奇怪奇怪真奇怪,到底问题在哪呢???
      

  5.   

    有什么办法知道查询得到的结果是两条?
    SQL刚学,很生疏
      

  6.   

    把Insert into temp_meas 去掉
    用open(返回结果集)
    或者在运行时跟踪一下这个字符串的值,取select之后的字符串,在sqlexplore里执行看看。
      

  7.   

    按你的方法做了,把Insert into 去掉了,发现返回结果是两条,但为什么只有一条Insert成功呢?
      

  8.   

    是关键字段的问题,Insert...into可以一次插入若干条记录。