如何在delphi中执行MS SQLSERVER SQL脚本(100分)

A

awu306

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做一个服务器端的安装程序(用delphi),这个程序的功能是:帮用户新建一个数据库(当然这个库包含了很多设计好的表、存储过程等),用户可以指定数据库名称、数据文件安装路径;
我采用的方案是,生成脚本,然后在用户的机上执行。我曾经尝试用oSQL.exe来执行SQL脚本,可是我不知道具体怎样做。如果用ADOQuery控件的话又装不下这么多的SQL语句(万多行),当我分批执行时又总是出错,而且效率很低。
请问应该怎么做? 有更好的方法吗? 请指教。

 
放在文件中,分批调
 
我建议你不要用执行脚本的方法建立数据库,存储过程触发器的脚本执行起来很容易出错,我有这方面的教训。建议你用打一个备份,在程序中回复,或直接拷贝mdf和ldf文件用程序附加一个新数据库
 
用ADO就可以,我在ADOQUERY1.LOADFROMFILE('a.sql')
然后就执行啦,要么就用SDAC控件包。
 
用 ADOQuery1.LoadFromFile('aa.sql');
ADOQuery1.execsql;
的方式不行吗?不会吧
 
就是用ADO 我做过。3M的角本都可以
 
to 迷糊
可是我只想要库结构不要数据,还有没有其它的办法?
to lgxyy
我就是用ADOQuery做的,因为执行时不能有GO语句,我只好一批批执行,但还是通不过。脚本是没有问题的,在查询分析器中完全正常。
能不能说说你的方法,请帖出代码给我参考一下。
 
不知有没有试一下 SQLDMO
.
要是实在不行就调用 isql / oSql , 最好写到BAT脚本文件里, 改的时候好改.
用的时候直接调用 BAT 就可以了.
用法:
输入: isql -?
查看一下, 讲得非常清楚.
如:
isql -Usa -P123 -Slocalhost -iYourSQLFile.sql
 
to gear1023
SQLDMO是什么? 请你再详细说一下。
如何运行isql? 是否用:ShellExecute (self.Handle,'open','isql.exe','','',SW_SHOW);
可是isql的参数怎么赋?
 
在SQLSERVER里面写一个存储过程。
然后在DELPHI里面调用这样语句清晰些,把大量繁琐的语句在SQL里完成。
 
在导出脚本时,一定要注意是WINDOWS 文本(ANSII)格式的,我也曾试过有GO语句的问题,当我注意到这一点后,就没有问题了。
 
写存储过程吧!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2224935
 
用存储过程是不现实的,因为创建的数据库是一个空库,不可能有用户的存储过程。
我现在是用isql做的,可以实现。只不过如何用进度条来显示进程? 因为弹出的isql是
一个独立的程序,我不知道它什么时候结束。
to gear1023
我想听听你的意见,请赐教,谢谢。
 
先進行分析呀!
使用 TStrinList 載入 SQL,再一行一行地分析,碰到 GO 則將此行之前的 SQL 語法
執行(ExecSQL)。
就是多次執行 ExecSQL 的意思!
 
作个模板,然后备份,安装再恢复不行吗?
 
to jiichen
我之前就是这么做的,但执行到一半多一点时就出错(但脚本在查询分析器可以通过)
to JamesBond_L,
你能不能说得具体一点, 谢谢。
to all
谢谢各位仁兄,我现在用isql已经可以实现了,本应该结帐,但还想再问一个问题:如果我想做一个进度条显示创建数据库的进度,我怎么知道isql.exe已经执行完脚本并关闭?
或者有没有更好的方法?
谢谢!!!!
 
没有人能回答吗?,帮帮忙....
 
多人接受答案,结帐了
 
顶部