读书人

[]老有关问题:用OLE从Excel导入数据到

发布时间: 2012-02-20 21:18:24 作者: rapoo

[求救]老问题:用OLE从Excel导入数据到DBGrid
也许是比较老的问题了,但是确实困扰了我好久,网上关于从DBGrid导出数据到Excel的C++Builder例子有一大堆。
但是从Excel导入数据到DBGrid的讲得很少。要求不用ADO,而用OLE方法。

从Excel导入数据到StringGrid的我会写,StringGrid->Cells[i][j]=sStr;填充的时候,一个个赋值就行了,但是到DBGrid,不知道该怎么写。我有几个问题想请教:
1).DBGrid关联d的是数据库,这是不是意味着我不仅要让DBGrid显示我所需要的数据,而且还要对数据库进行操作?
2).或者说:只要我改了它的数据库,是不是就顺便连显示也自动发生变化了?
3).我导入的数据只是原来数据库里头特定的几列值,我想让它覆盖原来的数据,该怎么写?

分不多,问题也很幼稚,希望有好心人能帮我回答一下,不胜感激啊~~~~

[解决办法]
DBGrid 本来就是绑定数据库显示的,导入时不需要操作 DBGrid 本身,而是操作指向的数据源

就是操作数据库/表啦,跟 StringGrid 没有根本的区别
[解决办法]
DBGrid显示的数据就是所连接的数据源,你所要操作的数据其实就是数据源中的数据,而数据源使用的数据集是从数据库中读出的数据集合,无论你导出还是你只要对这个数据集操作即可,改写原来数据库的数据,通过数据集的改写也可以实现。
[解决办法]
从Excel取得要写入第一列的数字,然后用Query查询数据库中的对应的字段有没有该值,如果有,就是重复值。

假如从Excel取出的值赋给变量int filed1;

C/C++ code
       String SQL;        SQL = "Select Count(*) As FirstFieldCount From Table1 Where FirstField = " + field1;        Query1->SQL->Clear();        Query1->SQL->Add(SQL);        Query1->Open();        //查询计数结果大于0,存在第一列为field1值的记录        if(Query1->FieldByName("FirstFieldCount")->AsInteger > 0)                return;        else        //不存在重复的记录,可执行插入新记录的操作        if(Query1->FieldByName("FirstFieldCount")->AsInteger = 0)        //执行新增记录的操作代码 

读书人网 >C++ Builder

热点推荐