Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2014, 16:37   #1
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию Редактирование через DBGrid представления.

Доброго времени суток. Работаю с MS SQL Server 2008. Создал представление из 2 таблиц. Подключил его к ADOTable+DataSource. Добавил на форму DBGrid, настроил на DataSource.
Нажимаю на ячейку DBGrid, редактирую её, а остальные записи не меняют своего значения. Поясню. Допустим, у меня 10 строк с значением "Коля", в одной из строк я меняю его на "Сережа", и лишь в этой строке будет значение "Сережа", а остальные так и останутся "Коля".
Код:
ADOTable.Close;
ADOTable.Open;
DBGrid.Refrash;
не помогают.
Зато если закрыть проект и открыть заново, то значение как в таблице БД, так и в представлении изменяется. Как же сделать это обновление не закрывая программы?
Спасибо за внимание.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 07.03.2014, 15:57   #2
Dim4ikhot
Новичок
Джуниор
 
Регистрация: 07.03.2014
Сообщений: 1
По умолчанию

Проверь после редактирования в Гриде, что записывает в БД, не закрывая программы...Скорей всего после редактирования в Гриде не срабатывает POST
Dim4ikhot вне форума Ответить с цитированием
Старый 15.03.2014, 18:19   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Dim4ikhot, POST срабатывал, нужно было в ADOConnection1 запускать транзакцию. Вот. . Спасибо за ответ.

Дабы не создавать ещё одну тему, опишу ещё одну проблему с добавлением в View(представлением) SQL Server.

Есть 2 таблицы:
Главная: Сотрудники(id, ФИО, паспортные данные).
Подчиненная: Специальность: (id, Специальность).
Есть представление(View), собранное из 2 таблиц с полями (id, ФИО, прспортные данные, специальность).
DBGrid подключен к View. Через DBGrid добавляю новую сторку, вызывая Append, и получаю ошибку "Невозможно вставить значение NULL id для таблицы Специальность. NULL запрещен".
Есть ли возможность добавлять записи через DBGrid, не прибегая к SQL запросам?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.03.2014, 18:35   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Здесь все просто - в представлении нет поля id из таблицы Специальность судя по ошибке.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.03.2014, 19:59   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

В SQL Server добавил на выход id из таблицы "Специальность", получаю ту же ошибку. Я забыл сказать, что в DBGrid вывожу все столбцы, корме "Сотрудник.id" "Специальность.id", т.к. они явл. первичными ключами.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.03.2014, 21:26   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так а хоть запросом все равно будет ошибка, иду откуда взяться?
eval вне форума Ответить с цитированием
Старый 15.03.2014, 21:35   #7
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Цитата:
так а хоть запросом все равно будет ошибка, иду откуда взяться?
Вообще я сначала решил "поиграться" с SQL Server, и создал тестовую БД. Сделал 2 таблицы. Сделал представление. В delphi подключил представление к DBGrid, и я был удивлен, когда начал вставлять записи. Первичный ключ вставлялся сам (SQL Server по умолчанию сделала его счетчиком), а если я его хотел добавить, то я получал ошибку. Поэтому-то я и решил, что и тут SQL Server по умолчанию будет добавлять.

Теперь id берется отсюда. Добавил ещё 2 TColumn в редакторе DBGrid, и сделал их невидимыми.
Код:
Grid_partaker.Fields[5].AsInteger:=max_id;
Grid_partaker.Fields[6].AsInteger:=max_id;
Только теперь получаю 2 другие ошибки:
1) при INSERT выдает ошибку на внешний ключ, но добавляет в таблицу "Сотрудники" сотрудника. После этого нельзя перейти в скомпилированное приложение.
2) при INSERT выдает ошибку на первичный ключ, но добавляет в таблицу "Специальность" специальность. После этого нельзя перейти в скомпилированное приложение.
Со 2-ой ошибкой все понятно. А что делать с первой, если не применять SQL-запроса, я не знаю.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 15.03.2014 в 21:41.
Rin вне форума Ответить с цитированием
Старый 15.03.2014, 21:47   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

никак, у вас там идентити выставлено, вот от сюда и плясать
да и ваще без запросов это не жизнь, а еще лучше хранимые процедуры
eval вне форума Ответить с цитированием
Старый 15.03.2014, 21:58   #9
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Обидно. Ведь идентити без SQL-запроса не выключить. Блин, хотелось меньше кода. Эх. Пойду писать запросы. Спасибо большое за ответы.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.03.2014, 21:59   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так зачем вы его выставили если он вам не надо? что то вы сами не знаете чего делаете
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование записи, указанной в DBGrid Utkin БД в Delphi 9 25.01.2014 20:04
редактирование dbgrid undead92 БД в Delphi 9 30.10.2013 11:03
Редактирование данных в DBGrid II_Dimit_II БД в Delphi 2 28.05.2013 09:43
Редактирование поля в DBGrid. Ol'K@ БД в Delphi 8 03.02.2013 15:18
Запретить редактирование в DBGrid MixanMM БД в Delphi 12 10.05.2010 20:28