[求救]老问题:用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;
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) //执行新增记录的操作代码