解决delphi TAdoQuery组件的close方法导致”列名无效“错误的问题

1,故障现象

一次程序运行,出现如下错误:

对应代码如下:

2,故障分析

Query_alert_2的语句在查询分析器中单独执行是正常的。排除语句出错。

如果注解掉Query_alert_1,则错误变为Query_alert_3执行出错:

2019-07-11 09:32:26 Query_alert_1执行完毕

2019-07-11 09:32:27 Query_alert_2执行完毕

2019-07-11 09:32:42 Do_Update_Statis出错:列名 'bat_pos1' 无效。

如果注解掉Query_alert_1、Query_alert_2,则Query_alert_3执行正常。

可见,出现错误是delphi内数据库组件产生的,与数据库执行无关。

3,故障原因及解决

数据库版本的SQLServer2005,执行的这些SQL语句含有临时表,如:

if OBJECT_ID('tempdb..#t1')>0
 drop table #t1

执行正式的SQL之前,会运行以上语句,以删除当前同名的临时表。

但实际运行发现,这些临时表不一定会被删除,而当引用时,可能会引用到以前的临时表,导致栏位不存在错误。

因此,在Query_alert_1、Query_alert_2,Query_alert_3语句的最后,都加上drop 临时表的语句,以确保临时表在下次使用前一定不存在。如:

--检查临时表是否在用,有则删除,以防错误
if OBJECT_ID('tempdb..#t1')>0
 drop table #t1

if OBJECT_ID('tempdb..#t2')>0
 drop table #t2

/*
 执行相关业务逻辑SQL 

select *
into #t1
from table1

。。。
。。。
*/

--执行完毕,清除临时表,以便下次再使用
if OBJECT_ID('tempdb..#t1')>0
 drop table #t1

if OBJECT_ID('tempdb..#t2')>0
 drop table #t2

修改后,结果多条SQL语句顺序执行正常。

4,总结

关于数据库临时表,一定要注意在查询器中执行和在程序代码中执行是有区别的。

区别在于查询器会自动提交交易,并清除临时表,而程序则不一定。

