使用 FDBatchMove 导入 Excel 文件到数据库

void __fastcall TForm1::Button8Click(TObject *Sender)
{
 TLocateOptions Opts1;
	OpenDialog1->Title = "打开 Excel 表文件";
	OpenDialog1->Filter = "Excel文件(*.xls)|*.xls;*.xlsx";

	if (OpenDialog1->Execute()) {
		Memo2->Lines->Add("开始生成数据库并迁移数据");
		for (int i = 0; i < OpenDialog1->Files->Count; i++) {
			String OPfile = OpenDialog1->Files->Strings[i];

			if (FDConnection2->Connected == true) {
				FDConnection2->Connected = false;

				}
			FDConnection2->Params->Clear();
			FDConnection2->Params->Add
				("ODBCDriver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
				);
			FDConnection2->Params->Add("DataSource=Excel Files");
			FDConnection2->Params->Add("DriverID=ODBC");
			FDConnection2->Params->Add("Database=" + OPfile);
			// OpenDialog1->FileName);
			FDConnection2->Connected = true;

			//Memo1->Lines->Add(OPfile);
			// FDConnection2->GetTableNames("","","",TableList); 
 //这里不知道为什么取不出来Excel表中的Sheet名字,

			if (FDConnection1->Connected == true) {
				FDConnection1->Connected = false;

				}
			FDConnection1->Params->Clear();
			FDConnection1->Params->Add("DriverID=SQLite");
			FDConnection1->Params->Add("Database=New1.sdb");
			FDConnection1->Connected = true;
			FDCommand1->Connection = FDConnection1;
			FDCommand1->CommandText->Clear();
			FDCommand1->CommandText->Text = "DELETE FROM tablename";
			 FDCommand1->Active = True;

			FDQuery1->Connection = FDConnection2;
			FDQuery1->SQL->Text = "select * from [Sheet0$] where F7 like '%4%'";
             FDQuery1->Active =true;
		   //	String rq = FDQuery1->Fields->Fields[6]->Text;

		   //	FDQuery1->Active = false;
			FDBatchMoveSQLReader1->Connection = FDConnection2;
			FDBatchMoveSQLReader1->ReadSQL =
				"select * from [Sheet0$] where F7 like '%4%'";

			FDTable1->Connection = FDConnection1;
			FDTable1->TableName ="tablename";
			FDTable1->Active = true;

				FDBatchMoveDataSetWriter1->DataSet = FDTable1;
				FDBatchMove1->Mappings->Clear();

			   for(int i=0;i<FDQuery1->FieldCount;i++)
			   {
			   String aa=FDTable1->Fields->Fields[i]->FieldName+"="+FDQuery1->Fields->Fields[i]->FieldName;
			   //FDTable1->Fields->Fields[i]->FieldName+"="+FDQuery1->Fields->Fields[i]->FieldName;
			   //	FDBatchMove1->Mappings->Add(FDTable1->Fields->Fields[i]->FieldName+"="+FDQuery1->Fields->Fields[i]->FieldName);
					  Memo2->Lines->Add(aa);
					 FDBatchMove1->Mappings->Add()->AsText=aa; 
 //如果Excel表中的第一行是中文名字,程序不能运行,提示invalid character found,如果把Excelg表的第一行第一个字段改为英文,运行成功。
			   }
				FDBatchMove1->Reader= *FDBatchMoveSQLReader1;
				FDBatchMove1->Writer=  *FDBatchMoveDataSetWriter1;
				FDBatchMove1->Execute();
				Memo2->Lines->Add
					(String().sprintf(L"---- %s  中 %d 条记录已成功迁移 ", FDTable1->TableName, FDBatchMove1->InsertCount));
				OPfile = "";
			}
		}

		FDBatchMove1->Mappings->Clear();
		FDConnection2->Connected = false;
		FDConnection1->Connected = false;

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值