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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.08.2010, 23:18
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию Смена значения в DBGrid через SQL запрос

Привет всем.

Есть грид, необходимо сменить значения ячейки с нет на дa и обратно(в зависимости от выбранного пункта меню)

Код:
Query.Active:=false;
Query.SQL.Add('UPDATE znp SET status = :status WHERE id= :id');
Query.ParambyName('status').asstring:= 'да';
Query.ParambyName('id').asinteger:=?????????
Query.Active:=true;

Вопрос, как правильно описать параметр ID в запросе, с учётом того, что данная строка выделена в гриде?? Спасибо за помощь.
Ответить с цитированием
  #2  
Старый 19.08.2010, 00:06
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

DBGrid - только средство отображения, а реальный индекс текущей (выделенной) записи хранится в источнике (в твоём случае - TQuery).
Код:
Query.RecNo
С тебя плюс в репутацию (весы над сообщением)

P.S. Не понял, зачем передёргивать Active, вроде для этого есть функции Edit/Post...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj

Последний раз редактировалось PhoeniX, 19.08.2010 в 00:09.
Ответить с цитированием
  #3  
Старый 19.08.2010, 02:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Запросы типа Update выполняются с помощью метода ExecSQL. Вызов метода Open (или "передергивание" св-ва Active) приведет к ошибке времени выполнения.
2. Как уже сказали, DBGrid только отражает текущую выборку. Все данные загружены в источник данных - TQuery, TTable, etc. У тебя есть 2 варианта. Первый: добавить либо специалбный компонент для запросов DELETE, UPDATE, INSERT, написать эти запросы и тогда можно пользоваться методами Edit, Delete, Append с последующим вызовом метода Post для фиксации изменений. Второй: выполнить изменения с помощью дополнительного компонента, а потом перечитать данные через основной источник данных.
3. Текущая строка в DBGrid соответствует текущей строке в источнике данных. Соответсвенно, значение какого-либо поля можно получить напрямую из источника данных:
Код:
Query.ParambyName('id').asinteger:= mainDataSet.FieldByName('id').AsInteger;
Ответить с цитированием
  #4  
Старый 29.08.2010, 15:09
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
1. Запросы типа Update выполняются с помощью метода ExecSQL. Вызов метода Open (или "передергивание" св-ва Active) приведет к ошибке времени выполнения.
2. Как уже сказали, DBGrid только отражает текущую выборку. Все данные загружены в источник данных - TQuery, TTable, etc. У тебя есть 2 варианта. Первый: добавить либо специалбный компонент для запросов DELETE, UPDATE, INSERT, написать эти запросы и тогда можно пользоваться методами Edit, Delete, Append с последующим вызовом метода Post для фиксации изменений. Второй: выполнить изменения с помощью дополнительного компонента, а потом перечитать данные через основной источник данных.
3. Текущая строка в DBGrid соответствует текущей строке в источнике данных. Соответсвенно, значение какого-либо поля можно получить напрямую из источника данных:
Код:
Query.ParambyName('id').asinteger:= mainDataSet.FieldByName('id').AsInteger;

Мда, сложно даются азы. У меня DBGrid подключен через MyQuery к MyDAtaSource. В компоненте MyQuery уже есть DELETE, UPDATE, INSERT но они у меня пусты. Их надо заполнить соответсвующими запросами?
Ответить с цитированием
  #5  
Старый 29.08.2010, 15:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
В компоненте MyQuery уже есть DELETE, UPDATE, INSERT но они у меня пусты. Их надо заполнить соответсвующими запросами?
Ответ зависит от того, какой запрос у вас в MyQuery. Если он простой типа
Код:
select * from znp 
тогда не требуется, а вот если что-то посложнее типа:
Код:
select * from znp left join table1 on znp.id=table1.id
Вот тогда если планируется как-то изменять данные в таком наборе, то уже придется заполнить эти поля, т.к. здесь уже вы сами должны разбираться куда и чего писать при вставке/изменении/удалении.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter