关于 Excel 的问题 (碧血剑 过来看看) (50分)

  • 主题发起人 主题发起人 onlyonekgx
  • 开始时间 开始时间
O

onlyonekgx

Unregistered / Unconfirmed
GUEST, unregistred user!
平时我们讨论的大多是把数据集导论到 Execl,
我现在想把 Execl 导入到数据集,
李维的书上可以用 ADO 控件直接打开,但我没有成功!

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/Finance/account.xls";User ID=Admin;Password=;
Extended properties=Excel 5.0')...xactions

上面的语句是从SQL SERVER 的帮助上抄下来的,
改成这样
Extended properties=Excel 8.0
也不行,
大家帮忙看看,谢谢!
 
begin
DBGrid1.DataSource:=DataSource1;
DataSource1.DataSet:=ADOQuery1;
ADOQuery1.Connection:=ADOConnection1;

ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+ExtractFilePath(Application.ExeName)+'book.xls;Extended Properties=Excel 8.0;Persist Security Info=False';
//--上面这个字符串指定用的Jet连接的Excel文件:book.xls。
ADOConnection1.LoginPrompt:=false;
ADOConnection1.Connected:=true;

with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from [sheet1$]');
Open; //--此时DBGrid1中显示出Excel 的内容。导入到数据集成功。SQL中注意这个东东:sheet1$ 。
end;
end; // 注:D6+Excel 2k 通过。
 
谢谢 jrp 大侠,你那样我试过能成功,
不失为一种方法,
但我只所以想使用我上面写的方法,
是因为我想同时打开多个 Excel 文件,
把所有打开的 Excel 文件里的 某个表 的内容
显示在 一个 DBGrid 里,例如:


SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/Finance/account1.xls";User ID=Admin;Password=;
Extended properties=Excel 5.0')...xactions1

union

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/Finance/account2.xls";User ID=Admin;Password=;
Extended properties=Excel 5.0')...xactions2

你那样的话我不知道该如何实现此功能?
 
关注!!
 
Excel联接ADO串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/temp/a.xls;Extended
Properties="Excel 8.0;HDR=Yes;";Persist Security Info=False

SQLServer从Excel取数
SELECT *
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:/temp/b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')...sheet1$

 
To jrp:
用你的方法会遇到这种情况
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1695338
难道你没遇到?就是open 后Excel中某个字段如果数字和文本都有的话,打开时默认为
记录多的。比如某一列数字多,那么Open后这个字段默认为Float型,那么其他文本的值不
能导入。
 
To 碧血剑:
上面的情况你遇到过吗?
 
确实有这种情况,
为文本的导入为 NULL
 
平时用的不多。我再去看看。
现在我这里网速巨慢。

PS: is jrq , no jrp 。
 
Sorry,jrq is great!
 
1点之前谁能解决我的问题再送100分。
 
[:)]
碧血剑写的:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
 
有3种方法可以连Excel文件:用ADO Jet驱动;用ADO-ODBC驱动源;另外是用BDE-ODBC驱动。
假如Jet不行,可考虑用其他的方法。

11:30了,要吃饭了。 回来我去试试。
 
SELECT *
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:/temp/b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')...sheet1$

可以,但如果把此语句放到ADOQUERY 里的 SQL 属性时,
DELPHI 会把 :/temp/b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False
当作参数,而无法执行!

我的要求就是要实现把多个EXCEL文件的某一表的数据读取到
一个 数据集里,谁能实现另送100分!
 
你的问题好解决,这样
with adodsWLKCExcel do //AdoDataSet 连接Excel文件
begin
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+FileName+';'
+'Extended Properties=Excel 8.0;Persist Security Info=False';
CommandType := cmdTableDirect;
Close;
CommandText := 'Sheet1$';
Open;
end;
但是我的怎么办呀
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1695338
 
你这样只能打开单个文件,
怎么可能打开多个EXCEL文件 到
一个数据集里?
 
哦,是我没弄明白,太着急了,抱歉
 
你可以变通一下的呀,
那个语句在ADOQuery中执行不可以,你可以用
1。 在ADOConnection.Execute执行,把它放在一个临时表中,然后再从表取
2。用原生ADO对象执行,然后把原生对象付给ADOQuery
3。在SQLServer中建一个存储过程,把路径文件做为参数传进去
总之一定有办法的
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部