以上这篇解决delphi TAdoQuery组件的close方法导致”列名无效“错误的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • delphi 字符串处理中的怪异现象与处理方式

    1, 怪异现象:字符串相加操作不正常! 以上代码,明显输出字符串应含有后缀".jpg",但实际输出却不含后缀(如下),字符串加法操作似乎不起作用了! 采用showMessage进行输出,看看结果如何? 结果仍是不显示字符串后缀,但可以看到字符串偏左显示,似乎后面还有很多不可见字符. 2,怪异原因:字符串中含有\0,即字符串终止符 以上现象已经看出,字符串加法失效的原因可能是含有某些不可见字符,那到底是什么字符呢? 回到这些字符串产生的源头,即下面由字节数组转换成字符串函数: 显然,此函

  • 解决delphi TAdoQuery组件的close方法导致”列名无效“错误的问题

    1,故障现象 一次程序运行,出现如下错误: 对应代码如下: 2,故障分析 Query_alert_2的语句在查询分析器中单独执行是正常的.排除语句出错. 如果注解掉Query_alert_1,则错误变为Query_alert_3执行出错: 2019-07-11 09:32:26 Query_alert_1执行完毕 2019-07-11 09:32:27 Query_alert_2执行完毕 2019-07-11 09:32:42 Do_Update_Statis出错:列名 'bat_pos1' 无

  • Delphi菜单组件TMainMenu使用方法详解

    本文为大家分享了菜单组件TMainMenud的使用方法,供大家参考,具体内容如下 菜单组件TMainMenu 创建菜单双击TmenuMain,单击Caption就可以添加一个菜单项 菜单中添加分割线只需加"-"就可以添加一个分割线 级联菜单的设计 单击鼠标右键弹出菜单中选择Create Submenu菜单项 单选功能设计 要在设计的菜单项目中选择RadioItem属性为True,Checked属性为True 复选功能的设计 在设计菜单项目中选择RadioItem属性为False,Che

  • 记VUE3+TS获取组件类型的方法踩坑及解决

    目录 VUE3+TS获取组件类型的方法踩坑 遇到的坑 问题原因 解决办法 VUE3+TS获取组件ref实例 如何获取组件的类型呢? 总结 VUE3+TS获取组件类型的方法踩坑 获取组件类型的方法 const AccountRef = ref<InstanceType<typeof LoginAccount>>() 遇到的坑 typeof LoginAccount一直报红线提示错误 LoginAction: () => vo...' provides no match for

  • Python提示[Errno 32]Broken pipe导致线程crash错误解决方法

    本文实例讲述了Python提示[Errno 32]Broken pipe导致线程crash错误解决方法.分享给大家供大家参考.具体方法如下: 1. 错误现象 ThreadingHTTPServer 实现的 http 服务,如果客户端在服务器返回前,主动断开连接,则服务器端会报 [Errno 32] Broken pipe 错,并导致处理线程 crash. 下面先看个例子,python 版本: 2.7 示例代码 复制代码 代码如下: #!/usr/bin/env python #!coding=u

  • 父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法

    场景: 我实际用到的是这样的,我父组件引用子组件related,父组件调用获取页面详情的方法,更新了state值related,子组件根据该related来渲染相关新闻内容,但是页面打开的时候总是先加载子组件,子组件在渲染的时候还没有获取到更新之后的related值,即使在子组件中watch该值的变化依然不能渲染出来子组件的相关新闻内容. 我的解决办法: 父组件像子组件传值,当父组件执行了获取页面详情的方法之后,state值related更新,然后传给子组件,子组件再进行渲染,可以正常获取到.

  • Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法

    需求: 1. 页面部分元素的尺寸需要根据实际打开时浏览器尺寸进行设置: 2. 页面打开后,调节浏览器窗口大小时需要动态调节部分元素的尺寸: 需要注意的点: window.onresize只能在项目中一处进行引用触发,如果在多个地方进行引用触发,会导致只有1个触发事件生效. 解决"多个组件都需要触发"的方案只能是通过一个地方触发后通过组件间通信进行触发. (以调节class为myDiv的div的宽度为例) 解决需求1的方案: html <template> <div c

  • 解决antd Form 表单校验方法无响应的问题

    antd 的 表单校验方法包括 validateFields 和 validateFieldsAndScroll 里面可以接收校验字段数组, options, 和一个回调函数 from.validateFields([name, age], {}, (err, val)=> {}) 校验全部表单数据 from.validateFields((err, val)=> {}) // 无响应 发现无响应, 无报错, 完全蒙逼了, 排查良久, 添加校验字段后发现可以成功校验, 于是想着大不了我全部手动

  • 解决iView Table组件宽度只变大不变小的问题

    示例: <Table class="my-table"></Table> 打开开发者工具其实你可以发现iView给table标签的宽度加上了一个明确的宽度值,而且在父元素变小的时候这个值并没有相应地变小,所以才会导致的iView Table组件只会变大不会变小. 那么我们就可以根据这个原因才决定解决方案 1.给Table组件的table标签设置一个important的width .my-table table { width: 100% !important;

  • 使用webpack和rollup打包组件库的方法

    前言 之前做了一个loading的样式组件,为了实现代码的可重用性,将这个小项目打包并且发布在了npm上.在一次次的打包发包过程中经历了一个有一个报错,@buzuosheng/loading这个组件已经到了2.7.0版本,虽然还有一些要调整的地方,但总算是可以用了. webpack和rollup对比 webpack算是使用程序员使用最多的打包工具,面试中往往会问到webpack的相关问题,而rollup被问到的要少很多.导致这种现象的一个原因是,应用开发使用webpack,库开发使用rollup

  • 深入理解React中es6创建组件this的方法

    首发于:https://mingjiezhang.github.io/. 在JavaScript中,this对象是运行时基于函数的执行环境(也就是上下文)绑定的. 从react中的demo说起 Facebook最近一次更新react时,将es6中的class加入了组件的创建方式当中.Facebook也推荐组件创建使用通过定义一个继承自 React.Component 的class来定义一个组件类.官方的demo: class LikeButton extends React.Component

随机推荐