社区
数据库相关
帖子详情
在Delphi中,用SQL脚本更新存储过程?
wakeupsleep
2002-11-08 04:13:13
我的存储过程是从SQL Server 中生成的,想用Delphi控件执行SQL脚本,达到更新存储过程的目的,现发现有两个问题:
1、SQL脚本中的GO语言,Delphi不支持,运行出错(这个可以解决)。
2、因为SQL脚本是先将存储过程删除,再建立的,即CREATE PROCEDURE前面肯定还有别的语句,而Delphi的提示是“CREATE PROCEDURE在查询中必须是第一条语句”,一直解决不了!!
请问有好的解决办法吗?
...全文
185
16
打赏
收藏
在Delphi中,用SQL脚本更新存储过程?
我的存储过程是从SQL Server 中生成的,想用Delphi控件执行SQL脚本,达到更新存储过程的目的,现发现有两个问题: 1、SQL脚本中的GO语言,Delphi不支持,运行出错(这个可以解决)。 2、因为SQL脚本是先将存储过程删除,再建立的,即CREATE PROCEDURE前面肯定还有别的语句,而Delphi的提示是“CREATE PROCEDURE在查询中必须是第一条语句”,一直解决不了!! 请问有好的解决办法吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wakeupsleep
2002-11-11
打赏
举报
回复
我看了,不管执行成功与否,winexec返回值都是33,奇怪!!
wakeupsleep
2002-11-11
打赏
举报
回复
还有个问题,用WinExec、ShellExecute调用isql如何捕获sql的具体错误呢,看帮助说返回值小于31(32),就说明出错了,但好象不太正确,如:
WinExec(PChar('isql -Usa -P -Slzx -dchss -i"d:\dcreatesp.sql"'), SW_Hide);
文件d:\dcreatesp.sql不存在,它的返回值是33,这怎么解决?
wakeupsleep
2002-11-11
打赏
举报
回复
我好象还发现个问题,就是ADO的一个控件好象不支持标签,而TDataBase控件可以,象下面的代码(只是试验用的):
if 1 < 2
goto tt
commit tran
tt:
return
在ADO下运行出错,而TDataBase里可以通过!
hfclql(三毛):
我试了搜索GO#13可以实现!
firetoucher
2002-11-09
打赏
举报
回复
在服务器端编写一个存储过程,用他来执行DROP CREATE 或ALTER操作,这样在客户端只需调用这个存储过程,而且避免了两次分别调用DROP CREATE万一后一句CREATE出错而引起存储过程丢失。
腊月三毛
2002-11-09
打赏
举报
回复
因为SQL SERVER的块语句执行的以GO为块分隔,而Create Procedure一定是要在块的第一句,而TQuery或是TADOQuery都是执行一块语句的,不支持GO。所以你只有分开运行,楼上的有些是可行的,但是如果服务器和客户端是分开的(而且多数都是这样子的,我想只有程序员的才是一台机)就根本没用了。搜索GO是不现实了,比如你要执行脚本文件时,无法保证变量或是字段名称中不包含GO的。我的解决方法笨的一些,但还是有用的。我自己在脚本里每个块与块之间用固定个数的‘----...’分隔,然后运行时扫到该行就让Query执行一次。这样就是可能会运行很多次Query了。
windindance
2002-11-09
打赏
举报
回复
这个文件为什么要在客户端?
如果必须要在客户端执行,那就让他装个SQL 客户端好了,要不在安装程序中安装MSDE也行。
或者……你用SOCKET把文件传到服务器……好笨的方法……*^-^*
CloneCenter
2002-11-08
打赏
举报
回复
服务器端的 osql 执行要装入 SQL 文件,要是这个文件在客户端怎么办?
windindance
2002-11-08
打赏
举报
回复
或者软件中绑定osql.exe行不行?
windindance
2002-11-08
打赏
举报
回复
服务器有没有SQL文件?
如果有,这样行不行?
在存储过程中使用
exec xp_cmdshell 'osql ....'
wakeupsleep
2002-11-08
打赏
举报
回复
我试过用ShellExecute(Application.Handle, 'open', 'C:\Program Files\Microsoft SQL Server\80\Tools\Binn\isqlw.exe',
'isqlw /U sa /P /S lzx /d chss /q /f d:\CreateSp.sql', nil, SW_HIDE);
我怎么只是把*.sql文件装载进来了,而且查询分析器显示出来了,它不运行,上面的代码有什么问题(isqlw和/q有无都一样)??
wakeupsleep
2002-11-08
打赏
举报
回复
caoyq(草民呆瓜)
这叫是正确答案啊???
wakeupsleep
2002-11-08
打赏
举报
回复
难道真的只能找到一个GO,就取出其前面的SQL语言执行后,再往下找直到最后?
shuangsa(双萨)
这叫是正确答案啊???一个*.sql包含多个更新存储过程的代码,问题是如何把*.sql文件(我把它解析存在一个字段里)按GO#13#10分割执行!
windindance(风舞轻扬)
你的做法我想过,主要是客户端不一定安装了SQL查询分析器。
CloneCenter
2002-11-08
打赏
举报
回复
好长时间没有看到我们的大斑竹 “windindance(风舞轻扬) ”回答问题了。不过上面有个问题,要是别人没有安装 SQL 的客户端怎么办??
其实遇到 SQL 中的那些 GO 之后,就提交到服务器执行就可以了。GO 并不是真正的 SQL 语句。
windindance
2002-11-08
打赏
举报
回复
WinExec(osql -Usa -P -S(local) -dDataBase -i"1.sql"');
caoyq
2002-11-08
打赏
举报
回复
回答正确。给分吧。
shuangsa
2002-11-08
打赏
举报
回复
1、执行“DROP PROCEDURE”语句
2、执行“CREATE PROCEDURE”语句
注意:以上两个语句分两次先后执行,不要把两个语句放在一起执行
自编实用的
SQL
脚本
管理工具(
DELPHI
7)
用
delphi
7自己编实用的
SQL
脚本
管理工具(Txt文档管理工具),提供源码!
sql
脚本
执行
delphi
操作
sql
数据库,执行
脚本
文件。含源程序所有代码
delphi
编写的
SQL
语句生成器(不是
sql
语法解析器)
delphi
编写的
SQL
语句生成器(不是
sql
语法解析器) 就是所谓的“
Delphi
SQL
查询分析器”.
Delphi
SQL
Server数据库备份程序_
delphi
_
SQL
_Server
Delphi
_
sql
server_
sql
server 程序化备份
sql
mon 可以监控
delphi
编写的程序访问
sql
server的
脚本
先运行
sql
mon。然后运行使用
delphi
编写的程序,可以监控
delphi
编写的程序访问
sql
server的
脚本
。
数据库相关
2,507
社区成员
88,447
社区内容
发帖
与我相关
我的任务
数据库相关
Delphi 数据库相关
复制链接
扫一扫
分享
社区描述
Delphi 数据库相关
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章