2014.12.28数据插入sql数据库1.0完整版

本文介绍了一种将Excel文件中的数据导入到SQL数据库特定表的方法。通过比较文件名与数据库表名来确定数据的导入目标,并实现了从Excel读取数据并将其插入到相应SQL表的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2014.12.28

程序清单:

FunctionSQLTableInsert(aFileNameI:string):string;

var

 Tablelist: TStringlist; //TStringslist是字符串列表类型

 ERowCount,EColCount,TableListL: integer; //列、行数

 MyAdo1: TAdoQuery;

 nPos: integer;

 i,j,x,x_1or2,y: integer;                   //整型

 wordname,tablename,Paraname,middle_vary,aFileNameC: string;        //字符串型

 SQLExcel,SExcWorkBook: Variant; //Variant 变量存储任何数据类型

 Reg: TRegistry;

//获取该数据库所有表名

begin

 TableList := TStringList.Create; //Tablelist启用

 Form1.ADOCon.GetTableNames(TableList);   //获取表名,并存储在TableList中

 TableListL := TableList.Count; //TableListL指数据库中表的数量

 

  ifTableListL=0 then

   MessageBox(0, '数据库无表!',PChar('提示'),MB_OK or MB_ICONWARNING)

 else

//.....................分割线...................................................

 

// if list.Count<>0 then

 begin

//将Ecel文件名与sql数据库表名一一作对比

  forj:=0 to TableListL-1 do

 begin

   middle_vary := TableList[j];  //表名

   showmessage(middle_vary+#13+aFileNameI); //测试语句

   aFileNameC := ChineseFileName(aFileNameI);  //将文件名只留下汉字

    nPos:=AnsiPos(aFileNameC,middle_vary);

//   showmessage(aFileNameI);  //测试语句

 

 

//判断npos的值,若不为0,则进行插入文件数据操作;为0,则不进行任何操作

//.....................下为AnsiPos函数测试语句.................................

//   if nPos<>0 then

//   MessageBox(0, 'cheng',PChar('提示'),MB_OK or MB_ICONWARNING)

//   else

//   MessageBox(0, '失败',PChar('提示'),MB_OK or MB_ICONWARNING);

//.....................分割线...................................................

      if nPos<>0 then

      begin

       try

        SQLExcel:= CreateOleObject('Excel.Application');   //需要在interface uses下声明Comobj

        SQLExcel.Visible := false;//设置Excel是否可见

        SExcWorkBook:= SQLExcel.WorkBooks.Open('D:\Myapp\R1.0\注:只存放导入文件(暂支持.txt,.xls后缀)\'+aFileNameI);

        ERowCount:=SExcWorkBook.worksheets[1].Usedrange.Rows.count;      //hang

        EColCount:= SExcWorkBook.worksheets[1].Usedrange.columns.count;   //lie

        ShowMessage('excelhave'+inttostr(ERowCount)+'Row'+inttostr(EColCount)+'Col');

        //判断Excel表第一行是否为标题,SameText()比较两字符串是否相等

//        if SameText(trim(SQLExcel.Cells[1,1].Value),trim(list[j])) then

          x_1or2:= 2;

//        else

//          x_1or2:= 1;

 

//.......................excel数据导入sql数据库表...............................

         tablename:=trim(TableList[j]);

        ShowMessage(tablename+#13+'从第'+inttostr(x_1or2)+''+'行开始');

        MyAdo1:=TAdoQuery.Create(nil);

//创建一个ADO数据控件TADOQuery的对象,对象名MyAdo ,对象的所有者为空

        MyAdo1.Connection:=Form1.ADOCon;

        for x:=x_1or2+1 to ERowCount-2 do    //行循环

          begin

            if trim(SQLExcel.Cells[x,1].Value)<>'' then

//....当excel表第x行第一列不为空时,进行赋值操作;反之不进行任何操作............

            begin

               for y:=2 to EColCount do         //列循环

               begin

               iftrim(SQLExcel.Cells[x_1or2,y].Value)<>'' then

//....当EXCEl表标题哪列不为空时进行赋值操作,反之不进行任何操作 ................

               begin

                 if y>2 then

                 begin

                   wordname:= Concat(''+wordname+','+trim(SQLExcel.Cells[x_1or2,y].Value)+'');

                  if(Trim(SQLExcel.Cells[x,y].Value))<>'' then

                     paraname:=Concat(''+paraname+','+#39+Trim(SQLExcel.Cells[x,y].Value)+#39+'')

                   else

                     paraname:=Concat(''+paraname+','+#39+'NULL'+#39+'');

                 end;

                 if y=2 then

                 begin

                   wordname:=trim(SQLExcel.Cells[x_1or2,y].Value);

//                   ShowMessage(wordname);

                   paraname:=''+#39+Trim(SQLExcel.Cells[x,y].Value)+#39+'';

//                   ShowMessage(paraname);

                 end;

               end;

               end;

              ShowMessage(wordname+#13+paraname);   //测试sql插入语句

               with MyAdo1 do

               begin

                 close;

                 SQL.Clear;

                 SQL.add('insert into'+tablename+' ('+wordname+') values ('+paraname+')');

//SQL.add('insert into'+tablename+'('+wordname+') values('+#39+paraname+#39+')');

//插入:insert into table1(field1,field2) values(value1,value2)

    //           parameters.ParamByName(''+wordname+'').Value:=Trim(SQLExcel.worksheets[1].Cells[x,y].value);

                 ExecSQL;

               end;

            end;

          end;

//.....................分割线...................................................

//        SEx,cWorkBook.Close;

        SQLExcel.Quit;

        showMessage('导入数据成功');

      Except

        SQLExcel.Quit;

        Exit;

      end;

      end

      else

        //..............异常机制处理:判断系统是否安装了MS Excel ......................

        showMessage('开始检测系统是否安装有Excel');

        begin

          Reg:=TRegistry.Create;

          Reg.RootKey:=HKEY_CLASSES_ROOT;

          if Reg.OpenKey('\Excel.Sheet\CurVer',False) then

            showMessage('已安裝Excel!')

          else

            showMessage('沒安裝Excel!');

            Reg.Free;

        end;

        Exit;

        MessageBox(0, '失败',PChar('提示'),MB_OK or MB_ICONWARNING);

//.....................分割线...................................................

    end;

 end;

 TableList.Free; //释放

end;

程序思路:

1、各参数,控件初始化定义

2、获取SQLR1.0数据库所有表名,并判断SQLR1.0数据库有无表,无表提示用户新建表;有表,则进行插入数据操作

3、将文件名与表名作比较,若与文件名无对应的表名,则提示用户该文件名未插入数据成功;反之,进行下一步操作

4、依照3,若成功进入下一步操作,则进行真正的数据插入功能,成功插入数据后提示用户已操作完毕;未成功插入数据则提示操作失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值