Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120

Запрос на редактирование записей

17.06.2015, 02:17. Показов 1817. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Помогите с редактированием записей.
Код ниже, вместо редактирования, полностью очищает поле, причем во всех записях, а не только в выделенной на DBGrid'e.

Delphi
1
2
3
4
    frmComponent.ADOQueryStajer.Close;
    frmComponent.ADOQueryStajer.SQL.Clear;
    frmComponent.ADOQueryStajer.SQL.Add('UPDATE Stajer Set Familiya='''+DBEdtRedFamStaj.Text+'''');
    frmComponent.ADOQueryStajer.ExecSQL;
Добавлено через 6 минут
Я так понимаю запрос UPDATE подразумевает изначально удаление всех полей указанных, если в условии не прописано другое. Подскажите как можно или в условии, или еще каким-то способом редактировать выделенное в DBGrid поле.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.06.2015, 02:17
Ответы с готовыми решениями:

Редактирование записей в БД
Народ, небольшая проблемка. Пишу дипломку (небольшая локальная СУБДшка). Может кто нибудь подсказать, как проще и быстрее сделать...

Редактирование записей
Доброго времени суток! Для полноты картины: в БД хранится таблица, на клиенте создаю две вкладки, одну вкладку для ввода (обработки)...

Фильтрация и редактирование записей
доброго времени суток делаю приложение ,которое делает операции с записями:редактирует, добавляет записи использую ADOConnection,...

15
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
17.06.2015, 02:21
WHERE
По ссылке речь идет про SELECT, но суть та же самая.
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120
17.06.2015, 02:31  [ТС]
В Where необходимо ставить условие по которому будет выборка. У меня нет условия заданного. Это должен быть любой столбец выделенный пользователем. Как такое в Where записать не понимаю. Если это вообще возможно.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
17.06.2015, 02:38
Цитата Сообщение от RedBull89 Посмотреть сообщение
Это должен быть любой столбец выделенный пользователем.
Отсюда и до забора подробней, пожалуйста. Какие нафиг столбцы в таблице БД?
Цитата Сообщение от RedBull89 Посмотреть сообщение
в выделенной на DBGrid'e
А вот это уже сложнее.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,668
Записей в блоге: 21
17.06.2015, 06:14
при работе с бд ты должен сформировать текстовую строку в которой написано
установить для таблицы такой-то значение поля такого-то и такого-то для всех записей, которые подходят под условие такое-то
это общий принцип
строка должна быть в точности такая, только слова нерусские все
если ты не указал условие, значит операция будет произведена для всех записей таблицы

если в таблице есть ключевое поле, обычно оно и ставится в условие Where
Delphi
1
update table1 set Field1='Вася', Field2='Пупкин' where ID=12345
эта информация содержится в учебниках SQL
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
17.06.2015, 08:19
Если в sql не рубишь, попробуй в аксесе создать запрос. Там и мастером и конструктором можно. Еще и как работает проверить. А потом копируешь его текст в режиме SQL, и кидаешь в текст программы.
И вместо ADOQuerу лучше ADODataSet компоненты ставить. Запрос в его .CommandText писать.
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120
17.06.2015, 11:41  [ТС]
Northene, "любая строка выделенная пользователем" будет правильнее

Добавлено через 3 минуты
Krapotkin, я знаю что в sql надо писать условие при обновлении. Надеялся что есть возможность без условия это сделать. Ведь при удалении не надо прописывать какую строку я удаляю. Значит буду просто удалять выделенную строку и добавлять заново.

Добавлено через 3 минуты
Kavasaka, правильно в sql я плохо шарю. Проверить запрос я в MS SQL Server'e могу. И я изначально в первом посте подписал что понимаю, то что удаление будет полностью записи, нужно условие. Надеялся что есть способ другой.

Добавлено через 6 минут
А есть ли какой-то метод, возвращающий номер выделенной в DBGrid строки?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
17.06.2015, 11:43
Цитата Сообщение от RedBull89 Посмотреть сообщение
А есть ли какой-то метод, возвращающий номер выделенной в DBGrid строки?
Для баз данных нет такого понятия как "номер строки".
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120
17.06.2015, 13:02  [ТС]
Номер строки нашел..но к чему его прицепить в условии не понятно

Добавлено через 1 минуту
northener,
Delphi
1
 NomStr:=TStringGrid(DBGrid1).Row;
возвращает номер строки выделенной в dbgrid

Добавлено через 30 секунд
правда предупреждение выдает на TStringGrid но работает ))

Добавлено через 43 минуты
Решил проверить а работает ли запрос вообще, даже с условием...
Delphi
1
2
3
4
    frmComponent.ADOQueryStajer.Close;
    frmComponent.ADOQueryStajer.SQL.Clear;
    frmComponent.ADOQueryStajer.SQL.Add('UPDATE Stajer Set Familiya='''+DBEdtRedFamStaj.Text+''' where IDStajer=103');
    frmComponent.ADOQueryStajer.ExecSQL;
Ничего не меняет....
0
W
 Аватар для kavasaka
115 / 115 / 33
Регистрация: 16.04.2013
Сообщений: 750
17.06.2015, 13:11
Цитата Сообщение от RedBull89 Посмотреть сообщение
Надеялся что есть способ другой
учить sql )))
я увидел что ADO.. подумал что mdb база, а у тебя похоже mdf. Плохо что нигде больше такого конструктора запросов нет как в акцесе
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120
17.06.2015, 14:13  [ТС]
Да учить надо(
Редактирование сделал, правда ужасно не правильно. Удаление и потом добавление..
Когда время не будет поджимать исправлю.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,668
Записей в блоге: 21
18.06.2015, 07:22
Цитата Сообщение от RedBull89 Посмотреть сообщение
при удалении не надо прописывать какую строку я удаляю
???
оно само догадывается ?
конечно надо.

просто некоторые вещи в черновом варианте делаются за тебя, но в основе лежат все те же 4 команды SQL
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120
18.06.2015, 18:27  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
???
оно само догадывается ?
конечно надо.

просто некоторые вещи в черновом варианте делаются за тебя, но в основе лежат все те же 4 команды SQL
для удаления например не надо прописывать условие

Добавлено через 8 часов 47 минут
Вернулся к UPDATE . Как о не красиво удалять и заново добавлять запись.
Delphi
1
2
3
4
5
6
    frmComponent.ADOQueryStajer.Close;
    frmComponent.ADOQueryStajer.SQL.Clear;
    frmComponent.ADOQueryStajer.SQL.Add('update Stajer set Familiya='+EdtFamiliya.Text+', Imya='+EdtImya.Text+', Otchestvo='+EdtOtchestvo.Text+
    ',Pol='+ComboBoxPol.Text+', DataRojdeniya='+DateToStr(DTPDataRojd.date)+',Telefon= '+EdtTelefon.Text+
    ',Adres='+EdtAdres.Text+', IDGruppi='+VarToStr(DBLookupComboBoxGruppa.KeyValue)+', DataSobesedovaniya='+DateToStr(DTPDataSobesed.date)+' where IDStajer='+Edit1.Text+')');
 frmComponent.ADOQueryStajer.ExecSQL;
Подскажите что может быть с датой не так?
Ошибка вылетает: "Неправильный синтаксис около конструкции .2015"
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,668
Записей в блоге: 21
19.06.2015, 06:36
я бы порекомендовал завести переменную s:string;
вывести строку туда и посмотреть, что получилось
при вашем способе формирования строки вероятность получить ошибку очень велика
я не знаю, к какой БД вы подключаетесь, но я бы дату обрамил кавычками
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 120
19.06.2015, 10:15  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
я бы порекомендовал завести переменную s:string;
вывести строку туда и посмотреть, что получилось
при вашем способе формирования строки вероятность получить ошибку очень велика
я не знаю, к какой БД вы подключаетесь, но я бы дату обрамил кавычками
Подключаюсь к MS SQL Server 2012


Огромное спасибо, скобки оказывается везде нужны были, а я голову ломал что не так.
Рабочий код обновления, может кому пригодится.
SQL
1
2
3
4
5
6
7
    frmComponent.ADOQueryStajer.Close;
    frmComponent.ADOQueryStajer.SQL.Clear;
    frmComponent.ADOQueryStajer.SQL.Add('update Stajer set Familiya='+QuotedStr(EdtFamiliya.Text)+', Imya='+QuotedStr(EdtImya.Text)+
    ',Otchestvo='+QuotedStr(EdtOtchestvo.Text)+',Pol='+QuotedStr(ComboBoxPol.Text)+', DataRojdeniya='+QuotedStr(DateToStr(DTPDataRojd.date))+
    ',Telefon= '+QuotedStr(EdtTelefon.Text)+',Adres='+QuotedStr(EdtAdres.Text)+', IDGruppi='+QuotedStr(VarToStr(DBLookupComboBoxGruppa.KeyValue))+
    ',DataSobesedovaniya='+QuotedStr(DateToStr(DTPDataSobesed.date))+' where IDStajer='+Edit1.Text+'');
    frmComponent.ADOQueryStajer.ExecSQL;
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,668
Записей в блоге: 21
19.06.2015, 12:10
еще рекомендую использовать функцию format
там все это выглядит попроще
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2015, 12:10
Помогаю со студенческими работами здесь

Редактирование и добавление записей в БД
Добрый день. Подскажите, пожалуйста. Есть форма "Номенклатура",на ней DBGrid, в ней есть три поля с подгрузкой значений из других таблиц. В...

Редактирование записей из БД SQL в Delphi
Возникла проблема при попытке редактирования БД в делфи. На форме есть dbgrid в котором показаны записи из таблицы sql, мне нужно что бы...

Сортировка, редактирование и добавление записей в БД
Здравтвуйте, а как сортировать записи поиск и фильтрация с помощью SQL-запросов Можете написать коды ,которые надо вводить в SQL-запросы

Неправильное редактирование записей в таблице
Ребята у меня такая проблема : Я хочу отредактировать одну строчку в таблице , а он мне редактирует все записи в таблице на одно и то же ,...

Редактирование записей БД, выведенных в TreeView
Проблема такая, из бд загоняю в treeview, так вот, редактировать можно только последнюю запись(узел в treeview), подскажите пожалуйста как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru