BCB执行MS SQL脚本,遇到子程序就出错

winapp 2003-09-17 05:30:24
用BCB执行MS SQL数据库生成的脚本文件,读一行就去掉注释再加"\r\n"保存到strSQL里面,读到GO就执行。
但是遇到一个问题,我执行到
if ..... GOTO ABC
.......
ABC:
.......
就出错了,但是我把语句拷贝到MS SQL企业管理器里执行就没事;而且我把strSQL里面的语句拷贝到MS SQL企业管理器里,去掉里面的\t \r\n之后也执行也是正确的。
好像是格式错了,请帮我看看,以下是我strSQL里面的内容,当然不是全部代码,我稍稍该了。

:00DB81C0 "\r\n\r\n\r\nCREATE PROCEDURE dbo . pro_A \r\n( \r\n \t@unitid \tchar(10),\r\n@issuccess int= 0 output \r\n) \t\r\n AS\r\n begin transaction\r\n \r\n \tinsert into net_http\r\n \t\t (unit_id )\r\n \tvalues\r\n \t\t (@unitid) \r\n if @@error <> 0 goto ERR_HANDLER\r\n commit transaction\r\nselect @issuccess=@@error\r\nreturn\t@issuccess\r\n\r\nERR_HANDLER:\r\n\trollback tran\t\r\n\tselect @issuccess=@@error\r\n\treturn\t@issuccess"
...全文
71 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
winapp 2003-09-25
  • 打赏
  • 举报
回复
我自己搞定了,ADOQUERY控件的paramchek属性为false,在写入SQL属性前先Paramters->Clear(),然后就搞定了。
梦回童年001 2003-09-21
  • 打赏
  • 举报
回复
你用SQL自帶的SQL事件查看器來看看到底BCB生成了什麼樣的SQL代碼。

看看是不是要加上QuotedStr這樣的引用。
runnerrunning 2003-09-19
  • 打赏
  • 举报
回复
大概是冒号的问题
leimin 2003-09-18
  • 打赏
  • 举报
回复
BCB的ADO控件的一直不是很好,你到BORLAND的网站去看看有新的FIX么?
winapp 2003-09-18
  • 打赏
  • 举报
回复
求求大家了,谁搞定了再给100分。
winapp 2003-09-18
  • 打赏
  • 举报
回复
我刚才在
try{……}
catch(...)
{
把strSql里面的内容输入到一个文本文件erro.txt中;
}
再把文件打开看,里面的SQL代码要多规范有多规范,我把文本中的代码拷贝到企业管理器中执行,成功执行,没有半点问题!看来是不是BCB的ADO控件的毛病哦?我用的是TADOCommand。
zhpsam109 2003-09-18
  • 打赏
  • 举报
回复
BCB好像不认识goto!
winapp 2003-09-18
  • 打赏
  • 举报
回复
zjcxc说的没错,可是我现在的文本是一行一行组合的,主要是因为脚本里面有很多注释需要过滤掉,基于过滤的效率考虑的。
还有我这些代码就是要添加存储过程,“ERR_HANDLER:……”都是存储过程的内容,所以不能拿出来专门执行, leimin(黄山光明顶)的主意倒是可行,可是SQL里面那么多 "GOTO ERR_HANDLER",好像不好都该吧?
请大家帮我想想是否是格式上有什么问题,比如哪里是否要顶格啊,换行啊,分开啊之类的。
下面是错误提示:
project sdddf .exe raised exception clsaa EOLeException with message 'Parameter object is improperly defined.Inconsistent or imformation was provided'.process stopped.Use step or Run to continue.
zjcxc 2003-09-18
  • 打赏
  • 举报
回复
试试,不要做任何改动.
读取文件内容到变量中,遇到go就执行.

我的程序是这样做的,一直没错.
tanbi52 2003-09-18
  • 打赏
  • 举报
回复
这个我知道啦,因为早几天我也遇到了同样的问题,查了我整整3个小时,是里面有冒号,bcb不知道怎么回事,有冒号在里面,就是不行,放在分析器里就行,你去掉就好了
zjcxc 2003-09-18
  • 打赏
  • 举报
回复
实在不行,调用isql来执行吧.
winapp 2003-09-18
  • 打赏
  • 举报
回复
我用的是BCB6,刚才我把脚本直接拷贝到ADOCOMMAND的COMMAND->TEXT属性里面,可是执行还是报相同的错,但是如果拷贝到企业管理器里面执行就没错了,晕啊!
runnerrunning 2003-09-18
  • 打赏
  • 举报
