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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2010, 09:19   #11
sl963
Пользователь
 
Регистрация: 29.12.2008
Сообщений: 23
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
Так и не выложили ни текст запроса ни...Ладно попробуем телепатнуть. Чтобы это работало, в наборе данных должно присутствовать поле "Дата рождения". Потом надо обращатся к датасету с которым работаем, то есть если отображаем данные из Query, то действие выглядит так
Код:
procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
begin
if  ADOQuery1.FieldByName('имя поля где дата').Value <> null then
DateTimePicker1.DateTime:=ADOQuery1.FieldByName('имя поля где дата').AsDateTime;

end;
Вот как выполняеться запрос:
Код:
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from 1');
ADOQuery1.SQL.Add('WHERE `Год поступления` LIKE :godp');
ADOQuery1.Parameters.ParamByName('godp').Value :=edit1.text;
ADOQuery1.Active:=true;
DataSource1.DataSet := ADOQuery1;
В наборе данных это где?
И как обращаться к дата сету?

Последний раз редактировалось artemavd; 07.10.2010 в 07:21.
sl963 вне форума Ответить с цитированием
Старый 06.06.2010, 09:49   #12
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

ADOQuery1 и есть TDataset это у них общее с ADOTable1 .
И в нём же содержится набор данных, набор данных это и есть таблица (вернее часть данных полученая с помощью запроса). (Ну это теорияа её лучше в книжке почитать, всётаки я не преподаватель.)

в общем можно всё так завернуть

type
TForm1 = class(TForm)
.......
private
procedure _AfterScroll(DataSet: TDataSet);


Код:
procedure TForm1._AfterScroll(DataSet: TDataSet);
begin
if  Datasource1.dataset.FieldByName('имя поля где дата').Value <> null then
DateTimePicker1.DateTime:=Datasource1.FieldByName('имя поля где дата').AsDateTime;
end;
там где подключаете ADOQuery1 к DataSource1
после
DataSource1.DataSet := ADOQuery1;
добавте строчку

DataSource1.DataSet.AfterScroll:=_A fterScroll;
или
ADOQuery1.AfterScroll:=_AfterScroll ;
Если подключаете какойто другой датасет, то и ему на AfterScroll обработчик этот поставте.

или на создании формы и ADoTable и ADOQuery1 на AfterScroll этот обработчик присвойте, или в дизайнере на AfterScroll выберите этот обработчик у всех компонентов которые нужны.

Если набор компонентов постоянный то лучше в дизайнере, а так больще делается если компоненты динамически создавать.

Последний раз редактировалось vovk; 06.06.2010 в 09:51.
vovk вне форума Ответить с цитированием
Старый 06.06.2010, 10:47   #13
sl963
Пользователь
 
Регистрация: 29.12.2008
Сообщений: 23
По умолчанию

Получилось! Спасибо вам огромное!!!
Если можно еще один маленький вопросик=)
Вот когда таблица полная (без запросов) при редактировании даты в DateTimePicker, данные в дб гриде меняються. вот код

DateTimePicker1.DateTime := ADOTable1.FieldByName('Дата рождения').AsDateTime;

Но если выпонить запрос то при редактировании даты в DateTimePicker
данные в дбгриде остаються прежними. т.е было в дбгриде "12.03.2010" я выбрал в DateTimePicker 13.03.2010 а оно не поменялось. осталось прежним=(
sl963 вне форума Ответить с цитированием
Старый 06.06.2010, 11:12   #14
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

конечно, а с чего они должны менятся? Данные нужно поменять самому, к примеру запросом,

Код:
'Update (имя таблицы) set (имя поля) = (значение которое должно принять поле) WHERE (условия по которым отбираем записи для редактирования) '

то есть у вас както так
Используем событие onCloseUP пикера
Код:
if DateTimePicker1.Date = ADOTable1.FieldByName('Дата рождения').AsDateTime then exit;
ADOQuery1.Active:=False;
ADOQuery1.SQL.text:='Update 1 set [Дата рождения] = :date_ WHERE (условия по которым отбираем записи для редактирования) ';
ADOQuery1.Parameters.ParamByName('date_').Value:=DateTimePicker1.Date;
ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from 1');
ADOQuery1.SQL.Add('WHERE `Год поступления` LIKE :godp');
ADOQuery1.Parameters.ParamByName('g odp').Value :=edit1.text;
ADOQuery1.Active:=true;
условие в Where должно быть такое чтобы под него попадала только текущая запись, к примеру ID если это поле есть (в общем ключевое поле) предположем что оно есть и тогда примерно
Код:
ADOQuery1.Active:=False;
ADOQuery1.SQL.text:='Update 1 set [Дата рождения] = :date_ WHERE id = :id_ ';
ADOQuery1.Parameters.ParamByName('date_').Value:=DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('id_').Value:=ADOTable1.FieldByName('Дата рождения').AsDateTime;
ADOQuery1.ExecSQL;

Последний раз редактировалось vovk; 06.06.2010 в 11:23. Причина: отправил сообщение ещё не дописав
vovk вне форума Ответить с цитированием
Старый 06.06.2010, 15:43   #15
sl963
Пользователь
 
Регистрация: 29.12.2008
Сообщений: 23
По умолчанию

данные в пикере меняеться а в дб гриде нет=(Остаються прежними
sl963 вне форума Ответить с цитированием
Старый 06.06.2010, 17:15   #16
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Тогда с начала, дбгрид всего лиш отображает данные таблиц которые находятся в базе данных. Необходимо сначала изменить данные в таблице, затем запросить их заново, либо обновить. запросом мы меняем содержимое поля [Дата рождения], потом запрашиваем данные из таблицы.. Если нет ошибок то всё должно получатся, но только неабходимо совершать обновление данных на какое либо действие, я предлагал делать это на
Цитата:
onCloseUP пикера
то есть событие onCloseUP пикера должно содержать процедуру

Код:
procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.text:='Update 1 set [Дата рождения] = :date_ WHERE id = :id_ ';
ADOQuery1.Parameters.ParamByName('date_').Value:=DateTimePicker1.Date;
ADOQuery1.Parameters.ParamByName('id_').Value:=ADOTable1.FieldByName('Дата рождения').AsDateTime;
ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * from 1');
ADOQuery1.SQL.Add('WHERE `Год поступления` LIKE :godp');
ADOQuery1.Parameters.ParamByName('g odp').Value :=edit1.text;
ADOQuery1.Active:=true;

end;
но это всё примерно, ведь я не знаю ни поля таблиц, ни ключевые поля.. да в общем то ничего незнаю кроме имени поля [Дата рождения]
vovk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGrid и DateTimePicker Marx88 БД в Delphi 6 09.12.2009 01:38
DateTimePicker //Hellp Angel86rus Общие вопросы Delphi 2 14.08.2009 16:37
Защита листа вновь созданой макросом книги. КаМММ Microsoft Office Excel 1 27.04.2009 06:14