|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Delphi+MySQL+SQLConnection
Доброго времени суток уважаемые эксперты и мастера Delphi. Ситуация такая, хочу редактировать данные в DBGrid. Сервер MySQL, использую связку компонентов SQLConnection+SimpleDataSet+DataSource+DBGrid, всё отображается таблицу вижу, но при изменении значений, они не сохраняются на сервере. Пробовал связки SQLConnection+SQLDataSet+DataSetProvider+ClientDat aSet+DataSource+DBGrid и SQLConnection+SQLTable+DataSetProvider+ClientDataS et+DataSource+DBGrid. Во всех компонентах свойство ReadOnly:=false(по умолчанию). Методы ClientDataSet.ApplyUpdates(0) и SimpleDataSet.ApplyUpdates(0) ни к чему хорошему не приводят, либо проходят без ошибок, но изменения на сервер не доходят, либо заканчиваются ошибками типа "DataSet is read-only". Код приводить не буду, т.к. и нет его почти, всё описано выше. Может быть какое-то свойство нужно задать или выполнять какой-нить SQL запрос при изменении в ячейке. ADO использовать не хочется.
|
#2
|
|||
|
|||
Там были разные хитрости. Как я понимаю, ты пытаешься использовать MIDAS (т.к. есть TDatasetProvider). Тут штука такая.
1. MIDAS автомтически коммитит транзации, так что компоненты должны это понимать. Например, со штатными IBX не получается работать через MIDAS, мне пришлось для этого перейти на FIB. 2. Для корректной работы там надо указать способ определения нужной записи. Обычно, я указываю что-то типа ByKey (не могу сейчас точно посмотреть) и для первичного ключа у соотв. поля ставлю флажок. Поищти в гугле - там есть пара статей, которые это хорошо описывают. |
#3
|
||||
|
||||
А commit вызываете?
|
#4
|
|||
|
|||
Если это MIDAS, то он сам там коммиты вызывает. И даже лишние иногда
|
#5
|
||||
|
||||
commit не вызываю (если можно, то поподробнее про commit, с чем их едят), FIB DAC - я так понимаю сторонний компонент, судя по инфе из гугла для доступа к БД Firebird, мне тогда нужен MyDAC для MySQL, но хотелось бы сделать всё стандартными средствами и без ADO.
Последний раз редактировалось serhak, 23.03.2010 в 18:54. |
#6
|
||||
|
||||
Даже не знаю с чего начать. Для работы с базой используются транзакции, которые позволяют подтвердить или отменить изменения в базе. Т.е. когда вы вызываете в рамках транзакции commit вы отправляете данные в базу, rollback- соответственно не отправляете. Для interbase есть готовый компонент IBTransaction. Наберите SQLConnection.Commit и почитайте хэлп, там есть пример того как организовать транзакцию.
Цитата:
Последний раз редактировалось TOJluK, 24.03.2010 в 10:01. |
#7
|
||||
|
||||
Почитал немного про транзакции. Делаю так:
Объявляю переменную TransMySql: TTransactionDesc; Присваиваю id данной транзакции TransMySQL.TransactionID:=1; Затем запускаю транзакцию с параметром SQLConnection1.StartTransaction(TransMySQL); Затем делаем в DBGrid какие-либо изменения и вызываем SQLConnection1.Commit(TransMySQL); Но изменения не сохраняются. Метод ClientDataSet2.ApplyUpdates(-1); вызывает ошибку(вызываю перед Commit). Может я что-то делаю неправильно? И обязательно ли вызывать ApplyUpdates? |
#8
|
||||
|
||||
Всем спасибо, с этим разобрался, проблема как всегда была намного проще чем я себе представлял, оказывается всё дело было в libmysql.dll, скопировал из БД, всё прекрасно работает. Теперь остаётся открытым следующий вопрос, как организовать удаление строк и редактирование данных полученных SQL-запросом из нескольких таблиц. Какие будут советы?
Последний раз редактировалось serhak, 17.05.2010 в 18:50. |
#9
|
||||
|
||||
lmikle, если разбираешься в MySQL+DELPHI - напиши, плиз, нормальную доку (с бдекджеком и шлюхами) со скриншотами и ссылками на бесплатные наборы компонентов доступа, буду очень благодарен, и не я один наверное.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#10
|
||||
|
||||
Обещаю, что напишу подробную статью, но пока мои познания ограничиваются только установкой соединения с базой, отображения содержимого, редактирования данных полученных sql запросом из одной таблицы. Мне нужно научиться редактировать данные полученными из двух и более таблиц и вставить DBLookUpComboBox в DBGrid, нашёл статью где это делается в компоненте TTable, в моём случае необходим компонент SQLTable, делаю всё по аналогии, но пока не получается.
|
#11
|
|||
|
|||
Пишу диплом. Суть: база на MySQL, приложение на Delphi 7
Работаю через dbExpress, так же вывожу все таблицы в DBGrid Изменения вношу через SQL запрос update, просто на новой форме выношу все нужные мне записи из строки таблицы в Edit`ы, меняю их как мне нужно руками, и выполняю запрос. Все работает |
#12
|
||||
|
||||
Цитата:
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#13
|
||||
|
||||
Цитата:
|
#14
|
||||
|
||||
Вот записал видео, где собственно показал как подключиться к MySQL и получить данные:
Letitbit.Net - Delphi&MySQL-1 vip-file.com - Delphi&MySQL-1 Последний раз редактировалось serhak, 20.06.2010 в 19:54. |
#15
|
|||
|
|||
Интересное и познавательное видео для тех кто начинает использование MySQL в своей работ.
С достаточно исчерпывающим количеством вариантов подключения к базе и отображения данных из таблиц с применением штатных компонентов. Хотелось бы увидеть продолжение. Получился бы этакий полный видеоучебник для начинающих. --- Есть еще один вариант работы с MySQL из Delphi без использования каких-либо штатных компонентов доступа. Опубликован на delphikingdom Это два дельфийский модуля, один из которых интерфейс библиотеки libmySQL.dll. Другой, оболочка над этим интерфейсом в виде класса для удобства использования библиотечного интерфейса. Есть демо проект из которого достаточно просто можно уяснить методы работы с классом. Так как использовать методы доступа в программах можно лишь "в ручную", то скорее, это для тех кто работает с MySQL, расположенных на удаленном сервере и в проекте нет необходимости редактировать данные интерактивно (с помощью таблиц и полей на форме). Хотя это тоже можно делать. Например, для получения данных из базы, обработки их и отправки неких результатов назад в базу. Ниша узкая, но существующая. Мне эти модули для одного из проектов пришлись в самый раз. |