delphi批量导入数据Word格式.docx
《delphi批量导入数据Word格式.docx》由会员分享,可在线阅读,更多相关《delphi批量导入数据Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
![delphi批量导入数据Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/27/3646f701-5cb9-415c-9572-11b4c40cd9fc/3646f701-5cb9-415c-9572-11b4c40cd9fc1.gif)
maxRow
XLApp.ActiveCell.SpecialCells(xlLastCell).Select;
maxRow:
=XLApp.ActiveCell.Row;
//当前行数
//最大行数
//写数据到access库
withDm1.aq_tempdo
Close;
SQL.Clear;
SQL.Add('
select*frompeo'
open;
foriRow:
=1toMaxRowdo//
循环次数为excel最大行数字-1,因为excel的第1行为IDname表头。
Edit;
Append;
fieldByName('
P_No'
).asString:
=sheet.cells[iRow,1];
P_Name'
=sheet.cells[iRow,2];
//导入
post;
end;
finally
ifnotVarIsEmpty(XLApp)then
begin
//释放对象
=true;
//结束后,ScreenUpdating设回到True
XLApp.quit;
=crDefault;
end;
现在sql里有book的表,里面有
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代码:
利用一个结构体,供你参考
RangeMatrix:
Variant;
OpenDialog1:
TOpenDialog;
iRE:
IN_TYPE,vStockName:
String;
sStockName,sCompany:
i:
Integer;
MsExcel,
MsExcelWorkBook,
MsExcelWorkSheet:
ASN2_NEW:
PASN2_NEW;
=TOpenDialog.Create(nil);
try
OpenDialog1.FileName:
='
*.csv;
*.xls'
;
if
not
OpenDialog1.Execute
then
Result
false;
exit;
MsExcel
CreateOleObject('
MsExcelWorkBook
msExcel.Workbooks.Open(OpenDialog1.FileName);
MsExcelWorkSheet
msExcel.Worksheets.Item[1];
except
//开始从EXCEL文件读取相关的信息
Application.ProcessMessages;
for
i
to
MsExcelWorkSheet.Rows.Count
do
New(FASN2);
FASN2.In_Stock_No
trim(MsExcelWorkSheet.Range['
B1'
].Value);
FASN2.MAIN_FLG
A'
+
IntToStr(i)].Value);
FAsn2List.Add(FASN2);
//在这里可以调用adoquery.append代码
true;
finally
MsExcel.WorkBooks.Close;
MsExcel.Quit;
OpenDialog1.Free;
为了更清淅的表达我的意思,上传一张图
//excel
读到
dbgrid
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:
adoquery.open;
//dbgrid
导入数据表
into
t
with
adoquery
close;
sql.clear;
sql.add(str);
execsql;
rowsaffected>
0
showmessage('
插入成功'
)
else
showmessage(插入失败);
致:
sz9214e
感谢你的回帖,其实这二个帖有一部分是重复的,就是把dbgrid数据批量插入到sql中,不同是的
这个帖重点:
把数据从excel导到dbgrid中,再把dbgrid数据批量插入到sql中
下一个帖的重点是:
先在DBGrid1中存放N条记录,但不要即时存入数据库中,全部录入完成时再把dbgrid数据批量插入到sql中
上周因受了点伤没有上班,今天才开始上班,再次感谢你的回帖,能否把源程序发给我,这样我觉得快些,谢谢!
我的email是:
ansameye@
解决问题的代码:
procedure
TForm1.btnClick(Sender:
TObject);
OpenDialog1.Title
请选择正确的excel文件'
OpenDialog1.Filter
Excel(*.xls)|*.xls'
edit1.Text
OpenDialog1.FileName;
TForm1.btninClick(Sender:
const
BeginRow
2;
BeginCol
1;
Excel:
OleVariant;
iRow,iCol
xlsFilename:
(trim(edit1.Text)
)
MessageBox(GetActiveWindow(),
请选择正确的excel路径'
MB_OK
+
MB_ICONWARNING);
xlsFilename
trim(edit1.Text);
Excel
CreateOLEObject('
Application.MessageBox('
excel没有安装'
提示信息'
MB_OK+MB_ICONASTERISK+MB_DEFBUTTON1+MB_APPLMODAL);
Exit;
Excel.Visible
Excel.WorkBooks.Open(xlsFilename);
iRow
BeginRow;
iCol
BeginCol;
while
trim(Excel.WorkSheets[1].Cells[iRow,iCol].value)
<
>
do
ADOQuery1
Append;
Fields[0].AsString
trim(Excel.WorkSheets[1].Cells[iRow,iCol].value);
Fields[1].AsString
trim(Excel.WorkSheets[1].Cells[iRow,iCol+1].value);
Fields[2].Asstring
trim(Excel.WorkSheets[1].Cells[iRow,iCol+2].value);
Excel.Quit;
ADOQuery1.UpdateStatus
导入数据出错'
数据导入成功'
如何在DELPHI中将EXCEL中的数据导入到SQL数据库
s1:
=crSQLWait;
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)'
DataModule1.ADOConnection1.Execute(s1);
=crArrow;
EXCEL是可以当成一种数据源来处理的。
Str:
='
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource='
+文件路径+
然后每列相当于一字段
熟悉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(选择目标)对话框中,选择MicrosoftOLE DBProviderforSQL Server,选择数据库服务器,然后单击必要的验证方式。
○5在SpecifyTableCopy(指定表格复制)或Query(查询)对话框中,单击Copytables(复制表格)。
○6在SelectSourceTables(选择源表格)对话框中,单击SelectAll(全部选定)。
下一步,完成。
Transact-SQL语句进行导入导出:
1.在SQLSERVER里查询access数据:
SELECT*
FROMOpenDataSource('
c:
/DB.mdb"
UserID=Admin;
Password='
)...表名
2.将access导入SQLserver
在SQLSERVER里运行:
SELECT*
INTOnewtable
FROMOPENDATASOURCE('
)...表名
3.将SQLSERVER表里的数据插入到Access表中
在SQLSERVER里运行:
insertintoOpenDataSource('
c:
)...表名
(列名1,列名2)
select列名1,列名2fromsql表
实例:
insertintoOPENROWSET('
C:
/db.mdb'
admin'
Test)
selectid,namefromTest
INSERTINTOOPENROWSET('
'
/trade.mdb'
表名)
FROMsqltablename
二、SQLSERVER和EXCEL的数据导入导出
1、在SQLSERVER里查询Excel数据:
/book1.xls"
Password=;
Extendedproperties=Excel5.0'
)...[Sheet1$]
下面是个查询的示例,它通过用于Jet的OLEDB提供程序查询Excel电子表格。
FROMOpenDataSource('
/Finance/account.xls"
)...xactions
2、将Excel的数据导入SQLserver:
SELECT*intonewtable
实例:
3、将SQLSERVER中查询到的数据导成一个Excel文件
T-SQL代码:
EXECmaster..xp_cmdshell'
bcp库名.dbo.表名outc:
/Temp.xls-c-q-S"
servername"
-U"
sa"
-P"
参数:
S是SQL服务器名;
U是用户;
P是密码
说明:
还可以导出文本文件等多种格式
bcpsaletesttmp.dbo.CusAccountoutc:
/temp1.xls-c-q-S"
pmserver"
bcp"
SELECTau_fname,au_lnameFROMpubs..authorsORDERBYau_lname"
queryoutC:
/authors.xls-c-Sservername-Usa-Ppassword'
在VB6中应用ADO导出EXCEL文件代码:
DimcnAsNewADODB.Connection
cn.open"
Driver={SQLServer};
Ser