Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

           Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
           И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - https://clck.ru/fCqwP

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2022, 14:56   #1
shupike
Пользователь
 
Регистрация: 05.05.2022
Сообщений: 10
По умолчанию VC++ 6 MFC - обновление списка

Мое почтение Совет нужен - ваяю в среде Visual C++ 6 MFC - не пойму, как выкрутиться - есть главное окно, в котором в InitDialog идет запрос к базе, данные забираю и кладу в ListCtrl. Теперь по кнопке вызываю другое диалоговое окно, в котором добавляю новую запись, после чего нужно это второе окно закрыть и вернуться к главному, причем в главном окне в ListCtrl сразу должна появиться свежая запись. Пока что сделал по-тупому - в момент вызова диалога с добавлением данных, просто закрываю главное окно; теперь, после добавления данных вызываю главное окно и там список уже появится со свежей записью. А можно ли не закрывая главное окно каким-то образом обновлять список?

Вот фрагмент кода главного окна:
void CNotebooksDlg::OnButtonAddNewDevice ()
{
// TODO: Add your control notification handler code here
CDialog::OnOK();
CAddNewDeviceDlg window;
window.DoModal();
}

А вот код окна добавления данных (сразу после того, как в базу будет внесена новая запись):
...

CNotebooksDlg window;
window.DoModal();
CDialog::OnOK();
...
Премного благодарен
shupike вне форума Ответить с цитированием
Старый 10.05.2022, 13:42   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 682
По умолчанию

Цитата:
Сообщение от shupike Посмотреть сообщение
А можно ли не закрывая главное окно каким-то образом обновлять список
вынеси код заполнения списка в отдельную функцию и вызывай её как из InitDialog, так и после закрытия модального диалога
Алексей1153 вне форума Ответить с цитированием
Старый 10.05.2022, 14:43   #3
shupike
Пользователь
 
Регистрация: 05.05.2022
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
вынеси код заполнения списка в отдельную функцию и вызывай её как из InitDialog, так и после закрытия модального диалога
Точно, спасибо - попробую :-)
shupike вне форума Ответить с цитированием
Старый 12.05.2022, 10:47   #4
shupike
Пользователь
 
Регистрация: 05.05.2022
Сообщений: 10
По умолчанию

Думал новую тему создать, но попробую в дополнение к текущей все-таки - не могу еще один момент осознать: забираю из файла *.mdb поля таблиц в запросе - все нормально, кроме поля с датой. Почему-то поле пишется в переменную CString в формате "2022-05-09 00:00:00", а мне нужно получить, к примеру, "09.05.22". Открывал базу в MS Access, все вроде бы правильно, поле типа "дата", там все отображается корректно. Ну самое тупое - можно считать в таком виде дату, потом процедуру написать, которая будет отделять день/месяц/год и записывать в CString, но хотелось бы попроще вариант придумать...
shupike вне форума Ответить с цитированием
Старый 12.05.2022, 11:02   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 682
По умолчанию

shupike, попробуй в запросе форматировать в нужном виде

SQL Convert Date functions and formats
Алексей1153 вне форума Ответить с цитированием
Старый 05.06.2022, 11:14   #6
shupike
Пользователь
 
Регистрация: 05.05.2022
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
shupike, попробуй в запросе форматировать в нужном виде

SQL Convert Date functions and formats
Я прошу прощения, только сейчас руки дошли - все же не понял, как именно применить формат в запросе в моем случае:

SqlString2 = "SELECT Main.[S/N], Employers.Employer, History.Date FROM Main INNER JOIN (Employers INNER JOIN History ON Employers.employer_code = History.employer_code) ON Main.device_code = History.device_code";
SqlString2+=" WHERE [S/N]=";
SqlString2+="'";
SqlString2+=sSerial;
SqlString2+="' ORDER BY History.Date";

У меня поле Date из таблицы History, именно его нужно считать в формате DD.MM.YYYY, но не пойму, как в запрос вставить всю эту конструкцию... В примерах фигурирует вот такое: convert(varchar, getdate(), 104) , но мне нужно не считывать текущую дату, а именно забирать из таблицы.
shupike вне форума Ответить с цитированием
Старый 05.06.2022, 11:25   #7
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 682
По умолчанию

shupike, мне попробовать не на чем.

Что-то вроде
Код:
SELECT Main.[S/N], Employers.Employer, CONVERT(varchar,History.Date,104) as [HistoryDate] FROM Main ........
где 104 означает формат
Алексей1153 вне форума Ответить с цитированием
Старый 05.06.2022, 12:58   #8
shupike
Пользователь
 
Регистрация: 05.05.2022
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
shupike, мне попробовать не на чем.

Что-то вроде
Код:
SELECT Main.[S/N], Employers.Employer, CONVERT(varchar,History.Date,104) as [HistoryDate] FROM Main ........
Выдается ошибка "Неопределенная функция CONVERT в выражении".

где 104 означает формат
Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
shupike, мне попробовать не на чем.

Что-то вроде
Код:
SELECT Main.[S/N], Employers.Employer, CONVERT(varchar,History.Date,104) as [HistoryDate] FROM Main ........
где 104 означает формат
Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
shupike, мне попробовать не на чем.

Что-то вроде
Код:
SELECT Main.[S/N], Employers.Employer, CONVERT(varchar,History.Date,104) as [HistoryDate] FROM Main ........
где 104 означает формат
При попытке запроса выдается ошибка "Неопределенная функция CONVERT в выражении".

Upd: Выкрутился иначе, вручную:
while( !recset2.IsEOF() )
{
recset2.GetFieldValue("Date",sDate) ;
sYear=sDate;
sMonth=sDate;
sDay=sDate;
sYear.Delete(4,15);
sMonth.Delete(7,12);
sMonth.Delete(0,5);
sDay.Delete(10,9);
sDay.Delete(0,8);
sDate=sDay+"."+sMonth+"."+sYear;

recset2.GetFieldValue("Employer",sE mpl);
recset2.MoveNext();

}

recset2.Close();
Так как однозначно известна длина поля и формат, просто "откусываю" день, месяц и год, а затем склеиваю все это через "." в нужный формат даты.

Последний раз редактировалось shupike; 05.06.2022 в 15:11.
shupike вне форума Ответить с цитированием
Ответ

           Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
           Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление списка баз данных в BDE abtat C/C++ Базы данных 0 07.01.2020 13:42
Обновление списка баз данных в BDE abtat C++ Builder 0 07.01.2020 10:47
обновление списка slipp Win Api 7 20.11.2013 22:43
Обновление списка TStringList eXa Компоненты Delphi 3 11.08.2007 16:24