主题:煮茶入门讲座如何调试你的程序 主讲:D10.天地弦 Demo Tools:DebugTest 和EurekaLog v4.57 Enterprise Delphi.BCB (入门群里有共享)
Demo下载地址: http://www.cnblogs.com/Files/DKSoft/DebugTest.rar http://www.delphifans.com/SoftView/SoftView_1682.html
D10.天地弦 14:48:59 我在这个社区里经常看到一些问题 adoMain.Sql.Text :=’select * from Orders’+ +’ and OrderId = ’ + edOrderId.Text +’ and CustomerID = ’ + edCustomerId.Text D10.天地弦 14:49:05 为什么不行啊,这样的问题 D10.天地弦 14:49:24 这种问题讲完以后如果还有人问大伙都不要理了... D10.天地弦 14:53:02 只是一个比喻... D10.天地弦 14:52:43 大家打开DebugTest.bpg D10.天地弦 14:53:53 打开没有? D10.天地弦 14:52:29 现在开始第一个段落 风魂 14:54:00 开了 赤无极 14:54:04 打开听 D10.天地弦 14:54:09 大家配置一下ADOConnection... D10.天地弦 14:54:19 都会配置吧 D10.天地弦 14:54:32 是连到Northxxx数据库的... D10.天地弦 14:55:17 配置好了支一声... B13.往生无语 14:55:30 好了 B6.银狼 14:55:35 好了 D10.天地弦 14:55:47 可以运行程序了.. 在CustomerId输入值 ’VINET’ D10.天地弦 14:57:43 Start Query.. D10.天地弦 14:58:55 Start Query了没有? B6.银狼 14:58:58 输入VINET,出错 D10.天地弦 14:59:03 y B6.银狼 14:59:06 不输入,OK D10.天地弦 14:59:10 en D10.天地弦 14:59:16 大家先做到这一部 D10.天地弦 15:01:09 好了,现在我们来开始调试 D10.天地弦 15:01:46 即然是StartQuery出来的错误,那我们在BtnStartQuery.Click事件中开始分析 D10.天地弦 15:02:01 回到Delphi界面 D10.天地弦 15:02:15 打开主窗体... D10.天地弦 15:02:31 看到procedure TFMainForm.btnStartQueryClick(Sender: TObject); const MAINSQL = ’select * from Orders’; var lcondi: string; lsql: string; begin lcondi := InnerGetQueryCondITion; lsql := MAINSQL; if lcondi <> ’’ then lsql := lsql + ’ Where ’ + lcondi; adoMain.Close; adoMain.CommandText := lsql; adoMain.Open; end; D10.天地弦 15:02:35 这个函数... D10.天地弦 15:03:32 在函数体的第一个设置一个断点开始查找为什么会出错... 尖椒牛柳 15:03:33 看懂了 D10.天地弦 15:04:12 这堂课主要是教大家如果调试,以后可以自己搞定自己的问题... D10.天地弦 15:04:22 D10.天地弦 15:04:36 设置断点....按F9运行程序.... D10.天地弦 15:05:55 在CustomerId输入值按StartQuery... D10.天地弦 15:06:21 程序会返回到Delphi设置了断点的地方 { D10.天地弦 15:06:49 这里提一下F7,F8,F9这三个功能 D10.天地弦 15:07:42 F7是进入函数体.... F8是运行这一行,不进入函数体 F9从当前行开始运行 } D10.天地弦 15:08:00 现在按F8 D10.天地弦 15:08:06 执行当前行.... D10.天地弦 15:08:43 按F8直到弹出错误提示... D10.天地弦 15:09:37 大伙可以找到是哪一行执行的时候出现了错误? D10.天地弦 15:10:47 打开一个数据集的时候出错,结合弹出的提示可以看出来是CommandText设定出错了... D10.天地弦 15:10:49 对不... F6.Jeanvi 15:11:14 嗯. D10.天地弦 15:11:20 这样的错误是最好找的.... D10.天地弦 15:11:31 好,我们再来一次 小小 15:11:51 好 小小 15:12:02 继续啊 D10.天地弦 15:12:10 在adoMain.Open这一行停下来.... D10.天地弦 15:14:52 我们现在在Open之前看看到底Sql语句是什么东东 B6.银狼 15:16:12 怎么出来的啊 D10.天地弦 15:16:13 可以看到这个adoMain.CommandText的值(Sql)是什么了... D10.天地弦 15:16:31 在adoMain.Open这一行停下来 F6.Jeanvi 15:16:35 ctr+f7 D10.天地弦 15:16:45 adoMain.CommandText选定这个 D10.天地弦 15:16:51 按Ctrl + F7 D10.天地弦 15:17:16 select * from Orders Where CustomerID = VINET 看到这个值后,觉得这个值有错吗? D10.天地弦 15:17:50 如果觉得没有错马上打开 SQL 查询分析器将刚刚看到的值Sql粘贴到查询分析器里 B6.银狼 15:18:50 收到 D10.天地弦 15:19:09 再执行... D10.天地弦 15:19:29 在这里可以发现是不是Sql语句的问题.... D10.天地弦 15:19:46 多数是Sql语句不正确引起的... F2.歪歪宝 15:19:49 哦 D10.天地弦 15:20:29 可以发现CustomerId是个字符字段。应该 select * from Orders Where CustomerID = ’VINET’ D10.天地弦 15:20:32 这样.... D10.天地弦 15:20:47 这样我们就可以找到错误所在 D10.天地弦 15:21:36 现在大家都知道修改程序找到这个错误.... D10.天地弦 15:21:43 可不可以.... D10.天地弦 15:22:14 可以的吱一声.... 尖椒牛柳 15:22:16 可以 总结: D10.天地弦 15:25:15 上面这一小节,要学到怎么样在程序出错的时候 1.大概找到程序出错的位置 2.根据错误提示,初步判断出错的东东 3.查看对象变量的值. D10.天地弦 15:25:47 还有要懂得在调试程序中活用F7,F8,F9 {暂时告一段落} B6.银狼 15:28:51 继续DLL吧 B13.往生无语 15:28:58 是的。。生成的文件有当前的cpu信息。信息。还有出错的语句 B13.往生无语 15:29:19 但是出现内存错误的时候,比如内存泄漏就不行。 D10.天地弦 15:29:33 继续运行 看第二个错误... mmoSql里的的sql语句有错么? D10.天地弦 15:32:31 为什么会出错... 尖椒牛柳 15:32:39 D10.天地弦 15:32:46 如果删除掉注释看看... 尖椒牛柳 15:33:13 删除注释是可以的 B6.银狼 15:33:42 是啊 D10.天地弦 15:33:46 可以确定是注释惹的祸 D10.天地弦 15:33:54 难道不用能注释? D10.天地弦 15:34:00 想想 D10.天地弦 15:34:18 /*------------------------------- -------------------------------*/ SELECT * FROM Orders ORDER BY OrderId D10.天地弦 15:34:38 发现变成这样也不会出错 D10.天地弦 15:34:50 原来注释是可以用的... D10.天地弦 15:36:59 有些问题要靠自己去想象,,, D10.天地弦 15:37:10 去不断去测试 [1] [2] [3] 下一页 |