社区
PowerBuilder
帖子详情
怎样在Install shield或PB 里直接把数据库附加到SQLSERVER中???急~!!
xiaomi603
2003-05-19 10:36:54
怎样在Install shield或PB 里直接把数据库附加到SQLSERVER中???急~!!
...全文
66
3
打赏
收藏
怎样在Install shield或PB 里直接把数据库附加到SQLSERVER中???急~!!
怎样在Install shield或PB 里直接把数据库附加到SQLSERVER中???急~!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
喝醉的咖啡
2003-05-19
打赏
举报
回复
楼上说的符合楼主字面要求,不知道是不是楼主需要的?
sp_attach_db
将数据库附加到服务器。
注意哦:只应对以前使用显式 sp_detach_db 操作从数据库服务器分离的数据库执行 sp_attach_db。
呵呵,这指的是对一个数据库的物理存储的文件进行拆分和“还原”,前提是该库已经存在,且表和数据类型、数据验证等一致。我说的是用于安装到其它服务器上的“备份”/“还原”,或者在安装程序中“创建库”。
andyzq
2003-05-19
打赏
举报
回复
在pb里调用系统存储过程sp_attach_db即可
//附加数据库
SQLCA.AutoCommit = true
string ls_path, ls_name, ls_database_path, ls_mdf_name, ls_ldf_name
long ll_return
ls_path = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Currentversion\Uninstall\Microsoft SQL Server 2000"
RegistryGet(ls_path, "InstallLocation", RegString!, ls_name)
ls_database_path = ls_name + "\data\"
ls_mdf_name = ls_database_path + 'enterprise_Data.MDF'
ls_ldf_name = ls_database_path + 'enterprise_Log.LDF'
DECLARE up_add_database PROCEDURE FOR sp_attach_db
@dbname = 'enterprise',
@filename1 = :ls_mdf_name,
@filename2 = :ls_ldf_name;
EXECUTE up_add_database;
close up_add_database;
commit;
喝醉的咖啡
2003-05-19
打赏
举报
回复
引入数据库方法:
1、假如安装了SQLServer或者客户端工具,就可以用命令行 osql 命令,用 osql /? 查询帮助,或者看看联机帮助,大概的语法如下:osql -U login id -P password -d databasename -Q "cmdline query"
这里可以用osql执行 restore database 来还原数据库——注意:备份数据库的时候要把相关的loginid去掉,restore之后用osql调用存储过程重建即可。如果不去掉,restore的时候需要做很多判断和操作,比较麻烦。
因此,你可以在 InstallShield 中用 LaunchAppAndWait 来执行 osql;
2、写一个COM,或者VBScript(.vbs),在 InstallShield 中调用来实现上面过程;
3、用pb写一段程序专门来进行这个操作,在InstallShield的脚本 function OnFirstUIAfter() 中(即安装过程执行完毕)调用其实现导入数据库。
对于以上方法,要说明程序中如何“引入”数据库——还原数据库。由于我不懂pb,可以简单说一下过程(主要是 sqlserver 存储过程调用)。
1、制作数据库——备份数据库成为一个文件,备份前去掉该库相关的 login id,使其没有任何账号和权限可以访问;
2、用提供的 loginid 和 password 连接指定的 serverip,或者你用odbc等等;
3、注意,该 loginid 必须是 sa 或者相应权限的数据库,因此首先用其创建一个空库——注意判断重名。
先把当前库转为 master,
"USE master"
判断该库是否已经存在
"IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'" & gDataBaseName & "') DROP DATABASE [" & gDataBaseName & "]"
如果存在,则 drop(或者提示)
创建空库:
"CREATE DATABASE " & gDataBaseName & " ON ( NAME = " & gDataBaseName & "_dat, FILENAME = '" & strDBFilename & "', SIZE = 4, MAXSIZE = 10, FILEGROWTH = 1 ) LOG ON ( NAME = " & gDataBaseName & "_log, FILENAME = '" & strDBLogFilename & "', SIZE = 4, MAXSIZE = 10, FILEGROWTH = 1 ) COLLATE Chinese_PRC_CI_AS"
这里面需要注意生成的库文件和日志文件放到哪里,库的初始大小和增长情况等等;
3、用指定的库文件还原该库:
"Restore database " & gDataBaseName & " from Disk='" & strDBBackupFilename & "' with move '" & gDataBaseName & "_data' to '" & strDBFilename & "', move '" & gDataBaseName & "_log' to '" & strDBLogFilename & "'"
同样注意:生成的库文件和日志文件放到哪里,库的初始大小和增长情况等等。因为备份环境与安装环境的差异,备份文件中已经记录了这些信息,因此这里需要强制指明。
4、创建 login id 和 相应的权限
要弄清楚 sqlserver 的安全机制,有 loginid 才能“连接”数据库服务器,该 id 具备了对特定数据库的特定权限,才能“访问”该“(逻辑)数据库”。因为备份库的时候可能已经记录了login id等等,因此才要求前期准备工作中删掉这些信息。
下面的操作是对上面这一要求没有做到的“预防”措施
"if exists( select name from " & gDataBaseName & ".dbo.sysusers where name='" & gDataBaseAdmin & "') select 1 else select 2"
判断对该库是否存在指定 loginid 的访问权——即该逻辑库的username,根据返回1或者2得到结果
如果存在,可以用 "sp_dropuser '" & gDataBaseAdmin & "'" 删除该 loginid
这里也可以对所有对该库的关联账号一律删掉。
"if exists( select name from master.dbo.syslogins where name='" & gDataBaseAdmin & "') select 1 else select 2"
这一步根据结果使用"sp_droplogin '" & gDataBaseAdmin & "'"删除相关 login id
5、最后使用
"sp_addlogin '" & gDataBaseAdmin & "','" & gDataBasePassWord & "','" & gDataBaseName & "'"
创建 login id,并关联到该数据库作为默认库。
然后使用 sp_adduser 设置该 login id 对 该库的数据库访问权限。
ok,完毕。
这些内容,完全可以写成一个 sql 文件,然后用程序读入来执行。
或者写成一个存储过程,然后由程序,或osql读入数据库,然后调用执行。
这两种方法,前者需要用程序读取到的变量替换sql文件中的数据库名字等,后者需要传递足够的参数给存储过程。
最后,如果你的目的不是“把数据库附加到SQLSERVER中”,而是创建一个空库,那最简单就是在sqlserver中对现有库“生成SQL”,另存为一个文件,然后再用程序或者osql创建该库。
其中注意的是,osql读入sql文件批量执行多个sql语句,必须分段来写,每句之间加入一句 go 来告诉 sqlserver 分开执行,不能连续执行。
呵呵,如果你不熟悉 SQLServer别再问下去了,SQLServer 联机帮助中有所有上面提到的语句,不会可以看看联机帮助——简体中文的。我这里给你了基本的思路和语句,你可以自行发挥,有些地方可以换种方式实现。尤其有几个语句已经有新版本了,我这里是两三年前的代码,但可以不用替换,都是兼容的。
时间有限,随便写了一些,希望对大家有所帮助。
WEB开发文档2 总结
http://blog.donews.com/lvjiyong/archive/2006/06/29/931071.aspx 怎样将后台生成的在内存
中
的图象显示到客户端 Microsoft IE WebControls下载地址 如何在DATAGRID
中
使用JAVASCRIPT脚本控制 DataGrid
中
连接到...
Ya
sh
anDB服务端个人版安装部署
介绍 崖山
数据库
系统Ya
sh
anDB是深圳计算科学研究院完全自主研发设计的新型
数据库
系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式...
【Vista之家编译】Windows Vista兼容软件列表大全!!
一、在Windows Vista下面完全兼容的软件: Academic 学术类 * MathWorks MatLab 2006a (32-bit) Vista之家备注:MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了...
ACloudGuru 博客
中
文翻译(四)
这一新的存储功能将允许您
直接
在欺诈检测器
中
发送和存储您的欺诈数据。您还可以上传历史事件数据来训练机器学习模型,并让这些模型将历史背景应用于新事件,自动计算购买频率和帐户年龄等信息。事件数据集会随着每个...
AWS 管理权威指南第二版(二)
在将 CodeCommit 配置好并为我们的 WordPress 应用程序做好准备后,我们可以继续使用另一个可以实际将代码部署到成千上万 EC2 实例的 Code Suite 服务!这就是 AWS CodeDeploy 的介绍!AWS CodeDeploy 本质上是一个...
PowerBuilder
1,108
社区成员
66,453
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章