回复
那你这直接把你的程序发过来给我吧,我给你写好,再发给你
不要戴第三方控件阿

wyb@2hu.com

qq: 14525554
jishiping 2003-09-18
  • 打赏
  • 举报
回复
我实际上从来没有用ADO控件写过程序,这样的话我也不知道了。也许是ADO控件的问题吧。
不知道你用的是哪个版本的BCB?BCB5有一个ADO的补丁,如果是BCB5,需要打ADO的补丁。
梦回童年001 2003-09-17
  • 打赏
  • 举报
回复
UP
OpenVMS 2003-09-17
  • 打赏
  • 举报
回复
把\r \t \n等去掉,把语句写在EXEC ' '里看看
leimin 2003-09-17
  • 打赏
  • 举报
回复
CREATE PROCEDURE dbo . pro_A
……
AS
……
if……Goto ERR_HANDLER/*跳转*/
……
ERR_HANDLER:
/*子程序*/

用GOTO语句做错误处理不好,会造成整个SP的逻辑不清,一般GOTO语句的数量和代码的质量是成反比的!

SP的错误处理应该这样:
CREATE PROCEDURE dbo . pro_A
……
AS
……
DECALRE @RC INT
SELECT @RC=0

if(@RC=0)
BEGIN
SELECT.....
UPDATE...

SELECT @RC=@@ERRRO
IF @RC<>0
BEGIN
SELECT @RC=-5001
RETURN @RC
END
ELSE
....



pengdali 2003-09-17
  • 打赏
  • 举报
回复
master.dbo.xp_cmdshell 'osql -U 用户名 -P 密码 -i c:\***.sql'
pengdali 2003-09-17
  • 打赏
  • 举报
回复
master.dbo.xp_cmdshell 'osql -U 用户名 -P 密码 -i c:\***.sql'
runnerrunning 2003-09-17
  • 打赏
  • 举报
