delphi,excel,sql server?(100分)

  • 主题发起人 主题发起人 云淡风轻
  • 开始时间 开始时间

云淡风轻

Unregistered / Unconfirmed
GUEST, unregistred user!

大家好!
我想用delphi的控件将一个Excel工作簿里的表的数据转入到sql server的
数据库表里,具体怎样做?听说要先建一个数据源ODBC,然后怎么做呢?请指教!
 
建立一个odbc数据源(excel)
建立sqlserver的bde别名
使用batchmove
或是用datapump
 
使用ADOExpress创建Microsoft Excel 浏览器
作者: David Intersimone
日期: 2000年08月22日
.打开Delphi,创建新的Application。

2.在Form中放置ADODataSet

3.将CommandType的属性设为cmdTableDirect。
ADODataSet和BDEDataSet访问数据表相类似。对于ADO来说,要说明数据源然后利用数据感
知(data-aware)控件将数据显示在应用程序中。首先要设置的是CommandType,它用来告
诉ADO引擎准备调用什么样的命令。

4.设置ConnectionString属性
ConnectionString属性告诉ADO如何联接数据源。点击省略号会显示ConnectionString对话
框。我们要自己创建ConnectionString所以选择Use Connection String,然后点击Build
按钮激活Data Link Properties对话框。首先要做的是选择我们要用的数据提供者(Data
Provider)以取得数据,以为要访问的对象是Excel,所以我们选择Microsoft JET OLEDB
4.0 Provider,点击NEXT。下一步是要选择联接的具体对象,通过Browse按钮,选择任意
一个Excel文件或者使用我们提供的样例文件Forecast.xls。在测试ConnectionString之前,
我们还要手动的添加Extended Property,点击OK返回到ConnectionString对话框然后输入
’Extended Properties=Excel 8.0;’别忘了每一个ConnectionString实体都需要用分号
隔离。这是要对ADO声明我们需要Excel支持并使类库关联到Excel 8.0上。点击Build按钮,
然后点击TEST,如果返回正确的结果,这一步的工作就完成了。

5.设置CommandText属性
该属性变成下来表单,允许你选择数据源中定义的表,选择a$。

6.在Form中放置Datasource(Data Access)组件,和DBGrid(Data Controls)。
我们需要将ADODataset连接到网格上显示数据。将DBGrid的DataSource属性设置为
DataSource1,DataSource的ADODataSet属性设置为ADODataSet1。

7.将ADODataSet的Active属性设为True
通过激活ADODataSet,我们可以在设计模式下测试查询的运行状态。来自于EXCEL的数据
将显示在网格中。
 
首先感谢arm!!!
其次说明:我现在用的是您提供的第一种方法,建odbc,使用batchmove.
但执行时delphi总告我:找不着excel的表。我建excel的odbc的具体细节为:
在控制面板依提示建一excel的数据源A,其在BDE中的ODBC DSN相应为A,在
delphi表单中table1的属性设置:DatabaseName选A,然后想选择TableName,
这时弹出database login对话框,要我输入username和password(我并没有建
,哪来的用户名和密码),如果全空直接按“确定”,则在table1的TableName
的下拉框中没有表可选,直接敲入表名Sheet3(我的excel工作簿中有三个表,我只想转表Sheet3的数据),那么运行时就会出错,提示信息为:
Table dose not exist.
[Microsoft][ODBC Excel Driver]The Microsoft Jet
database engine could not find the object 'Sheet3'.
Make sure the object General SQL error.
错在哪呢?请再指教,非常感谢!
 
如何将Excel文件中的数据倒入Delphi本地库(Paradox)?
label PH;
var
msexcel : olevariant;
wbook, wsheet : olevariant;
i,j : integer;
temp : string;
...
begin
MsExcel := CreateOleObject('Excel.Application');
WBook := MsExcel.Application;
WBook.Visible := False;
wbook.workbooks.Open('c:/xxxx.xls');//打开Excel文档
WSheet := WBook.ActiveSheet;
for i := 1 to WSheet.Rows.count - 1 do
begin
Table1.Append; //Paradox表,其它表当然也可以了
for j := 1 to WSheet.Columns.Count do
begin
temp := wsheet.cells[i, j].value;
if Trim(temp) = '' then //如果为空则跳出循环,当然,
// 也可以是其它条件
goto PH;
Table1.Fields[j - 1].AsString := temp;
end;
PH:
if Trim(wsheet.cells[i, 1].Value) = '' then break;//跳出循环
end;
...
WBook.SaveAs('c:/xxxx.xls');
MsExcel.quit;
end;
注意:Tabel1的字段数要大于要倒入的Excel文档的列数
欢迎光临<a href="http://ph11.126.com">风之纹章(Delphi编程小站)</a>
 
我估计你要在SHEET3后面加一个SHEET3$.
不知道对不对,你试一下吧。
 
非常感谢诸位的热情帮助!
 
后退
顶部