delphi批量导入数据1.docx
- 文档编号:23074542
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:42
- 大小:488.32KB
delphi批量导入数据1.docx
《delphi批量导入数据1.docx》由会员分享,可在线阅读,更多相关《delphi批量导入数据1.docx(42页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- delphi 批量 导入 数据