回复
啊,如果只这样,那么你这样处理了
遇到:
ERR_HANDLER
把ERR_HANDLER部分的程序读入到一个String中,然后执行,同时标记以后遇到
goto ERR_HANDLER就执行该String而遇到ERR_HANDLER节就跳过
这样应该是可以
加载更多回复(5)
Report Machine 3.0 =================== 这是一个报表控件包,For Borland Delphi Versions 4,5,6,7.100% 源码. 最后更新日期:2003.4.15 目录 ----- 1.说明 2.特点 3.最后更新 4.历史 5.安装 6.Demo程序 7.注册 8.版权说明 9.感谢 1.说明 ---- Report Machine是一个报表控件包, Report Machine is reporting tool component. It consists of report engine,designer and preview. Its capabilities comparable with in QuickReport,ReportBuilder. It written on 100% Object Pascal and can be installed in Delphi 4/5/6 and C++Builder 5/6. 2.特点 ---- 复杂的报表?在report machine面前,还会有什么复杂的报表存在吗? 不,不会有的,因为这是一个功能强大,完全自动化、完全自由设计的报表控件。 对于一般的主从表,单表,你甚至只需要点动鼠标次数=你的数据字段个数就可以 完成一个完全自定义的,并且支持用户进行格式修改加工,重新设计格式的报表! 想想fast report 吧,report machine会fast report会的,还会它不会的! 这是一个完全中文化报表控件,支持delphi3到delphi6,BCB3到BCB6。 它的最大优点就是:强大与自由! report machine目前主要能做的: 一、支持屏幕打印,控制方法多样,可以打印全部rxlib控件 全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book, TDecisionGrid等等众多控件。 二、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位 置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发 一个报表只需几分钟的时间。 三、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成 报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印, 而不需要数据库。 四、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。 五、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以 通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。 六、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的 地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分 组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。 七、完全支持d4--d7,c5--c6。 八、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程 序脚本,以控制、或实现更复杂的打印效果。 九、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。 十、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。 十一、多种格式转换,可以把做出的报表转换为html,xml,bmp,jpeg等等格式。 十二、自动对超长记录折行,超长的内容也会自动折行。 十三、最新增加TRMGridReport,类似于电子表格,非常非常适合制作复杂报表 最新更新和问题解答请访问论坛:www.pcjingning.com 3.最后更新 -------- v.3.0(Build 2003/04/15) - 发布ReportMachine3.0 4.历史记录 -------- 2003.04.15 Report Machine 3.0 5.安装 ----- 以在delphi5中安装举例,在别的版本delphi中请用相应版本的包,比如在delphi6中, rm_r50.dpk换成rm_r60.dpk即可 1.首先安装tb97,或者将tb97中的源程序释放到c:\rm\source目录中,tb97下载地址: http://www.reportmachine.net/download/tb97.zip 2.在Delphi IDE中卸载以前的Repo
1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book,TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印,而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计器,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计器(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动填空行,每页打印数量等细节处理更完善。
ReportMachine for delphi xe5  Report Machine目前主要能做的:   1、支持屏幕打印,控制方法多样,可以打印全部rxlib控件 全部InfoPower控件,TDBGrid,TStringGrid,TImage,TEdit等,TDBGridEh,f1book, TDecisionGrid等等众多控件。(例子1,例子2,例子3,例子4,例子5)   2、支持最终用户设计、修改报表,只需连接相关的数据源,指出数据的位 置(设置报表样式),无论是主从表,子报表,套表,都可迅速生成。开发 一个报表只需几分钟的时间。   3、报表样式可以保存为rmf格式,下次可通过读入使用(配合SQL脚本就可以生成 报表)。并可以把带数据的报表保存为rmp格式,在任何机器上都可以浏览、打印, 而不需要数据库。   4、生成后的报表支持修改,包括字体的设置,边框的设置,修改内容等。   5、报表编辑器内自带ado,bde,ibx,Diamond dao,dbisam等数据访问控件,可以 通过这些控件开发独立的报表制作工具。其使用方法和delphi中的控件是一样的。   6、完全、自由自定义页面、边距、字体,标题和页眉页脚,并可以在自认合适的 地方插入函数来实现当前日期,页合计,总合计等功能,合计字段可以放在页头,分 组头,并支持条件合计,对分组合计,分页合计,总计等只需简单地设置属性即可。   7、完全支持D5--D7,BCB5--BCB6。   8、报表中可以在自认合适的事件(on beforeprint,on afterprint等)中加入程 序脚本,以控制、或实现更复杂的打印效果。   9、更新迅速,可根据使用人员与用户的意见,不断的加入新的功能。   10、多种格式转换,可以把做出的报表转换为html,xls,pdf,bmp,jpeg等等格式。   11、自动对超长记录折行,超长的内容也会自动折行,中文换行不会乱码。   12、首家支持缩放打印功能,可以根据打印时选择的纸张自动缩放报表。   13、首家支持即打即停.   14、首家提供类似excel的报表设计器,给你足够灵活方表的报表设计方式。   15、首家提供双报表设计器(第一种,第二种),满足所有的需求。   16、更是提供类似于ObjectPascal的script,实现特殊功能。   17、首家提供web,IntraWeb中的报表解决方案。   18、首家提供报表压缩处理,占用内存更少,生成报表速度更快。   19、首家提供合并单元格功能,更加适应处理复杂的中文报表。   20、自动填空行,每页打印数量等细节处理更完善。 二、ReportMachine版本简介: 1、VCL版:这是ReportMachine基础版本,一般以全部源码形式提供给注册用户,可以用在Delphi5-Delphi 2009,C++ Builder5.0-C++ Builder 2009开发环境中。 2、com版:是个单独的ocx文件(RMReport.ocx),是用Delphi 7.0及以上版本开发的,是对VCL版ReportMachine控件的再封装,具有VCL版的全部功能,安装、使用上更容易些,com版的ReportMachine可以用在vb,vc,vfp,pb等开发语言中。一般以ocx无源码形式提供,也可以有全部源码(包括vcl源码+ocx源码) 3、com版for .net WinForm:跟com版一样,但多了个.net下的数据库接口程序,此版可以用在vb.net,c#中,做winform程序的报表工具。一般以ocx无源码形式提供,也可以有全部源码。 4、webreport版:是对ReportMachine vcl版的再开发,用在asp,asp.net,jsp做的b/s架构的程序中,为客户端ie提供报表预览、打印、导出功能,webreport包括2部分:服务器端报表引擎(在asp,asp.net,jsp都能用,webreport对上述3中语言都开发了报表引擎)、客户端ie浏览器ActiveX插件(ActiveX插件只有一个,可以自动感知服务器端报表引擎版本)。webreport版不具备设计报表模版功能,需要用单独的报表设计程序在服务器端设计报表,也可以用本站提供的RMDesigner。 5、webreport for IntraWeb版:跟webreport版功能一样,是专为Delphi中的IntraWeb vcl提供的报表插件。 6、RMDesigner:是用vcl版ReportMachine开发的一个报表设计器,可以用来为webreport提供报表设计功能。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