Q:
现在我的情况是: 已经安装了SQL SERVER,我自己做个安装程序(当然用DELPHI编写),
需要在SQL上建立一个名称为MyServer1的数据库,然后对该数据库使用已经有的三个
.SQL语句创建结构,应该怎么实现? 如果有人能解决问题,愿意再加200分!
方法一:
------------------------------------------------------------------------------------------
我作过类似的东西,而且很多国内出名软件企业也用相同方法。
可以作一个外挂配置程序,或作在本程序内(要非常严谨)
1:连接Master.如不成功报错退出。
2:在Master里执行建库操作
if not exists (Select * from sysdatabases where Name = 'TestServer' )
Create Database TestServer
3: 连接TestServe,在其中建用户,建表,
参考方法:SQL语句从脚本文件里读出来。
注意问题:前面一个老兄说的没错,表可以放在一起建,存储过程和视图最好一个一个
的建。
上述方法是通用的,不分连接方式(BDE,ADO),还有多动手去做,其实你做了就并不难。
在有问题给我发信。
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------这个问题很简单,
在DELPHI中直接调用ISQL.EXE
建议最好控制在SERVER端运行,否则数据库物理文件的读写权限问题会很麻烦的。
具体如何实现不用我教了,相信你的能力。
快给分吧。
-------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
我觉得jamlog的方法应该可行,说具体点儿就是在程序里生成这么一句命令:
isqlw -S (local) -d MyServer1 -U sa -P -i d:/program/view1.sql -o d:/program/view1.txt
然后执行它,再利用-o参数后面指定的输出文件里的内容判断是否成功,再做进一步的处理。
------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
先建一个TSQL脚本文件,头用如下语句
use master
go
if (exists(select name from sysdatabases where upper(name)='DBNAME'))
drop database DBNAME
go
create database DBNAME
go
use DBNAME
go
...
在Delphi程序中,你可以调用ISQL来运行脚本
shellexecute(nil,'open','isql',params,'',sw_hide);
或用winexec吧
具体参数你可以看MS SQL关于ISQL的帮助
Delphi中调用CreateProcess API函数即可(该函数在在Windows.Pas单元中)
------------------------------------------------------------------------------------------
方法二:
-------------------------------------读.sql文件--------------------------------------------
我刚刚做了一个新建数据库的向导,这是创建表的函数(读.sql文件):
function TSqlManageFrm.CreateTable:
Boolean;
var
I: Integer;
str: string;
begin
result := false;
adoq1.Close;
try
adoq1.Close;
adoq1.sql.Clear;
adoq1.Sql.LoadFromFile(ExtractFilePath(application.ExeName) +
'DataBase.sql');
for I := 0 to adoq1.Sql.Count - 1 do
if Trim(adoq1.Sql[I]) = 'GO' then
adoq1.Sql[I] := '';
// str := adoq1.Sql.Text;
//SQL SERVER生成的脚本里都有'GO',但Delphi不认.在生成脚本的时候一定要把表、视图和存储过程分开创建脚本,不然Delphi会报错!
adoq1.ExecSql;
result := true;
except
MessageBox(GetactiveWindow(), '创建表出错!', '警告', MB_OK +
mb_iconexclamation);
exit;
end;
end;
-------------------------------------读.sql文件--------------------------------------------