Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 数据集提供程序错误?_Delphi_Dataset_Delphi 2010 - Fatal编程技术网

Delphi 数据集提供程序错误?

Delphi 数据集提供程序错误?,delphi,dataset,delphi-2010,Delphi,Dataset,Delphi 2010,我有DBGrid->DataSource->ClientDataSet->DataSetProvider->CustomDataSet. (最后,我使用自己的自定义数据集,因为我们没有与数据库的直接连接……我们有一个指向某种类型的指针,可以随时更改。) 无论哪种方式,dataset和clientdataset都非常有效。 我最近遇到了一个问题 我在数据库中有一个名为ID的主键。 当我执行多个新插入时,我通过调用ClientDataSet->Append()来处理它,然后将每一新行的ID值设置为最

我有DBGrid->DataSource->ClientDataSet->DataSetProvider->CustomDataSet.

(最后,我使用自己的自定义数据集,因为我们没有与数据库的直接连接……我们有一个指向某种类型的指针,可以随时更改。)

无论哪种方式,dataset和clientdataset都非常有效。 我最近遇到了一个问题

我在数据库中有一个名为
ID
的主键。 当我执行多个新插入时,我通过调用
ClientDataSet->Append()
来处理它,然后将每一新行的ID值设置为最后一行的倒数+1。
(即:如果当前有935行,则新行ID将为-936)
通过这种方式,我修复了在没有设置ID时发生的密钥冲突错误,因为它是主键,并且在保存时插入了DB ID

现在,我的问题是:
数据库中已有一个空行。
我在数据库本身中设置了一个uniquekey,因此它不能接收包含相同数据的两行(因此不能有两个空白行,等等)

我在数据库中已经有935行了,第935行是空的。
我插入3个新行,然后按save。
对于每一个,我都会在OnUpdateError回调中得到一个错误,称为“重复行”

这意味着我在ClientDataSet中有936、937和938行,但没有CustomDataSet或DB,因为没有保存任何内容,因为它们出错

如果删除第937行,UI端的所有内容看起来都很好。
但是,如果我再次进行保存,错误返回给我的行(存储在DataXML文件中)是第936行和第938行

当我从ClientDataSet中删除937行时,DataSetProvider不应该更新自己吗? 我知道第938行出错了……但它已经不存在了

如果937被擦除,则938变为937


我已经搜索了一段时间有关此问题的帮助,但似乎没有任何解决方法。

我猜您在数据库中使用了autoinc字段。我最近发现,可以保存新行,而无需对键字段应用值。在clientdataset和customdataset中,必须删除键字段的必需标志,并删除datasetprovider的InUpdate标志。我想这会解决你的问题


请参见以下链接

谢谢您的回复;但是我们最近改变了捕获错误和插入的方法,所以从复杂性的角度来说,一切都变小了(谢天谢地!)。仍然很高兴知道一个可能的解决方案,如果我再遇到它,但是,所以感谢链接!