如何使用Delphi授予对mySQL数据集的写访问权限

如何使用Delphi授予对mySQL数据集的写访问权限,mysql,database,delphi,firebird,Mysql,Database,Delphi,Firebird,我开发了一个客户机/服务器应用程序,它使用mySQL数据库作为服务器上的数据库。现在,将访问服务器的应用程序也将有一个存储本地数据的数据库。为此,我使用了firebird数据库 现在,应用程序必须使用mySQL数据库中的记录更新本地数据库,比如说每天更新一次。现在的问题是,我还需要在mySQL更新firebird数据库后立即更改该记录,但当我希望应用程序运行并单击“更新”按钮时,我会出现以下错误,并且firebird数据库也不会更新任何数据: database.exe raised except

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

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

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,因为它会导致只读数据集错误。我试着查看组件,但没有地方将它们从只读更改为同时授予写访问权限。这就是我想弄明白的,如何授予写访问权,我想问题是您的数据集没有处于编辑模式


请看下面的链接。

我已经设法找到了上述问题的答案。我花了一些时间阅读,在Bob Swart写的一本名为C++builder数据库开发的书中找到了解决方案

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

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


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

这是错误的。错误消息并没有说明该表未处于编辑模式;它说这是一个只读表。它们不一样。@KenWhite它并没有说表是只读的,它说数据集是只读的,所以对我来说——虽然我不懂Delphi——这个答案似乎是正确的,另请参见@MarkRotterVeel:您发布的链接专门指的是TClientDataSet,在这个问题中我没有看到任何地方提到内存中的数据集。它指的是服务器上的MySQL数据库和本地系统上的Firebird数据库。在这个过程中,任何地方都没有提到CD。@KenWhite正如我所说的,我不知道Delphi,但错误似乎是一样的,天真地让我认为它们有着相同的根本原因。@Markrottveel:看起来KenWhite比你更了解你需要什么。。。无论如何,我不知道你是否读过西班牙语,但是这个链接()指向同一个问题,最后的海报说(在感谢所有人之后)他将数据集设置为编辑模式,这就成功了。