开发工具是:delphi2007,数据库是:sql2005
我添加了一个adoquery1,代码如下:
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;
end;每一次执行这个代码时,老是说“连接失败”。但是我把'exec p_sy_data_upload '拿到sql2005 management studio,执行没有任何错误。说明执行存储过程是没有问题的。后来我想是不是adoquery1.ConnectionString 是不是写错了,我就不变的情况下,我试一下打开表:
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='select * from table1';
open;
end;这样运行没有出现错误,可以打开表table1,我不知道这样写的代码为什么老是说连接失败的:
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;
end;
请指教
我添加了一个adoquery1,代码如下:
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;
end;每一次执行这个代码时,老是说“连接失败”。但是我把'exec p_sy_data_upload '拿到sql2005 management studio,执行没有任何错误。说明执行存储过程是没有问题的。后来我想是不是adoquery1.ConnectionString 是不是写错了,我就不变的情况下,我试一下打开表:
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='select * from table1';
open;
end;这样运行没有出现错误,可以打开表table1,我不知道这样写的代码为什么老是说连接失败的:
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;
end;
请指教
解决方案 »
- 如何让一个窗体只在本程序内是置顶的?
- 关于代码重用问题!
- 如何将动态生成的几个Label标记为一个句子?如何将动态生成的句子与外部Mp3文件建立对应关系?
- 如何在客户端记录表的主键?
- 请教关于三层程序中服务器与客户端传输数据的问题!
- 如何用clientdataset 更新不同的数据表?急急 急 请高手入
- 请教BDE配置问题???急急急
- 高难!急!!WIN2K的输入法出错!!!!!用DELPHI的CPU调试器怎么调??!!真解决了送300分!
- 求一个好算法,在TREEVIEW中如何判断所有子节点是同一个状态!
- sql语句中使用'符号的问题
- 有没有什么办法将一串数字转成指定长度的
- 查找DLL子窗体句柄
你试试这样:
ConnectionString := 'Provider=SQLOLEDB.1;'+
'Password='+'system'+';'+
'Persist Security Info=False;'+
'User ID='+'system'+';'+
'Initial Catalog='+sDataName+';'+
'Data Source='+sServer1;
sDataName:='cy302';
sServer1:='192.168.18.143';
with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
ConnectionString := 'Provider=SQLOLEDB.1;Password='+'system'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1;
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;
end;这样写语句是没有什么问题的,我已经验证过了,是在执行
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;出现了连接失败。我就把我的存储过程,贴出来:
alter procedure [dbo].[p_sy_data_upload]as begin
declare @linkip varchar(800),@dbcode int,@dbcodeStr varchar(100)
declare @sqltext varchar(8000),@locldb varchar(8000)
declare @ErrorMessage varchar(8000),@ErrorSeverity int, @ErrorState int,@ErrorNumber int,@OperType int
--读取前端编号
select @dbcode = dbcode from t_bs_DatabaseID_C if @dbcode<10
set @dbcodeStr='0'+cast(@dbcode as varchar(1))
else
set @dbcodeStr=cast(@dbcode as varchar(2))
select * from t_bs_DatabaseID_C
---取当前的数据库名称
select @locldb=CorpCode from t_sy_parameter
----连接远端数据库
select @linkip=cent_server from t_sy_parameterif exists(select * from master.dbo.sysservers where srvname='linkremote' )
begin Exec sp_droplinkedsrvlogin linkremote,Null
Exec sp_dropserver linkremote
EXEC sp_addlinkedserver
@server='linkremote',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc=@linkip --要访问的服务器 alter service master key force regenerate --更改 SQL Server 实例的服务主密钥 EXEC sp_addlinkedsrvlogin
'linkremote', --被访问的服务器别名
'false',
NULL,
'system', --帐号
'system' --密码
end
else
begin
EXEC sp_addlinkedserver
@server='linkremote',--被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc=@linkip --要访问的服务器 alter service master key force regenerate --更改 SQL Server 实例的服务主密钥 EXEC sp_addlinkedsrvlogin
'linkremote', --被访问的服务器别名
'false',
NULL,
'system', --帐号
'system' --密码 endEXEC master.dbo.sp_serveroption @server=N'linkremote', @optname=N'rpc', @optvalue=N'true'
EXEC master.dbo.sp_serveroption @server=N'linkremote', @optname=N'rpc out', @optvalue=N'true'-----创建单据主表
set @sqltext=
' declare @ErrorMessage varchar(8000),@ErrorSeverity int, @ErrorState int,@ErrorNumber int,@OperType int
BEGIN TRANSACTION database_upload
begin try
IF EXISTS(SELECT * FROM '+@locldb+'.dbo.sysobjects WHERE name=''t_wh_billofdocument_bk_'+@dbcodeStr+''' and xtype=''U'')
drop table '+@locldb+'.dbo.t_wh_billofdocument_bk_'+@dbcodeStr
+' create table '+@locldb+'.dbo.t_wh_billofdocument_bk_'+@dbcodeStr+'(
code varchar(300),billcode varchar(300),billcodeno varchar(300),id int
)
end try
begin catch
SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),@ErrorNumber=ERROR_NUMBER()
if @ErrorSeverity>18 or @ErrorSeverity<0
set @ErrorSeverity=16
if @ErrorState>127 or @ErrorState<1
set @ErrorState=1
begin try
ROLLBACK TRANSACTION database_upload
end try
begin catch
end catch
raiserror (@ErrorMessage, @ErrorSeverity,@ErrorState)
--return @ErrorNumber
end catch
begin try
COMMIT TRANSACTION database_upload
end try
begin catch
end catch
'--print(@sqltext)
execute(@sqltext) at linkremoteend我说明一下这个存储过程的是在本地服务上运行的,是在本地上sql2005通过远程连接到远端服务器,并且在远端服务器上创建表。但是我执行上面所写的delphi代码,每一次执行都出现本地连接失败,但是这个存储过程在本地的sql2005上运行:exec p_sy_data_upload,是没有问题,是正常的,可以在远端服务器上看到有生成表的结构。后来,我在这个存储过程中,我注释掉:
--execute(@sqltext) at linkremote那么运行delphi这段代码时就不会出现本地连接错误了。如果取消掉我刚才注释的代码时,运行delphi这段代码就会出现本地连接的错误,难道在delphi2007不能这样写吗?说明一下,我在management studio执行“exec p_sy_data_upload”是没有任何错误的,当然我是没有注释掉这段代码:“execute(@sqltext) at linkremote”,是可以在本地上运行存储过程在远端上可以创建表,没有出现任何错误。还说明一下,在这个存在过程中在本地sql2005连接远端sql2005的用户system是服务角色是最大,与sa的权限是一样的。
请教各位了。
是的,是用system登录的,执行"exec p_sy_data_upload"是没有问题的。
我用TADOConnection来连接,我这样写:
sDataName:='cy302';
sServer1:='192.168.18.143';
ADOConnection1.ConnectionString:= 'Provider=SQLOLEDB.1;Password='+'cysystem830'+';Persist Security Info=False;User ID='+'system'+';Initial Catalog='+sDataName+';Data Source='+sServer1; with adoquery1 do
begin
CommandTimeout:=3000;
CacheSize:=1000;
SQL.Text :='exec p_sy_data_upload ';
ExecSQL;
end;我在adoquery1的属性Connection连接ADOConnection1,我运行这个代码时,还是出现连接失败的,不知道ADOConnection1要不要设置什么属性