问题标签 [tadoquery]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Delphi - 为什么我会遇到此访问冲突?ADOQuery 参数有限制吗?
我有这个代码返回访问冲突('模块'sqloledb.dll'中地址74417E44的访问冲突。读取地址786E3552'),我无法确定问题出在哪里。我唯一的猜测是 ADOQuery 对我们可以传递的参数数量有限制。代码如下:
我在这一行得到错误:
这是我的插入语句中的第 11 个参数。如果我评论这一行,我会在下一个参数中得到错误。如果我像这样直接输入值:
它工作正常,但我在下一个参数中得到错误。
所以这让我想知道:ADOQuery 是否有它可以处理的参数数量的限制?或者,如果这不是真正的问题,有没有人知道我该如何解决这个问题?
笔记:
我正在使用 Delphi 7 和 Windows 8.1。
AV 仅(并且总是)在调试时出现,如果我直接通过其“.exe”执行应用程序,它永远不会出现。
如果我在出现错误后一直按“运行”,它会显示越来越多的 AV(我认为 AV 的数量与 10 号之后添加的参数数量相同),直到应用程序继续正常运行。
在所有 AV 出现在屏幕上后,插入工作。我只是想了解当一切看起来都很好时为什么会出现这个错误。
sql - delphi - 执行 ADOQuery 的 Open 方法时出现访问冲突错误
这是我的代码:
一切正常,代码运行正常。但有时(20% 的时间)在应用程序执行Open;
行时随机导致访问冲突错误。
SQL 语句是单独测试的,在任何情况下都可以正常工作。费:SELECT * FROM DoneOperations WHERE OrderID = 35 ORDER BY DoneDate
我测试的操作系统:Windows7、Windows Server 2008。
我无法处理这个,或者找到它的原因。感谢您的帮助。
delphi - Delphi TADOQuery:在SavetoFile之前格式化数据
我有一个应用程序,它允许用户使用 TADOQuery 组件在远程数据库上运行查询。然后使用 TADOQuery 的 SaveToFile 方法将查询结果保存到 XML 文件中。
我最近遇到了一个问题,如果其中一个字段中存在换行符(十六进制“0A”),则该字段中的数据将被截断(即仅部分保存到文件中)。字段中的空字符会导致类似的问题。
我需要做的是在调用 SaveToFile 方法之前扫描有问题的字段,并将任何“问题”字符替换为其他字符(例如空格)。我不允许更新数据库中的数据,所以我不能将任何更改推送回数据库(这意味着 TADOQuery 不能处于编辑模式)。
有什么方法可以实现这一点(即在运行 SELECT 之后但在调用 SaveToFile 之前编辑字段而不更改数据库中的数据)?我有一个解决方法,但它相当冗长且效率低下,但它允许我在不接触服务器上的数据的情况下编辑 XML 文档(基本上,读取问题字段,进行更改并存储更新版本的临时文件中的字段,调用 SaveToFile,然后用更新的版本替换 XML 文档中的字段)。这是我最好的选择,还是有更好的方法?
delphi - Delphi 7 对象未定义
我有一个使用 Delphi 创建的 Web 服务,我想用它连接到 sql server,所以我在项目中添加了一个 ADO Connection 和 ADOQuery,它们都已配置并准备好使用,只有一个小问题,我的项目中有两个单元,这些对象被添加到 Unit1 中,我正在使用我的 ImplUnit,而我的 ImplUnit 是另一个单元,并且找不到引用或在另一个单元中包含一个单元的方法。
单元1
我的单位
请忽略我添加到我的单元的 ADOConnection 和 ADOQuery 我有一点绝望的广告重复代码......是的,我知道游艇!!!!
@银战士
如果在 UTImplementacao 的使用中声明 Unit1,我将可以访问以下组件:
或者我应该为 var 子句中的每个类型变量声明?
delphi - 异步 TADOQuery 的 OnFetchComplete 未同步到主线程
当使用TADOQuery
with[eoAsyncFetchNonBlocking]
并附加到OnFetchComplete
事件时,我发现它OnFetchComplete
没有在主线程中执行(在 XE4 和 XE8 中测试)。我认为这是一个错误*,因为我们大多数人都会在 UI 中处理这些类型的事件。我相信这是大型项目中一些问题的根源,我需要一个解决方法。
[编辑] *阅读 ADO 文档后,我承认这可能不是错误,但多线程问题仍然存在。
有没有一种优雅的方法可以强制让这个处理程序中的代码在主线程上执行?我不想使用计时器(但如果这是我会接受的唯一解决方案)。或者,是否有一个我可以在这里等待的 ADO 同步对象或向 ADO 提供者发送某种其他形式的信号?
这是一个简化的示例,显示了该问题。我的项目更复杂,工厂创建和填充这些数据集,但这里类似于将数据集附加到内部的网格ADOQuery1FetchComplete
。
dfm 只是简单地设置ExecuteOptions = [eoAsyncFetchNonBlocking]
和OnFetchComplete
处理查询。
[编辑] 建议使用TThread.Sychronize
,但这不是 Delphi 线程。
如果GetCurrentThreadId
没有足够的证据表明处理程序是从另一个线程调用的,那么这里是主线程和有问题的线程的调用堆栈(我在主线程中添加了一个睡眠以进行良好的测量)
主线程休眠
调用处理程序的其他线程
delphi - Delphi TADOQuery.next 跳过一条记录
申请/处理的描述
我在 Delphi XE 中维护一些旧代码。该应用程序在远程服务器上的数据库上运行查询,然后在 PC 上创建报告。我们收到了一个错误报告,其中一个字段中的某些数据丢失。有问题的字段包含从服务器收集的大量数据(几千个字符)。我无法控制在该字段中收集和存储哪些数据。我发现错误是由嵌入在此数据中的空值和其他控制字符(换行符等)引起的。当调用 TADOQuery 的 SaveToFile 方法时,空值和其他控制字符导致字段中的任何数据被忽略(SaveToFile 基本上到达控制字符并停止读取记录)。
该错误的解决方案是从结果集中提取有问题的字段,过滤掉任何控制字符并将其保存到临时文件中(此时我无法将其放回结果集中,因为它处于读取状态 -唯一的状态)。数据保存为 XML,因此我还必须使一些字符 XML 友好(正如您将在代码片段中看到的那样)。调用 SaveToFile 方法后,我会从临时文件中读取更正后的数据并将其写回保存的报告中。这是冗长的,但它的工作原理。
问题
我现在有一个新问题。我注意到在随机情况下,文件末尾会丢失一条记录(相关字段将为空白)。我花了很长时间研究这个问题,它归结为以下代码(用于在调用 SaveToFile 之前从字段中提取数据)。代码跳过了一行。不是每次 - 大约每两到三个查询运行中就有一个。我知道这是一个事实,因为我在调试时在下面的循环中添加了一个计数器,并将循环执行的次数与记录计数进行了比较,当错误发生时它又少了一个(导致空白字段)和当所有数据都出现在报告中时相等。没有异常被捕获,所以它不会因为某些东西而摔倒——它实际上是在跳过一条记录。
问题
上面的代码是否有任何理由会跳过一条记录(即只执行循环 n - 1 次,其中 n 是记录数)?有什么东西会导致“adoquery.next”调用跳过记录吗?
编辑以澄清评论中提出的问题
报告中缺少数据。它始终是未处理的单个记录。我在报告中有超过 20,000 条记录,丢失的记录在中间的某个地方,但是由于数据太多,很难缩小范围。当一条记录被跳过时,该记录之后的所有内容都会向上移动一个记录(意味着很多报告都是错误的),最终记录包含一个空白字段。
delphi - Delphi:为动态查询的字段设置 OnGetText 事件处理程序
我想将我自己的过程设置为动态查询中字段的 OnGetText 事件
我的程序是这样的:
- "...Captions" 是字符串数组常量
我在 ADOQuery 的 OnAfterOpen 事件中设置了事件处理程序:
但是打开 ADOQuery 后,没有 Text 可以显示,看起来 Text 值是空的!
似乎我的程序做什么并不重要,因为当我设置一个空程序(没有代码)时,也没有显示任何文本
出了什么问题?
谢谢 ...
sql - Delphi7 TADOQuery filter not accurate at quick report
i want to show report with date range
i have code
and i put 4 test records to tablename
if i click the button, quick report only showing first record, no matter what date i choose, like this
with quick report properties
qrband title = qrlabel1 with caption 'quickreport'
qrband column header = qrlabel2 with caption 'number', qrlabel3 with caption'date'
qrband detail = qrdbtext1 & qrdbtext2 with dataset 'adoquery1', datafield 'numberfield' on qrdbtext1 and 'datefield' on qrdbtext2
how to show all data with date range filter?
thanks for your attention
delphi - Adoquery1 缺少 sql 属性 - Delphi
我正在尝试在访问数据库中添加一些数据。但是我遇到了麻烦,因为这会返回错误:
实现了对代码的几处修改,到目前为止没有任何效果。
我究竟做错了什么 ?
sql-server - 使用 Delphi AdoQuery 插入后获取最后一行数据
在使用 ADOQuery 的 Delphi 2007 中,当我使用插入将一行添加到表中时,如何获取最后一行?
我正在用这个添加行。
如何在 execsql 之后获得最后添加的行?