0

我开发了一个客户端/服务器应用程序,它使用 mySQL 数据库作为服务器上的数据库。现在,将访问服务器的应用程序也将拥有一个存储本地数据的数据库。为此,我使用了 firebird 数据库。

现在,应用程序必须使用 mySQL 数据库中的记录更新本地数据库,比如每天一次。现在的问题是,我还需要在更新 firebird 数据库后立即更改 mySQL 中的记录,但是当我希望应用程序运行并单击更新按钮时,出现以下错误并且没有数据得到更新也到火鸟数据库:

database.exe raised exception class EDatabaseError with message 'tbStudent: Cannot modify a
read-only dataset'.

目前,我正在本地主机上通过 XAMMP 运行 mySQL,而 firebird 也在本地主机上运行。我正在使用 Delphi XE2 进行开发

编辑:对不起,伙计们,问题似乎不清楚。对于我的 mySQL 连接,我使用标准的 TSQLConnection 和 TSQLTable 组件,并且查询使用 TSQLQuery。因此,例如,当我尝试使用 TGrid 访问 mySQL 数据库时,它给了我单向数据集不允许的操作。我无法写入 TSQLTable,因为它给了我只读数据集错误。我尝试查看组件,但没有地方可以将它们从只读更改为也授予写访问权限。这就是我想要弄清楚的,如何授予写访问权限

4

2 回答 2

0

我已经设法得到了上述问题的答案。我花了一些时间阅读,并在 Bob Swart 的一本名为 C++builder Database Development 的书中找到了解决方案。

“所有 dbExpress 数据集(TSQLDataset、TSQLTable、TSQLQuery 和 TSQLStoredProc - 如果返回数据集)都非常特殊,因为它们的内容是只读且单向的。这意味着您可以读取 TSQLTable 中的记录,但只能从第一个一个到最后一个,并且您不能对此数据进行任何更改。”

由于 TDBGrid 一次可以显示多条记录,因此它允许您从一条记录导航到另一条记录(然后返回),这在 dbExpress 数据集上是不允许的。

如果我们可以将 dbExpress 数据集的内容传输到 TClientDataSet,那么我们可以查看和导航所有我们想要的内容。这解决了我的问题。这是一个真正的菜鸟错误,但话又说回来,我仍然认为自己是菜鸟:-)。

于 2013-09-29T12:15:27.590 回答
-1

I think the problem is that your dataset is not on edit mode.

How to Modify Field Values in TDataSetProvider.OnUpdateData

Take a look at the link below.

于 2013-09-02T18:39:30.233 回答