delphi批量导入数据1.docx

上传人:b****2 文档编号:1898547 上传时间:2023-05-02 格式:DOCX 页数:42 大小:488.32KB
下载 相关 举报
delphi批量导入数据1.docx_第1页
第1页 / 共42页
delphi批量导入数据1.docx_第2页
第2页 / 共42页
delphi批量导入数据1.docx_第3页
第3页 / 共42页
delphi批量导入数据1.docx_第4页
第4页 / 共42页
delphi批量导入数据1.docx_第5页
第5页 / 共42页
delphi批量导入数据1.docx_第6页
第6页 / 共42页
delphi批量导入数据1.docx_第7页
第7页 / 共42页
delphi批量导入数据1.docx_第8页
第8页 / 共42页
delphi批量导入数据1.docx_第9页
第9页 / 共42页
delphi批量导入数据1.docx_第10页
第10页 / 共42页
delphi批量导入数据1.docx_第11页
第11页 / 共42页
delphi批量导入数据1.docx_第12页
第12页 / 共42页
delphi批量导入数据1.docx_第13页
第13页 / 共42页
delphi批量导入数据1.docx_第14页
第14页 / 共42页
delphi批量导入数据1.docx_第15页
第15页 / 共42页
delphi批量导入数据1.docx_第16页
第16页 / 共42页
delphi批量导入数据1.docx_第17页
第17页 / 共42页
delphi批量导入数据1.docx_第18页
第18页 / 共42页
delphi批量导入数据1.docx_第19页
第19页 / 共42页
delphi批量导入数据1.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

delphi批量导入数据1.docx

《delphi批量导入数据1.docx》由会员分享,可在线阅读,更多相关《delphi批量导入数据1.docx(42页珍藏版)》请在冰点文库上搜索。

delphi批量导入数据1.docx

delphi批量导入数据1

delphi批量导入数据  

更新数据

3

4

5

6

7

8

9

10

updatetbsetsname=a.snamefrom

(selectsname

FROM

openrowset('Microsoft.Jet.OLEDB.4.0',

'c:

\test.xsl';--excel文件所在路径

'sa';--账户名

'',--密码

Customers--表名

))a--表别名

wheretb.id=a.id

用Delphi把Excel批量导入access中时,出现数据类型不匹配,该怎么改正

2014-08-1915:

49596345589|浏览58次

excel

sSql:

=

'INSERTINTOljk(起动机编码,起动机名称,零件编码,零件名称,对应零件数量)'+

'SELECT'+

'起动机编码,起动机名称,零件编码,零件名称,对应零件数量'+

'FROM[excel8.0;database='+xlspath+'].[sheet1$]'+

'where零件编码in(select零件编码fromljk)';出现数据类型不匹配

当语句改成sSql:

=

'INSERTINTOljk(起动机编码,起动机名称,零件编码,零件名称,对应零件数量)'+

'SELECT'+

'起动机编码,起动机名称,零件编码,零件名称,对应零件数量'+

'FROM[excel8.0;database='+xlspath+'].[sheet1$]'没问题,请问where零件编码in(select零件编码fromljk)'的数据类型错在了哪里

 

?

如何在DELPHI中将EXCEL中的数据导入到SQL数据库

var

s1:

string;

begin

screen.Cursor:

=crSQLWait;

s1:

='insertintotable_bus'+

'(BS_NO,BS_TYPE,bs_whos,bs_mode,bs_seat,bs_soalseat,bs_drseat,bs_oiltype,bs_buycard,bs_unit,BS_BDATE,bs_edate)'+

'SELECT车号,dbo.uf_GetFullNameCode(车型名称),dbo.uf_GetFullNameCode(所属单位),dbo.uf_GetFullNameCode(厂牌型号),核定座位,售票座位,驾驶室前排座位,dbo.uf_GetFullNameCode(燃料名称),购置证号,本外单位,启用日期,dbo.uf_ConvertNullDate(终止时间)'+

'FROMOpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''DataSource="'+trim(LabeledEdit1.text)+'";ExtendedProperties=Excel8.0;PersistSecurityInfo=False'')...[Sheet1$]'+

'where车号notin(selectbs_nofromtable_bus)';

try

DataModule1.ADOConnection1.Execute(s1);

finally

screen.Cursor:

=crArrow;

end;

end;

EXCEL是可以当成一种数据源来处理的。

Str:

='Provider=Microsoft.Jet.OLEDB.4.0;DataSource='+文件路径+

';ExtendedProperties=Excel8.0;PersistSecurityInfo=False';

然后每列相当于一字段?

熟悉SQLSERVER2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。

在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET函数,关于函数的详细说明,请参考SQL联机帮助。

利用下述方法,可以十分容易地实现SQLSERVER、ACCESS、EXCEL数据转换,详细说明如下:

一、SQLSERVER和ACCESS的数据导入导出

常规的数据导入导出:

使用DTS向导迁移你的Access数据到SQLServer,你可以使用这些步骤:

○1在SQLSERVER企业管理器中的Tools(工具)菜单上,选择DataTransformation

○2Services(数据转换服务),然后选择czdImportData(导入数据)。

○3在ChooseaDataSource(选择数据源)对话框中选择MicrosoftAccessastheSource,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。

○4在ChooseaDestination(选择目标)对话框中,选择MicrosoftOLEDBProviderforSQLServer,选择数据库服务器,然后单击必要的验证方式。

○5在SpecifyTableCopy(指定表格复制)或Query(查询)对话框中,单击Copytables(复制表格)。

○6在SelectSourceTables(选择源表格)对话框中,单击SelectAll(全部选定)。

下一步,完成。

Transact-SQL语句进行导入导出:

1.在SQLSERVER里查询access数据:

SELECT*

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\DB.mdb";UserID=Admin;Password=')...表名

2.将access导入SQLserver

在SQLSERVER里运行:

SELECT*

INTOnewtable

FROMOPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\DB.mdb";UserID=Admin;Password=')...表名

3.将SQLSERVER表里的数据插入到Access表中

在SQLSERVER里运行:

insertintoOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\DB.mdb";UserID=Admin;Password=')...表名

(列名1,列名2)

select列名1,列名2fromsql表

实例:

