悬而未解,急救!!!(200分)

  • 主题发起人 主题发起人 leonychiu
  • 开始时间 开始时间
L

leonychiu

Unregistered / Unconfirmed
GUEST, unregistred user!
最近朋友遇到一个问题,我也没有办法解释,请高手帮忙。
后台过程名up_excel_export_to_db,语句为
declare @s varchar(1000)
set @s='insert into aa select * from OPENROWSET(''microsoft.jet.oledb.4.0'',''Excel 8.0;HDR=YES;Database='+@excelpath+''',''select * from [Sheet1$]'')'
exec(@s)
直接赋值给@EXCELPATH后分析器中运行up_excel_export_to_db,成功执行!
前台一个adostoreproc连接,直接对adostoreproc赋值后,active为TRUE时,也成功执行!

问题是;在DELPHI脚本中
adostoreproc.Close;
adostoreproc.Parameters.ParamByName('@excelpath').Value := 'c:/aa.xls';
adostoreproc.ExecProc;
前台delphi 是先打开aa.xls文件后传到一个ADODataSet1后显示在GRIDS控件后(因为需要先预览下),之后才把aa.xls的路径如:c:/aa.xls传到Adosp_ExcelToDb过程中出现问题的。
ADODataSet1属性中commandtext是Sheet1$
ADODataSet1属性中commandtype是cmdTableDirect

却出现错误提示为:Ole Db provider 'microsoft.jet.oledb.4.0' reported an error
是不是小引用了那些资源????
(已经引用的资源:uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RXCtrls, ExtCtrls, RXClock,OleServer, Excel97, Grids, DBGridEh,DB, ADODB,ComObj;)

语句是没有问题,我也查阅了之前全文检索中的题目,没有办法解决。请不要再提供之前同样的答案,谢谢。
 
斑竹,请帮下,实在找不到答案。
 
SQL SERVER与前台程序是不是分别在不同的计算机?
如果在不同的计算机,那么U:/aa.XLS必须位于SQLSERVER所在的服务器,而不能在客户端.
 
OPENROWSET 数据源的路径是相对服务器而言的,而不是客户端的.
 
在同一台电脑上,我担心是MICROSOFT的JET版本问题,我也查下,也请2位指导,我也根据你们的意见修改下再回复
 
问题还存在,错误提示

OLE DB provider 'microsoft.jet.oledb.4.0' reported an error. The provider did not give any information about the error.

说明下,我运行后台代码的时候,赋好值后运行没有问题,执行正确。

但前台执行时候就发现看到参数值看起来对的,到后台PROFILER中看,aa.xls多了几个字符,如果把PROFILER中的得到的参数,赋到SQLSERVER后台中,也刚好出现以上错误提示。是不是有些东西没有更新或其他。

谢谢。
 
那就是你参数传递有问题了
怎么传的?用的什么控件?代码贴出来吧
 
非常简单。
excelpath := c:/aa.xls;
Adosp_ExcelToDb.Close;
Adosp_ExcelToDb.Parameters.ParamByName('@excelpath').Value := excelpath; Adosp_ExcelToDb.ExecProc;
可能吗?

请高手指点,问题很明确,不可能后台前台代码有明显错误!
 
用事件探查器看看传入的SQL是什么,参数对不对,应该是错的
试试不用参数,直接拼接SQL语句执行,这样应该是对的
可能是ADO参数传递问题.
 
如果是DELPHI参数传入有“失真”现象,怎么解决好点。
前面说了,直接在后台执行SQL语句是正确的。

试过,如果传入c:/表.xls在事件探查器看到c:/表.xls_to_db等信息,但就算我把这个参数强制在过程中检验后换成c:/表.xls后,再DELPHI中运行还是老的错误的提示。
OLE DB provider 'microsoft.jet.oledb.4.0' reported an error. The provider did not give any information about the error.
能介绍个解决方法让我再试下吗?最怕是MICROSOFT或DELPHI哪个BUG,没有安装最新补丁啊
 
我刚用程序测试,没有任何问题.
一个可能是你存储过程写的有问题,另一个可能是你Adosp_ExcelToDb
的参数类型有错误,可以在参数赋值前先Adosp_ExcelToDb.Parameters.Refresh;
 
一样错误提示。
存储过程的代码直接赋值运行也正常的。
你给的代码也测试了。还是老样子,还需要我提供什么信息?
delphi中传参数也只有传EXCEL表的路径。看起来很简单的。晕了
谢谢先。
有没有可能需要其他补丁??
 
opendatasource(’MICROSOFT.JET.OLEDB.4.0’
,’Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:/a.xls’
)...[Sheet1$]
 
这个语句一样错误,早试过的。
 
adostoreproc.Parameters.ParamByName('@excelpath').Value :=quotedstr( 'c:/aa.xls');
 
谢谢dey-999
错误提示变!因为你用了quotedstr函数,传到sqlserver中后参数变了"",导致了 OPENROWSET(''microsoft.jet.oledb.4.0'',''Excel 8.0;HDR=YES;Database='+@excelpath+''',''select * from [Sheet1$]'')'中的
@excelpath字符型原来是'...'变成"..."而没有办法执行下去。
是不是还你还没有说完,请多指点点。
等待中.....[:)]
多请教下,为什么传其他参数的时候都可以,单就出现这个模式下有问题??否则我还不知道为什么就好糊涂了。
 
把你存储过程中参数的定义和你Delphi中TADOStoredProc参数定义贴出来看看。
 
create procedure aa
@excelpath varchar(1000)
as
declare @sql varchar(1000)
set @sql='insert into aa select * from OPENROWSET(''microsoft.jet.oledb.4.0'',''Excel 8.0;HDR=YES;Database='+@excelpath+''',''select * from [Sheet1$]'')'
exec(@sql)
前台TADOStoredProc参数是直接连接SQLSERVER后自动获取的,好象是ftstring
字符长:1000(因为现在在外面上网),在VALUE中如果直接赋值后ACTIVE为TRUE也能成功执行.
delphi中代码
excelpath := c:/aa.xls;
Adosp_ExcelToDb.Close;
Adosp_ExcelToDb.Parameters.ParamByName('@excelpath').Value := excelpath; Adosp_ExcelToDb.ExecProc;
就出现上面的错误提示
 
按照楼主所述,应该就是参数的问题,用adocommand试试呢,或是adoquery?
 
看起来应该像参数传递问题。
但同一个控件用在别的功能上又可以,更晕了我。
对了,我是先在adoquery中执行 出现问题后再试adostore的,但都是同样的错误提示
但也请帮忙解释下这个参数的传递问题?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
809
DelphiTeacher的专栏
D
后退
顶部