Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.03.2010, 16:46
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию 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  
Старый 23.03.2010, 18:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,480
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Там были разные хитрости. Как я понимаю, ты пытаешься использовать MIDAS (т.к. есть TDatasetProvider). Тут штука такая.
1. MIDAS автомтически коммитит транзации, так что компоненты должны это понимать. Например, со штатными IBX не получается работать через MIDAS, мне пришлось для этого перейти на FIB.
2. Для корректной работы там надо указать способ определения нужной записи. Обычно, я указываю что-то типа ByKey (не могу сейчас точно посмотреть) и для первичного ключа у соотв. поля ставлю флажок. Поищти в гугле - там есть пара статей, которые это хорошо описывают.
Ответить с цитированием
  #3  
Старый 23.03.2010, 18:00
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

А commit вызываете?
Ответить с цитированием
  #4  
Старый 23.03.2010, 18:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,480
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Если это MIDAS, то он сам там коммиты вызывает. И даже лишние иногда
Ответить с цитированием
  #5  
Старый 23.03.2010, 18:31
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию

commit не вызываю (если можно, то поподробнее про commit, с чем их едят), FIB DAC - я так понимаю сторонний компонент, судя по инфе из гугла для доступа к БД Firebird, мне тогда нужен MyDAC для MySQL, но хотелось бы сделать всё стандартными средствами и без ADO.

Последний раз редактировалось serhak, 23.03.2010 в 18:54.
Ответить с цитированием
  #6  
Старый 24.03.2010, 09:52
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Даже не знаю с чего начать. Для работы с базой используются транзакции, которые позволяют подтвердить или отменить изменения в базе. Т.е. когда вы вызываете в рамках транзакции commit вы отправляете данные в базу, rollback- соответственно не отправляете. Для interbase есть готовый компонент IBTransaction. Наберите SQLConnection.Commit и почитайте хэлп, там есть пример того как организовать транзакцию.

Цитата:
Сообщение от lmikle
Если это MIDAS, то он сам там коммиты вызывает. И даже лишние иногда
Это, как я понимаю, сразу после Post? Там же есть ResolveToDataSet его, как я понял, надо в True выставить чтобы апдейтить, так?

Последний раз редактировалось TOJluK, 24.03.2010 в 10:01.
Ответить с цитированием
  #7  
Старый 26.03.2010, 23:50
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию

Почитал немного про транзакции. Делаю так:
Объявляю переменную TransMySql: TTransactionDesc;
Присваиваю id данной транзакции TransMySQL.TransactionID:=1;
Затем запускаю транзакцию с параметром SQLConnection1.StartTransaction(TransMySQL);
Затем делаем в DBGrid какие-либо изменения и вызываем SQLConnection1.Commit(TransMySQL);
Но изменения не сохраняются. Метод ClientDataSet2.ApplyUpdates(-1); вызывает ошибку(вызываю перед Commit).
Может я что-то делаю неправильно? И обязательно ли вызывать ApplyUpdates?
Ответить с цитированием
  #8  
Старый 17.05.2010, 18:44
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию

Всем спасибо, с этим разобрался, проблема как всегда была намного проще чем я себе представлял, оказывается всё дело было в libmysql.dll, скопировал из БД, всё прекрасно работает. Теперь остаётся открытым следующий вопрос, как организовать удаление строк и редактирование данных полученных SQL-запросом из нескольких таблиц. Какие будут советы?

Последний раз редактировалось serhak, 17.05.2010 в 18:50.
Ответить с цитированием
  #9  
Старый 17.05.2010, 19:46
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,894
Репутация: выкл
По умолчанию

lmikle, если разбираешься в MySQL+DELPHI - напиши, плиз, нормальную доку (с бдекджеком и шлюхами) со скриншотами и ссылками на бесплатные наборы компонентов доступа, буду очень благодарен, и не я один наверное.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #10  
Старый 17.05.2010, 22:13
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию

Обещаю, что напишу подробную статью, но пока мои познания ограничиваются только установкой соединения с базой, отображения содержимого, редактирования данных полученных sql запросом из одной таблицы. Мне нужно научиться редактировать данные полученными из двух и более таблиц и вставить DBLookUpComboBox в DBGrid, нашёл статью где это делается в компоненте TTable, в моём случае необходим компонент SQLTable, делаю всё по аналогии, но пока не получается.
Ответить с цитированием
  #11  
Старый 05.06.2010, 02:34
ELV1S_86 ELV1S_86 вне форума
Прохожий
 
Регистрация: 04.06.2010
Сообщения: 1
Репутация: 10
По умолчанию

Пишу диплом. Суть: база на MySQL, приложение на Delphi 7
Работаю через dbExpress, так же вывожу все таблицы в DBGrid
Изменения вношу через SQL запрос update, просто на новой форме выношу все нужные мне записи из строки таблицы в Edit`ы, меняю их как мне нужно руками, и выполняю запрос.
Все работает
Ответить с цитированием
  #12  
Старый 05.06.2010, 02:39
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,238
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от ELV1S_86
Все работает
К чему тогда апать старую тему? Не очень старую, конечно, но вроде как вопроса не замечено...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #13  
Старый 05.06.2010, 08:41
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию

Цитата:
Сообщение от ELV1S_86
Пишу диплом. Суть: база на MySQL, приложение на Delphi 7
Работаю через dbExpress, так же вывожу все таблицы в DBGrid
Изменения вношу через SQL запрос update, просто на новой форме выношу все нужные мне записи из строки таблицы в Edit`ы, меняю их как мне нужно руками, и выполняю запрос.
Все работает
Я пишу курсач, тоже пришёл к выводу, что лучше сделать обработку событий при нажатии на определённую кнопку и использовать SQL запросы на удаление, добавление и изменение данных.
Ответить с цитированием
  #14  
Старый 20.06.2010, 19:44
Аватар для serhak
serhak serhak вне форума
Прохожий
 
Регистрация: 23.03.2010
Сообщения: 11
Репутация: 12
По умолчанию

Вот записал видео, где собственно показал как подключиться к MySQL и получить данные:

Letitbit.Net - Delphi&MySQL-1

vip-file.com - Delphi&MySQL-1

Последний раз редактировалось serhak, 20.06.2010 в 19:54.
Ответить с цитированием
  #15  
Старый 25.10.2010, 08:15
Vocabulary Vocabulary вне форума
Новичок
 
Регистрация: 17.09.2009
Сообщения: 85
Репутация: 9
По умолчанию

Интересное и познавательное видео для тех кто начинает использование MySQL в своей работ.
С достаточно исчерпывающим количеством вариантов подключения к базе и отображения данных из таблиц с применением штатных компонентов.
Хотелось бы увидеть продолжение. Получился бы этакий полный видеоучебник для начинающих.

---
Есть еще один вариант работы с MySQL из Delphi без использования каких-либо штатных компонентов доступа.
Опубликован на delphikingdom
Это два дельфийский модуля, один из которых интерфейс библиотеки libmySQL.dll.
Другой, оболочка над этим интерфейсом в виде класса для удобства использования библиотечного интерфейса.
Есть демо проект из которого достаточно просто можно уяснить методы работы с классом.

Так как использовать методы доступа в программах можно лишь "в ручную", то скорее, это для тех кто работает с MySQL, расположенных на удаленном сервере и в проекте нет необходимости редактировать данные интерактивно (с помощью таблиц и полей на форме). Хотя это тоже можно делать.
Например, для получения данных из базы, обработки их и отправки неких результатов назад в базу.
Ниша узкая, но существующая. Мне эти модули для одного из проектов пришлись в самый раз.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter