问题标签 [tadodataset]

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.

0 投票
1 回答
135 浏览

delphi - 使用带有 MS Access 的 TADODataset 组件时出错

我正在尝试用 MS Access DB 替换 InterBase DB 作为测试,我正在使用 TADOConnection 组件成功连接到 MS Access DB;但是,当我尝试使用 TADODataset 连接到表时,我可以将 Connection 属性设置为 TADOConnection 组件,但是当我想设置 CommandText 属性时,我收到以下错误:

错误信息

连接字符串如下:Provider=ADsDSOObject;User ID=admin;Encrypt Password=False;Data Source=C:\StudyTime\StudyTime.accdb;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648;

有人可以帮助我吗?

0 投票
0 回答
115 浏览

delphi - 如何让图像显示在 DBWPRichText 组件中,该组件又连接到 Memotype 字段?

我正在使用 SQL Server 2014 作为数据库的 Delphi 中的客户端服务器架构。

我有一个数据库字段名称“文档”,它的类型为“文本”,其中包含包含图像数据的 rtf 数据。我正在使用 ado 数据集,该数据集将字段设为“备忘录”。此 ado 数据集又连接到客户端数据集并连接到 DBWPRichText 控件。获取的“文档”字段数据被截断,导致 DBWPRichText 中显示的图像数据丢失。

我尝试将数据集中的字段添加为 Blob,并且可以在 DBWPRichText 控件中显示图像。唉! 通过数据集发布方法保存数据时收到错误消息“文本与图像不兼容”。我认为这可能是因为我手动将字段更改为 BLOB 以显示db 字段类型为 "Text"的图像。

尝试使用 WPRichText,它在我从字段名“文档”加载数据的情况下工作正常,但是在加载到控件时,我正在将字符串转换为流,同时保存将 WPRichText 控件数据从流转换为字符串。

在我的情况下,我必须使用连接到数据库的 DBWPRichText 控件,因为涉及的邮件合并字段很少,并且不想丢失这些字段。顺便说一句,不能更改字段类型,因为它几乎在很多地方都使用过,并且不想破坏任何东西。

如果有人可以在不更改 db 字段类型的情况下指导使用 DBWPRichText 实现目标,将不胜感激。

谢谢

0 投票
0 回答
156 浏览

sql-server - 如何检查 dbgrid 中 TADODataSet 的可用性?

我在我的 VCL 表单上使用 DBGrid。网格中填充了来自TADOConnection查询的记录。从语义上看,它看起来像这样:

  • 建立与数据库的连接(SQL Server);
  • 将一些记录提取到TADODataSet数据集中;
  • 将数据集与TDataSource对象连接;
  • 将对象连接DataSource到 DBGrid。

我的网格会立即发布,这意味着编辑后的数据会立即发布到数据库中。一切正常,直到连接关闭(网络中断,笔记本电脑的盖子关闭等)

当连接丢失时,我无法在 Grid 中编辑记录,这导致EOleExceptionTCP PROvider:现有连接被远程主机强行关闭)abd EDatabaseError通信链路故障)。

我想捕捉连接丢失并重新建立连接,但我不知道如何。我检查了网格的所有数据特定事件,但问题出现的时间比任何网格事件都要早得多。

我认为问题出在数据集级别,但我不知道如何捕获异常。有谁知道如何检查数据集的可用性?然后我可以编写一些代码来重新连接。像这样的东西:

任何帮助将不胜感激。

0 投票
1 回答
129 浏览

delphi - Delphi 和 ADODataset.Cancel

我正在使用 Dephi 10.1 Berlin 和 Access 2013。

我的问题与TADODataSet.Cancel().

我想在发布前向我的用户显示一个消息框,要求确认,以防数据被修改。

TADODataSet.BeforePost事件中,我添加了以下代码:

如果用户点击btnNo,就会发生意想不到的事情。

从当前记录中取消更改,但会创建一个所有字段为空的新记录。

唯一包含一些数据的字段是用户先前修改过的字段。

如果我通过 的取消按钮取消修改TDBNavigator,一切都很好。

如果我模拟单击事件中的取消TDBNnavigator按钮BeforePost

我有同样的行为,所以创建了一个新的空记录。

有什么建议吗?

0 投票
0 回答
91 浏览

delphi - 如何在 Delphi 10.3 中使用带有非 ASCII 数据的 TADODataSet 的定位方法

我有一个 MS SQL Server 2019 表,其中有一个名为“Char”的列,它被定义为 nvarchar(4)。

在我的示例 Delphi 10.3.3 代码中,我有一行说:

表中没有具有这样值的记录,但是当我执行代码时,Locate 返回 True 并定位到结果集中的第一条记录。如果我添加具有该值的记录,Locate 仍然返回 True,但定位到结果集中的第一条记录,而不是具有所需字符的记录。

使用 ASCII 字符,代码按预期工作。

更新:

我表中的第一条记录在 Char 列中有“0”。如果我删除它,那么定位“⓪”返回 False。如果我添加“⓪” 到表然后定位找到那个,但如果同时包含“⓪”和“0”,那么它会找到ASCII数字。如果我尝试定位“②”,它会返回包含“2”的记录。顺便说一下,Char 列是表上的唯一索引。

重现问题的步骤。

  1. SQL Server 2019,默认美国安装

  2. 创建表

    创建表 [dbo].[Things]( [Thing] nvarchar NOT NULL ) ON [PRIMARY]

我用 TADODataSet、TMemo 和 TButton 创建了一个 VCL 应用程序

这是按钮的代码:

当程序运行时,它没有找到目标字符“①”,而是找到了“1”。