insertintoOPENROWSET('Microsoft.Jet.OLEDB.4.0',

'C:

\db.mdb';'admin';'',Test)

selectid,namefromTest

INSERTINTOOPENROWSET('Microsoft.Jet.OLEDB.4.0','c:

\trade.mdb';'admin';'',表名)

SELECT*

FROMsqltablename

二、SQLSERVER和EXCEL的数据导入导出

1、在SQLSERVER里查询Excel数据:

SELECT*

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\book1.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')...[Sheet1$]

下面是个查询的示例,它通过用于Jet的OLEDB提供程序查询Excel电子表格。

SELECT*

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\Finance\account.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')...xactions

2、将Excel的数据导入SQLserver:

SELECT*intonewtable

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\book1.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')...[Sheet1$]

实例:

SELECT*intonewtable

FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\Finance\account.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')...xactions

3、将SQLSERVER中查询到的数据导成一个Excel文件

T-SQL代码:

EXECmaster..xp_cmdshell'bcp库名.dbo.表名outc:

\Temp.xls-c-q-S"servername"-U"sa"-P""'

参数:

S是SQL服务器名;U是用户;P是密码

说明:

还可以导出文本文件等多种格式

实例:

EXECmaster..xp_cmdshell'bcpsaletesttmp.dbo.CusAccountoutc:

\temp1.xls-c-q-S"pmserver"-U"sa"-P"sa"'

EXECmaster..xp_cmdshell'bcp"SELECTau_fname,au_lnameFROMpubs..authorsORDERBYau_lname"queryoutC:

\authors.xls-c-Sservername-Usa-Ppassword'

在VB6中应用ADO导出EXCEL文件代码:

DimcnAsNewADODB.Connection

cn.open"Driver={SQLServer};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"

cn.execute"master..xp_cmdshell'bcp"SELECTcol1,col2FROM库名.dbo.表名"queryoutE:

\DT.xls-c-Sservername-Usa-Ppassword'"

4、在SQLSERVER里往Excel插入数据:

insertintoOpenDataSource('Microsoft.Jet.OLEDB.4.0',

'DataSource="c:

\Temp.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')...table1(A1,A2,A3)values(1,2,3)

T-SQL代码:

INSERTINTO

OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',

'ExtendedProperties=Excel8.0;Datasource=C:

\training\inventur.xls')...[Filiale1$]

(bestand,produkt)VALUES(20,'Test')

总结:

利用以上语句,我们可以方便地将SQLSERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!

方法2:

procedureTForm1.Button3Click(Sender:

TObject);

var

oe:

variant;

n1,str:

string;

j:

integer;

begin

ifopendialog1.Executethen

opendialog1.DefaultExt:

='xls';

str:

=opendialog

从Excel中导入数据到Access中:

procedureTForm5.Button3Click(Sender:

TObject);//excel导入

var

 EXLfile:

string;

  sheet,XLApp,workbook:

variant;

  iRow,MaxRow:

integer;

begin

 ifopendialog1.Executethen

 begin

   EXLfile:

=opendialog1.FileName;

   screen.Cursor:

=crHourGlass;

   try

    //创建对象

     XLApp:

=createOleObject('Excel.Application');

     XLApp.displayAlerts:

=false;  //运行宏时是否显示警告和消息

     XLApp.ScreenUpdating:

=false;    //屏幕更新功能,提高速度;

     XLApp.WorkBooks.Add(EXLfile);

     workbook:

=XLApp.workbooks[1];

     sheet:

=workbook.worksheets[1];

    //sheet:

=XLApp.WorkBooks[1].worksheets[1];

   //得到最大行数  maxRow

     XLApp.ActiveCell.SpecialCells(xlLastCell).Select;

     maxRow:

=XLApp.ActiveCell.Row;  //当前行数

    //最大行数

    //写数据到access库

     withDm1.aq_tempdo

     begin

       Close;

       SQL.Clear;

       SQL.Add('select*frompeo');

       open;

       foriRow:

=1toMaxRowdo//  循环次数为excel最大行数字-1,因为excel的第1行为IDname表头。

       begin

         Edit;

         Append;

         fieldByName('P_No').asString:

=sheet.cells[iRow,1];

         fieldByName('P_Name').asString:

=sheet.cells[iRow,2];//导入

         post;

       end;

     end;

     finally

     ifnotVarIsEmpty(XLApp)then

     begin  //释放对象

       XLApp.displayAlerts:

=false;

       XLApp.ScreenUpdating:

=true; //结束后,ScreenUpdating设回到True

       XLApp.quit;

     end;

    screen.Cursor:

=crDefault;

   end;

 end;

end;

 

现在sql里有book的表,里面有 

id             书名               价格 

id           bookname         price 

1             社会与科学            18 

2             delphi入门           25 

3             百科                  30 

在delphi里现在希望先把数据从excel导入到dbgrid中,然后点“批量插入”时,把刚才所有存到导入的dbgrid的数据插入到sql中,问一下大家怎么才能做到,有二个关键代码 

1.button1:

“从excel导入到dbgrid中”的关键代码 

2.button2:

"批量插入dbgrid数据到数据库中"的关键代码 

如果利用dbgrid其实就是利用数据集来操作

从excel读数据,然后利用

adoquery.append;

adoquery.fieldbyname('').value :

= 读的值

....

...

然后,对dbgrid进行编辑.

最后adoquery.post;就达到了批量提交了.

但这里要用事务来控制.

读Excel代码:

利用一个结构体,供你参考

var

  RangeMatrix:

 Variant;

  OpenDialog1:

 TOpenDialog;

  iRE:

 integer;

  IN_TYPE,vStockName:

 String;

  sStockName,sCompany:

 String;

  i:

 Integer;

  MsExcel, MsExcelWorkBook, MsExcelWorkSheet:

 Variant;

  ASN2_NEW:

 PASN2_NEW;

begin

  OpenDialog1:

=TOpenDialog.Create(nil);

  try

    OpenDialog1.FileName:

='*.csv;*.xls';

    if not OpenDialog1.Execute then

    begin

      Result :

= false;

      exit;

    end;

    MsExcel :

= CreateOleObject('Excel.Application');

    MsExcelWorkBook :

= msExcel.Workbooks.Open(OpenDialog1.FileName);

    MsExcelWorkSheet :

= msExcel.Worksheets.Item[1];

  except

    Result :

= false;

  end;

  //开始从EXCEL文件读取相关的信息

  try

    Application.ProcessMessages;

     for i :

= 1 to MsExcelWorkSheet.Rows.Count do

    begin

      New(FASN2);

      FASN2.In_Stock_No :

= trim(MsExcelWorkSheet.Range['B1'].Value);

      FASN2.MAIN_FLG :

= trim(MsExcelWorkSheet.Range['A' + IntToStr(i)].Value);

      FAsn2List.Add(FASN2);

      //在这里可以调用adoquery.append代码

    end;

    Result :

= true;

  finally

    MsExcel.WorkBooks.Close;

  end;

  MsExcel.Quit;

  OpenDialog1.Free;

end;

为了更清淅的表达我的意思,上传一张图

在delphi里现在希望先把数据从excel导入到dbgrid中,然后点“批量插入”时,把刚才所有存到导入的dbgrid的数据插入到sql中,问一下大家怎么才能做到,有二个关键代码  

1.button1:

“从excel导入到dbgrid中”的关键代码  

2.button2:

"批量插入dbgrid数据到数据库中"的关键代码  

//excel 读到 dbgrid

  

var

  str:

string;

begin

  str:

='select * from opendatasource(''microsoft.jet.oledb.4.0'',''data source="文件路径";user id=admin;password=;extened properties=excel 5.0'')...[sheet1$]';

  adoquery.close;

  adoquery.sql.clear;

  adoquery.sql.add(str);

  adoquery.active:

=true;

  adoquery.open;

end;

  

//dbgrid 导入数据表

  

var

  str:

string;

begin

  str:

='select *  into t from opendatasource(''microsoft.jet.oledb.4.0'',''data source="文件路径";user id=admin;password=;extened properties=excel 5.0'')...[sheet1$]';

  with adoquery do

    begin

      close;

      sql.clear;

      sql.add(str);

      execsql;

      if rowsaffected>0 then

        showmessage('插入成功')

      else

        showmessage(插入失败);

    end;

     

end;

致:

sz9214e

  感谢你的回帖,其实这二个帖有一部分是重复的,就是把dbgrid数据批量插入到sql中,不同是的

这个帖重点:

  把数据从excel导到dbgrid中,再把dbgrid数据批量插入到sql中

下一个帖的重点是:

  先在DBGrid1中存放N条记录,但不要即时存入数据库中,全部录入完成时再把dbgrid数据批量插入到sql中 

  上周因受了点伤没有上班,今天才开始上班,再次感谢你的回帖,能否把源程序发给我,这样我觉得快些,谢谢!

    我的email是:

ansameye@

解决问题的代码:

procedure TForm1.btnClick(Sender:

 TObject);

begin

  OpenDialog1.Title :

= '请选择正确的excel文件';

  OpenDialog1.Filter :

= 'Excel(*.xls)|*.xls';

  if OpenDialog1.Execute then

    edit1.Text :

= OpenDia

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2