線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1041
推到 Plurk!
推到 Facebook!

如何编写安装数据库进SQL2000程序?

尚未結案
plmm25
一般會員


發表:15
回覆:6
積分:4
註冊:2004-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-20 16:15:54 IP:220.184.xxx.xxx 未訂閱
我想做一个程序,用于安装数据库,专门负责将我的数据库,比如2C_Data.MDF和2C_Log.LDF装入指定的文件夹,比如c:\2cdata\并且让SQL SERVER 2000装入这个数据库,就是自动安装数据库,不要人为实现的意思,请大大指点
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-20 16:46:48 IP:203.95.xxx.xxx 未訂閱
建議你利用產生 schema 的方式來進行會比較理想, 在 MSSQL 中, 可以利用 enterprise 管理工具產生資料庫的 script, 這樣方便你進行在其他的資料庫上建立, 若是你除了 schema 外, 還要包含資料的話, 建議你利用轉檔的方式將資料轉入, 相信這樣的包裝對使用者會更方便, 因為一般的公司, 我想應該很難接受給你權限將 mdf 及 ldf attach 進 database 吧, 這會有安全性上的問題存在.
plmm25
一般會員


發表:15
回覆:6
積分:4
註冊:2004-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-21 00:43:24 IP:220.184.xxx.xxx 未訂閱
谢谢大大,但请否将schema的使用方法详细的说明一下,数据库中的触发器和存储过程是否也会被加入?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-21 09:49:46 IP:203.95.xxx.xxx 未訂閱
使用 enterprise 管理工具, 依照下面的圖示, 1. 對你要產生 schema 的資料庫按右鍵, 如圖選擇功能, 2. 依照你要產生的相關物件選擇, 如圖, 3. 在選項中設定相關資訊, 如圖, 4. 在按下確定後, 會進行存檔, 將該 schema 的 command 存好用, 用文字編輯器看看有沒有什麼問題, 也可以進行手動的修改, 依實際的需要來調整即可! 資料庫中的 trigger 及 stored procedure 當然可以加入, 可以看步驟 3 就明白了!!
plmm25
一般會員


發表:15
回覆:6
積分:4
註冊:2004-04-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-21 13:27:06 IP:220.184.xxx.xxx 未訂閱
太感谢楼上这位大大了,说的很详细了,我在查询分析器里试了一下完全OK,但我的目的是想做成一个DELPHI的EXE文件,做成一个数据库安装程序,首先输入SQL服务器IP,SA密码,然后选择数据库安装目录,就是MDF和LDF存放的路径,然后就类似查询分析器一样运行外部的某个.SQL文件,创建数据库,这样的功能有可能实现吗?再次万分感谢
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-21 17:04:43 IP:203.95.xxx.xxx 未訂閱
可以啊, 你有沒有注意到產生的 .sql 檔前面就有一段,    
CREATE DATABASE [test]  ON (NAME = N'test_Data', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Data.MDF' , SIZE = 2, FILEGROWTH = 10%) LOG ON (NAME = N'test_Log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' , SIZE = 1, FILEGROWTH = 10%)
 COLLATE Chinese_Taiwan_Stroke_CI_AS
GO
其中的 filename 參數就是指定要用的 mdf 及 ldf 檔的位置, 由 create database 語法來產生, 可以依你的需要來置換, 但要注意的是, 這個路徑是在該 server 上的哦, 不是 local 的. 要執行這些 sql command , 可以使用 adocommand 來執行即可!!
plmm25
一般會員


發表:15
回覆:6
積分:4
註冊:2004-04-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-22 23:34:02 IP:220.184.xxx.xxx 未訂閱
我将导出的.SQL文件全部内容复制到adocommand里,运行到第3行就说'SQL'错误 IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'2C') DROP DATABASE [2C] GO 我看了一下在'GO'这里就出错了,是不是adocommand一次只能完成一次批处理,GO 不支持呀?谁能教我怎么样将正个数据库的schema全部执行啊~急
dengguo
一般會員


發表:41
回覆:49
積分:23
註冊:2004-01-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-05-24 08:17:31 IP:218.16.xxx.xxx 未訂閱
HI.plmm25: 你可以試下在程序中放入一個ADOQuery控件和一個ADOConnection控件,然後在程序中加入 ----------------------------------------------------------------------   ADOQuery1.close;   ADOQuery1.SQL.Add('exec sp_attach_db @dbname=N''2C'',@filename1=N''c:\2cdata\2C_Data.MDF'',@filename2=N''c:\2cdata\2C_Log.LDF''');   ADOQuery1.ExecSQL; ----------------------------------------------------------------------    ############################### 初學delphi,請各位多多提點!謝謝! ###############################
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-05-24 11:01:13 IP:203.95.xxx.xxx 未訂閱
GO 是一個虛指令, 不能用在 ADOCommand 中, 僅在 SQL Analyzer 中使用, 為避免這個問題, 我們可以使用切割指令的方式來操作, 將每一個 GO 分開送往資料庫執行即可, 如,    
procedure TForm1.Button1Click(Sender: TObject);
var
  strs: TStringList;
  sCmd, sSchemaCmd: string;
  i: integer;
begin
  // load from .sql file
  strs:= TStringList.Create;
  strs.LoadFromFile('c:\n2.sql');
  sSchemaCmd := strs.Text;
  strs.Free;      // split every command by 'GO'
  i := Pos('GO'#13#10, sSchemaCmd);
  while i>0 do
  begin
    sCmd := Copy(sSchemaCmd, 1, i-1);
    ADOCommand1.CommandText := sCmd;
    ADOCommand1.Execute;
    Delete(sSchemaCmd, 1, i 3);
    i := Pos('GO'#13#10, sSchemaCmd);
  end;
  ShowMessage('ok');
end;
弟用了 'GO'#13#10 來切割原來的 command, 再分次送給 sql server 執行即可!
系統時間:2024-05-18 22:20:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!