pb连接多个数据库

叔到用时方恨嫂 2011-11-08 10:43:59
我分别定义了SQLCA1,SQLCA2用来连接不同的数据库,做报表时,每次只能连一个数据库,对一个数据库进行操作,我想在报表中数据窗口里能取出这两个数据库的数据进行查询。
...全文
486 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
坚守十年 2011-12-21
  • 打赏
  • 举报
回复
MARK!
zlf19810306 2011-11-08
  • 打赏
  • 举报
回复
cc直接就是外部数据源的datawindow
zlf19810306 2011-11-08
  • 打赏
  • 举报
回复
显示数据窗口cc,你不用拼写语法,你就

for i = 1 to aa.rowcount()
ll_row = cc.insertrow()
ll_find = bb.find('条件',1,bb.rowcount() + 1)
if ll_find > 0 then
如果找到就把aa和bb的数据填入cc中的ll_row行
else
如果找不到就把aa的数据插填入cc中的ll_row行
end if
next
sybasebbs 2011-11-08
  • 打赏
  • 举报
回复
同意楼上的办法。
  • 打赏
  • 举报
回复
假如:
隐藏数据窗口A获取了服务器AA的数据,


SQLCA1 = create transaction
SQLCA1.DBMS = "OLE DB"
SQLCA1.LogPass ='****'
SQLCA1.LogId = "*****"
SQLCA1.AutoCommit = False
SQLCA1.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='10.3.10.11',PROVIDERSTRING='database=***'"
SQLCA1.Lock="RC"

a.settransobject(SQLCA1)
a.retrieve()

隐藏数据窗口BB获取了服务器BB的数据,

SQLCA2 = create transaction
SQLCA2.DBMS = "OLE DB"
SQLCA2.LogPass ='****'
SQLCA2.LogId = "*****"
SQLCA2.AutoCommit = False
SQLCA2.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='10.3.10.10',PROVIDERSTRING='database=***'"
SQLCA2.Lock="RC"

b.settransobject(SQLCA2)
b.retrieve()

显示数据窗口C(将AA的数据left join BB,得到我想要的数据),根据AA、BB拼个SQL语句CC
但是CC还是要连接数据库,单独连接AA或者BB,语句CC也通不过呀。

zlf19810306 2011-11-08
  • 打赏
  • 举报
回复

如果是不太频繁,可以用opendatasource来调用,不用定义链接服务器。如果对于访问次数较频繁的任何数据源最好是定义链接服务器来操作
yyoinge 2011-11-08
  • 打赏
  • 举报
回复
MSSQL不同服务器之间的数据操作

-创建链接服务器 
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例 
select * from ITSV.数据库名.dbo.表名

--导入示例 
select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器 
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource) 
--1、openrowset

--查询示例 
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表 
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表 
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
select *from 本地表

--更新本地表 
update b 
set b.列A=a.列A 
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b 
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器 
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
--查询 
select * 
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') 
--把本地表导入远程表 
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') 
select * from 本地表 
--更新本地表 
update b 
set b.列B=a.列B 
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a 
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset 
SELECT   * 
FROM   opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta 
--把本地表导入远程表
  • 打赏
  • 举报
回复
在不同的服务器。
yyoinge 2011-11-08
  • 打赏
  • 举报
回复
如果是mssql,并且两个数据库在同一个服务器,可以直接使用
select a.*. b.* from tb a, 数据库名.dbo.数据表名 b
where a.col = b.col
zlf19810306 2011-11-08
  • 打赏
  • 举报
回复
1.写个存储过程,在数据库里做分布式查询,然后用datawindow接收结果集。

2.两个接收结果集的datawindow ,一个显示报表的datawindow
先用两个datawindow分别接收出两个数据库里你要的结果集。然后跟据报表逻辑,一条一条的处理再插入到显示报表的datawindow里
xuam 2011-11-08
  • 打赏
  • 举报
回复
在后台进行跨数据库查询更方便简单

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