建立数据库结构的两种方法

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文件--------------------------------------------

阅读更多
个人分类: 技术文章
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