在C++BUILER中如何把查询的结果存入一个临时表?请教DELPHI的老师们(100分)

  • 主题发起人 主题发起人 yanzi_wy
  • 开始时间 开始时间
Y

yanzi_wy

Unregistered / Unconfirmed
GUEST, unregistred user!
在一个FORM中用QUERY查询的结果如何存到一个已经建好的表里去?
QUERY是动态查询,在BUTTON事件中调用,如下:
void __fastcall TfrmSearch::btnOKClick(TObject *Sender)
{
dm->qrySearch->Close();
dm->qrySearch->SQL->Clear();
switch(cmbMethod->ItemIndex)
{
case 0: dm->qrySearch->SQL->Add("Select * from CustomerInfo");
dm->qrySearch->SQL->Add("where Customer_ID = :value ");
break;
case 1: dm->qrySearch->SQL->Add("Select * from CustomerInfo");
dm->qrySearch->SQL->Add("where Name = :value");
break;
.....
}
dm->qrySearch->ParamByName("value")->AsString = edtPk->Text;
dm->qrySearch->Open();
if (dm->qrySearch->RecordCount != 0)
ModalResult = 1;
else
{
MessageBox(Handle, "没有该数据", "没找到", MB_OK + MB_ICONERROR);

}
 
最笨的方法是一条条insert进去,可以用存储过程,也可用table,query
如:
dm->qrySearch->First();
while(!dm->qrySearch->Eof)
{
temptable->Insert();
temptable->FieldByName("...")->As...=dm->qrySearch->FieldByName("...")->As...;
....
temptable->Post();
dm->qrySearch->Next();
}
如是存储过程或query(带insert语句)的话就用ParamByName("...")->As...给参数赋值.再ExecSql();

 
是这么写么?
while(!qrySearch->Eof)
{
qrySearch->SQL->Add("Insert into Search_Temp ");
qrySearch->SQL->Add("Post Search_Temp");
qrySearch->Next();
}
我这么写了,编译成功了,查询出一条记录,也插入进去了,但是一条以上就只能插入第一条,其他不行,怎么回事情?
还有,表如何更新呢?比如查完一次,插入完以后执行了某个事件后就再恢复为空,以便下次再次查询。
 
faint
亲爱的这么写是肯定不行的,Search的query跟insert的Query一定要不要一样
比如说你的table有C1,C2,C3三个char(x)的字段,你可以这样写
qrySearch->Fist();//一定要
qryInsert->SQL->Close();
qryInsert->SQL->Text="Insert into Search_Temp(c1,c2,c3) values(:c1,:c2,:c3)";
while(!qrySearch->Eof)
{
qryInsert->Close();
qryInsert->ParamByName("c1")->AsString=qrySearch->FieldByName("c1")->AsString;
qryInsert->ParamByName("c2")->AsString=qrySearch->FieldByName("c2")->AsString;
qryInsert->ParamByName("c3")->AsString=qrySearch->FieldByName("c3")->AsString;
qryInsert->ExeSql();

qrySearch->Next();
}
包你可以
 
接受答案了.
 
后退
顶部