您的位置: 首页 >> 新闻中心 >> 计算机 >> 软件开发
经验技巧:分享两条Delphi开发经验
精英教育阅读提示:要在客户端执行一个创建数据库的程序,数据库要在服务器上创建,但路径可以手工输入,这时就面临一个判断自已现在输入的路径在服务器上是否存在的问题,免得在执行Create Database SQL时才报错:找不到路径。
■ 最新课程推荐更多课程>>
学校培训课程开课时间上课地点精英价报名
正辰培训 微软软件测试工程师电话预约西直门教学区¥4704
新 科 海 软件测试工程师就业班电话预约海淀长远天地¥6280
北 师 大 软件工程与测试实战班电话预约北京师范大学¥1800
金 同 方 计算机等级二级C++ 电话预约人大总部¥784
北 师 大 平面设计创意全科班电话预约北京师范大学¥1300

  近期在做“数据库切割工具”时,碰到了一些棘手的问题,经过多方打探、查找,最终得以解决,现总结下来,给大家共享,免的大家以后在碰到类似问题时再耗费大量时间去查找、去打探!

  1、判断输入的路径在服务器上是否存在:

  例如,要在客户端执行一个创建数据库的程序,数据库要在服务器上创建,但路径可以手工输入,这时就面临一个判断自已现在输入的路径在服务器上是否存在的问题,免得在执行Create Database SQL时才报错:找不到路径。

  具体方法如下:

  exec master..xp_cmdshell 'dir E:\DATA' ,在查询分析器中执行此段SQL,如果存在此路径,会输出此路径下的所有文件与文件夹信息,还有此盘的可用字节数与已此文件夹的字节数(图1所示);如果此路径不存在,则输出信息如图2所示,提示“找不到文件”。

  但是,当路径中含有空格时,如C:\Program Files,直接用exec master..xp_cmdshell 'dir C:\Program Files',系统返回结果会如跟图2显示一样,我们需要做额外处理,才能得到正确的返回结果:

  (1)exec master..xp_cmdshell 'dir "C:\Program Files\Microsoft SQL Server\MSSQL"'

  这种写法,在查询分析器中直接执行是没有问题的,也能返回正确结果,但如果放到程序中执行:

  SQL.Add('exec master..xp_cmdshell ''dir "C:\Program Files\Microsoft SQL Server\MSSQL"''),Open时就会报错,不能执行。

  为什么呢???

  (2)我们接下来查看SQL联机帮助,对XP_CMDSHELL的描述如下:

  xp_cmdshell {'command_string'} [, no_output]

  参数

  'command_string'

  是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(255) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以 上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办 法。

  no_output

  是可选参数,表示执行给定的 command_string,但不向客户端返回任何输出。

  帮助文件提示我们要用一对引号将文件路径或者程序名称包起来,将整个路径包不起来不会报错,那我就将带有空格的单步路径包起来试试,看看行不行,执行 如下SQL:SQL.Add('exec master..xp_cmdshell ''dir C:\"Program Files"\"Microsoft SQL Server"\MSSQL''),这样Open时果然不报错了,看来查询分析器的语法检查与我们的Query自己的语法检查还是有一定区别的,不能等同的。因此,碰到路径中带空格的情况,正确的写法还是:

  exec master..xp_cmdshell 'dir C:\"Program Files"\"Microsoft SQL Server"\MSSQL'

  这同时说明SQL帮助文件中的绿色字体部分 command_string 不能包含一对以上的双引号 的描述是不正确的,看来SQL Server帮助文件与产品也出现了“规格与程序不相符”的问题了,呵呵......

  2、清空数据库的日志文件

  问题的引出:我们的切割过程就是将单据数据中某个日期以前的数据先复制到新的数据库中(select ... into ...),然后再将原来数据库中的这些数据删除,这样操作在数量量很大的数据库上时,其日志文件的增长也是惊人的:我复制一个48万条记录的表时,最后发现仅这一个表的操作就使新数据库的日志文件增加了170MB,如果不加清理,那就会被日志文件占用大量宝贵的磁盘空间。况且,我们转移到的新建数据库的作用也只是用来查询,以后不会有任何Insert、Update、Delete操作的,要这些日志文件没有什么用处,因此必须在向它转移数据的过程中做一些缩小日志文件的处理,怎么办??问题由此而生...

  (1)处理过程中不记录日志

  设置方法如下:企业管理器中打开对应数据库的“属性”,页框“选项”中将“模型”改为“简单”。这样设置的结果是对此数据库的任何操作都将不记录事务日志。对应的SQL为:EXEC sp_dboption @pdbName, 'trunc. log on chkpt.', 'TRUE'

本新闻共2页,当前在第1页  1  2

  影视动画培训   北大BEC培训官方报名网站   2008美国夏令营启航官方指定报名网站   2008留学第一站!  
  北师大 火星时代
共举影视动画培训之鼎
  北大BEC培训官方报名网站
现在报名独享93折!
  2008美国夏令营启航!
美之旅官方报名网站
  2008留学第一站
留学资讯尽在精英留学站!
 
上一篇:DLL 库内存共享机制
下一篇:熊猫烧香病毒核心源码 用Delphi版模仿
 相关新闻
·2006年下半年软件设计师考试答案·我从外行到专业的软件测试工程师
·软件工程师现有工作满意率仅为7.1%·软件资格和软件水平考试的业界评价
·风雨过后见彩虹 谈我的软考经历·自学通过软件设计师考试后的一些感想
·关于软件资格水平考试,我很想说几句·从软件设计师试题看软件测试七原则
·软件设计师考试必看 如何应考?·45天考过软考中级信息系统监理师心得
·软考超级Fans-五次软考心路历程·计算机软件水平考试应避免的五大失误
·通过软件设计师考试 专业能力很重要·2007年软件测试工程师需求继续增大
·从人性格看哪些人不适合做软件测试·软考三考三捷 我是怎么备考和应考的
 
◇ 重点栏目导航
◇ 精英服务承诺
教育顾问:010-51660910
QQ交流:138660910
相关资料
·软件测试新手的修炼之路
·Smarty简体中文参考手册
·Struts中文手册
·Struts快速学习指南
·ultradev动态网页制作教程
·UML工具箱
·《设计模式》中文版
·学友Flash伴侣 1.11
·阿须图像水印(AssureMark)V2.0
·超级语霸
相关试题
·2008年6月大学英语四级考试B卷试题
·2008年6月大学英语四级考试A卷试题
·2008年6月大学英语六级考试真题参考答案
·2008年6月大学英语六级考试真题(A卷)
·2008年6月大学英语六级考试听力原文及参
·2008年6月英语四级考试B卷试题参考答案(
·2008年6月英语四级考试B卷参考答案
·2008年6月英语四级考试A卷参考答案
·2008年6月英语六级阅读答案
·2008年6月英语六级完形填空答案
相关热贴
·如何改QQ IP地址!
·恰当选择软件测试自动化方案
·ADO.NET学习总结
·.net操纵xml文件类(c#)
·VPN技术详解
·Log4net教程
·Web2.0时代,RSS你会用了吗?(技术实现总
·高手必读 网络端口安全防护技巧放送
·访问XP共享出现的问题解决办法
·.NET下正则表达式应用的四个示例