progid是要创建的 OLE 对象的程序标识符 (ProgID)。此字符串描述该 OLE 对象的类,其形式如下:'OLEComponent.Object'OLEComponent 是 OLE 自动化服务器的组件名称,Object 是 OLE 对象名。指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。例如,SQLDMO.SQLServer 是 SQL-DMO SQLServer 对象的 ProgID。SQL-DMO 的组件名称为 SQLDMO,SQLServer 对象是有效的,并且同所有 SQL-DMO 对象一样,SQLServer 对象支持 Idispatch。clsid是要创建的 OLE 对象的类标识符 (CLSID)。此字符串描述该 OLE 对象的类,其形式如下:'{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}'指定的 OLE 对象必须有效并且必须支持 IDispatch 接口。例如,{00026BA1-0000-0000-C000-000000000046} 是 SQL-DMO SQLServer 对象的 CLSID。
解决方案 »
- 数据库出现对象名‘master.dbo.spt_values’无效。
- 问个简单的确问题,给分!
- 高手们给看看哪种效率高一些,并且说说为什么?
- 高手急救.马上给分!!!数据库里有1-2亿条的记录,我想对每条记录加入(1-2亿之间任一数字)的随机数.应如何处理.
- 求一条组合字符串的sql
- 下面的功能如何用存储过程实现?谢谢
- 请问有关group by,并且insert数据的问题.
- 不能启动SQL server的Agent服务。(重分)
- 一个SQL server数据库文件导入问题
- SQL2008备份
- 出现了问题,SqlServer2005和SqlServer2008同时装在了一台机器上
- 关于自定义属性(类似于淘宝商品属性)数据库设计
比如要创建.mdb文件,.txt文件,.xls文件,.doc文件,等等。
sp_oacreate可以创建的ole对象都有什么?
只能创建
OLEComponent 是 OLE 自动化服务器的组件名称,Object 是 OLE 对象名
这句话在微软的帮助里也有,看过了,细想一下就能看出还有其它内容,我想知道的就是他的全部,不是单纯的这句话。请高手门深入进去,一定要把这个问题搞清楚呀。看过邹建老大的一个例子:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_exporttb]
GO /*--数据导出Access 导出数据库中的表到Access,可以同时导出指定的N个表 如果文件不存在,将自动创建文件
如果表存在,将覆盖现有的表 --邹建 2004.04--*/ /*--调用示例 --导出所有用户表
p_exporttb @s_tbname='',@path='c:\',@fname='test.mdb' --导出指定表
p_exporttb @s_tbname='syscolumns,sysobjects',@path='c:\',@fname='test.mdb'
--*/
create proc p_exporttb
@s_tbname varchar(4000)='', --要导出的表名列表,用逗号分隔,如果不指定,导出所有表
@path nvarchar(1000), --文件存放目录
@fname nvarchar(250), --文件名
@password varchar(20)='', --ACCESS数据库的密码
@s_user sysname='', --如果提示连接错误,则需要提供登陆sql服务器的用户名及密码
@s_password varchar(50)=''
as
set nocount on
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --参数检测
if isnull(@fname,'')='' set @fname='temp.mdb' --检查文件是否已经存在
if right(@path,1)<>'\' set @path=@path+'\'
create table #tb(a bit,b bit,c bit)
set @sql=@path+@fname
insert into #tb exec master..xp_fileexist @sql --数据库创建
select @sql=@path+@fname
,@constr='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+@sql
+case isnull(@password,'') when '' then ''
else ';Jet OLEDB:Database Password='+@password end if not exists(select 1 from #tb where a=1)
begin
exec @err=sp_oacreate 'ADOX.Catalog',@obj out
if @err<>0 goto lberr exec @err=sp_oamethod @obj,'Create',null,@constr
if @err<>0 goto lberr exec @err=sp_oadestroy @obj
if @err<>0 goto lberr
end --连接数据库
exec @err=sp_oacreate 'adodb.connection',@obj out
if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr
if @err<>0 goto lberr --导出处理
declare @tbname sysname,@s varchar(8000)
set @s=case isnull(@s_tbname,'') when '' then ''
else ' and name in('''+replace(@s_tbname,',',''',''')+''')' end
exec('declare tb cursor global for select name from sysobjects where xtype=''U'''+@s) open tb
fetch next from tb into @tbname
while @@fetch_status=0
begin
--删除现有的表
set @sql='drop table ['+@tbname+']'
exec @err=sp_oamethod @obj,'execute',@out out,@sql
--if @err<>0 goto lberr --导入表
if isnull(@s_user,'')=''
set @sql='SELECT * into ['+@tbname
+'] FROM [ODBC;Driver=SQL Server;Server='+ @@servername
+';database='+db_name()+'].['+@tbname+']'
else
set @sql='SELECT * into ['+@tbname
+'] FROM [ODBC;Driver=SQL Server;Server='+ @@servername
+';Uid='+@s_user+';Pwd='+isnull(@s_password,'')
+';database='+db_name()+'].['+@tbname+']' exec @err=sp_oamethod @obj,'execute',@out out,@sql
if @err<>0 goto lberr
fetch next from tb into @tbname
end
close tb
deallocate tb --释放对象
exec @err=sp_oadestroy @obj return lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
if @obj<>0 exec @err=sp_oadestroy @obj
lbexit:
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述
select @sql,@constr,@fdlist
go我觉得很好,用的很巧秒,很熟练,但自己不会呀,sp_oacreate都能创建什么呢?怎么用呢?
http://www.cftea.com/c/2007/08/4C224V473WENBZ77.asp
首先sp_oacreate第一个参数怎么给?什么叫prgID比如SQL中调用一个DLL这里如何写?我在网上找了一大堆,没发现能有人说清楚