首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于ADOQuery数据追加有关问题。

2012-02-15 
关于ADOQuery数据追加问题。。我要做的事是:将一个Access表中的所有数据更新到SQL表中(两个表中字段一样,以I

关于ADOQuery数据追加问题。。
我要做的事是:将一个Access表中的所有数据更新到SQL表中(两个表中字段一样,以ID作为条件),若SQL表中存在相应的ID则更新,不存在则插入。
我用两个ADOQuery来连接数据库查询,代码大致如下:

C/C++ code
    ADOQuery_2->SQL->ADD("SELECT * FROM Access表;");    ADOQuery_2->Open();    while(!ADOQuery_2->Eof)    {        ADOQuery_1->SQL->ADD("SELECT COUNT(*) FROM SQL表 WHERE ID = " + ADOQuery_2->FieldList->FieldByName("ID")->AsString);        ADOQuery_1->Open();        if(ADOQuery_1->RecordCount > 0)        {            Update SQL表...        }        else            Insert Into SQL表...        ADOQuery_2->Next();    }

这样对吗?另外ADOQuery有个Append()方法,帮助文档上说它会在数据集某行激活一条可插入记录,但是我要插入一条记录的话非得一个字段一个字段插入吗?有什么方法可以整条插入的吗?...
要是有其它更好的思路也可以提供些,分不多,但是谢谢了...

[解决办法]
是的一个字段的赋值
方法一、
C/C++ code
 ADOQuery_2->SQL->ADD("SELECT * FROM Access表;");    ADOQuery_2->Open();    while(!ADOQuery_2->Eof)    {        ADOQuery_1->SQL->ADD("SELECT * FROM SQL表 WHERE ID = " + ADOQuery_2->FieldList->FieldByName("ID")->AsString);        ADOQuery_1->Open();        if(ADOQuery_1->RecordCount > 0)        {            ADOQuery_1->Edit();            ADOQuery_1->FieldByName("a")->Value = ADOQuery_2->FieldByName("a")->Value;            ADOQuery_1->FieldByName("b")->Value = ADOQuery_2->FieldByName("b")->Value;            ADOQuery_1->FieldByName("c")->Value = ADOQuery_2->FieldByName("c")->Value;            ....            ADOQuery_1->Post();        }        else        {            ADOQuery_1->Append();            ADOQuery_1->FieldByName("a")->Value = ADOQuery_2->FieldByName("a")->Value;            ADOQuery_1->FieldByName("b")->Value = ADOQuery_2->FieldByName("b")->Value;            ADOQuery_1->FieldByName("c")->Value = ADOQuery_2->FieldByName("c")->Value;            ....            ADOQuery_1->Post();                }        ADOQuery_2->Next();    }
[解决办法]
TADOQuery *Query=new TADOQuery(this);
Query->Connection=ADO_DBM->ADOConnection1;
Query->SQL->Add("select * from "+TableName);
Query->Open();
int nFieldCount=Query->FieldCount;
while(!Query->Eof)
{
TADOQuery *TQuery=new TADOQuery(this);
TQuery->Connection=ADO_DBM->ADOConnection1;
TQuery->SQL->Add("select top 0 * from "+TableName);
TQuery->Open();
TQuery->Append();
for(int i=0;i<nFieldCount;i++)
{
AnsiString sField=Query->Fields->Fields[i]->DisplayName;
if(sField!="RecID")//主键
{
if(Query->Fields->Fields[i]->DataType==ftBoolean)
TQuery->FieldByName(sField)->AsBoolean=Query->FieldByName(sField)->AsBoolean;
else
TQuery->FieldByName(sField)->AsString=Query->FieldByName(sField)->AsString;
}
}
TQuery->Post();
delete TQuery;
Query->Delete();
}
delete Query;

热点排行