Arhn - архитектура программирования

Как предоставить доступ на запись к набору данных mySQL с помощью Delphi

Я разработал клиент-серверное приложение, которое использует базу данных mySQL в качестве базы данных на сервере. Теперь приложение, которое будет обращаться к серверу, также будет иметь базу данных, в которой будут храниться локальные данные. Для этого я использовал базу данных firebird.

Теперь приложение должно обновлять локальную базу данных записями из базы данных mySQL, скажем, один раз в день. Теперь проблема в том, что мне также нужно изменить запись в mySQL, как только она обновит базу данных firebird, но когда я хочу, чтобы приложение запускалось, и я нажимаю кнопку обновления, я получаю следующую ошибку, и данные не обновляются в базу данных firebird:

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

На данный момент я запускаю mySQL через XAMMP на моем локальном хосте, и firebird также работает на локальном хосте. Я разрабатываю с Delphi XE2

Изменить: извините, ребята, похоже, вопрос был неясным. Для подключения к mySQL я использую стандартные компоненты TSQLConnection и TSQLTable, а в запросах используется TSQLQuery. Поэтому, когда я пытаюсь получить доступ к базе данных mySQL, например, с помощью TGrid, это дает мне действие, которое не разрешено для однонаправленных наборов данных. Я не могу писать в TSQLTable, так как это выдает ошибку набора данных только для чтения. Я попытался посмотреть на компоненты, и нет места, чтобы изменить их с только для чтения, чтобы также предоставить доступ для записи. Вот что я пытаюсь понять, как предоставить доступ на запись


Ответы:


1

Мне удалось получить ответ на указанную выше проблему. Мне потребовалось некоторое время, и я обнаружил решение в книге Боба Сварта под названием «Разработка баз данных C ++ builder».

"Все наборы данных dbExpress (TSQLDataset, TSQLTable, TSQLQuery и TSQLStoredProc - при возврате набора данных) очень особенные, поскольку их содержимое доступно только для чтения и однонаправлено. Это означает, что вы можете читать записи в TSQLTable, но только с первого от одного до последнего, и вы не можете вносить какие-либо изменения в эти данные ».

Поскольку TDBGrid может отображать более одной записи одновременно, он позволяет вам переходить от одной записи к другой (и обратно), что не разрешено непосредственно в наборе данных dbExpress.

Если мы можем передать содержимое набора данных dbExpress в TClientDataSet, тогда мы сможем просматривать и перемещаться во всем, что захотим. И это решает мою проблему. Это настоящая ошибка новичков, но, опять же, я все еще считаю себя новичком :-).

29.09.2013

2

Я думаю, проблема в том, что ваш набор данных не находится в режиме редактирования.

Как изменить значения полей в TDataSetProvider.OnUpdateData

Взгляните на ссылку ниже.

02.09.2013
  • Это не правильно. В сообщении об ошибке не говорится, что таблица не находится в режиме редактирования; он говорит, что это таблица только для чтения. Они не такие. 03.09.2013
  • @KenWhite Он не говорит, что таблица предназначена только для чтения, в нем говорится, что это набор данных, поэтому для меня - хотя я не знаю Delphi - этот ответ кажется правильным, см. Также stackoverflow.com/questions/653350/ 03.09.2013
  • @MarkRotteveel: размещенная вами ссылка конкретно относится к TClientDataSet, и я не вижу упоминания этого набора данных в памяти где-либо в этом вопросе. Это относится к базе данных MySQL на сервере и базе данных Firebird в локальной системе. Нигде в процессе нет упоминания о CDS. 03.09.2013
  • @KenWhite Как я уже сказал, я не знаю Delphi, но ошибка кажется такой же, что - наивно - заставляет меня думать, что у них одна и та же основная причина. 03.09.2013
  • @MarkRotteveel: Похоже, KenWhite знает больше, чем вы, что вам нужно ... в любом случае, я не знаю, читаете ли вы по-испански, но эта ссылка (clubdelphi.com/foros/showthread.php?t=51217) указывает на ту же проблему, и на последнем плакате говорится, что (после всех благодарностей) он перевел набор данных в режим редактирования, и это помогло. 03.09.2013
  • @JGutierrezC Я не тот, кто задал вопрос :) Просто пытаюсь помочь. 03.09.2013
  • Извините, ребята, похоже, вопрос не ясен. Для подключения к mySQL я использую стандартные компоненты TSQLConnection и TSQLTable, а в запросах используется TSQLQuery. Поэтому, когда я пытаюсь получить доступ к базе данных mySQL, например, с помощью TGrid, это дает мне действие, которое не разрешено для однонаправленных наборов данных. Я не могу писать в TSQLTable, так как это выдает ошибку набора данных только для чтения. Я попытался посмотреть на компоненты, и нет места, чтобы изменить их с только для чтения, чтобы также предоставить доступ для записи. Это то, что я пытаюсь понять, как предоставить доступ на запись. 03.09.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..