Ну не все с TPanel умеют заморачиваться, чтобы изменять форму не меняя формы...
2 2019-06-07 14:26:37
Re: Главное меню на другой форме (11 replies, posted in Russian)
Изящно! Всего лишь поменяли дескриптор у объекта-структуры Так и продублировать меню на другие формы можно!
3 2019-06-07 14:11:54
Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр (6 replies, posted in Russian)
А, и малость я ввёл вас в заблуждение, на самом деле связь такая: 1<-2<-3<-4->5 - еще и поэтому и ставилась таблица 4 в качестве таблицы поиска при настройке кнопки с действием "Поиск" (которая и не работала как надо).
Так что насчет ценности "добытой" мною информации - еще надо подумать...
4 2019-06-07 13:49:03
Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр (6 replies, posted in Russian)
Видимо, вы добыли ценную информацию о том, какая таблица должна быть главной в связке: та, на которую нет ссылок других таблиц.
Если бы пришлось писать запрос вручную, то по вашей схеме выборку нужно делать из таблицы 3, а остальные таблицы - джойнить, так что всё выглядит логично )))
Главную таблицу рекомендуется указывать, если число таблиц, данные из которых связываются построителем, больше двух.
Вообще, вымученный мною sql-запрос в кнопке с действием "SQL-запрос" выглядел так:
SELECT
strftime("%d.%m.%Y", 4.measurementDate) AS "measurementDate",
2.GroupID,
3.SerialNumber,
3.SubGroupID,
1.SiteID,
4.measurement_F,
4.measurement_t,
4.currentPressure,
5.SensorStatus,
4.id
FROM 1
LEFT OUTER JOIN 2 ON 2.id_1 = 1.id
LEFT OUTER JOIN 3 ON 3.id_2 = 2.id
LEFT OUTER JOIN 4 ON 4.id_3 = 3.id
LEFT OUTER JOIN 5 ON 4.id_5 = 5.id
WHERE 1.id = {cbSiteID}
ORDER BY 4.measurementDate, 2.GroupID, 3.SubGroupID;
и он выдавал то, что я и хотел в отличие от кнопки с действием "Поиск", где я ставил в качестве таблицы поиска таблицу 4, потом 1 (исходя из вымученного SQL-запроса). Причем выдавал ровно столько, сколько нужно - без избытка, дупликатов или недостатка.
Так написать запрос пришлось потому, что искомое значение из фильтрующего комбобокса находилось в таблице 1.
5 2019-06-07 13:15:44
Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр (6 replies, posted in Russian)
Вот как это называется?! Дня три долбался над нюансами проектирования кнопки с действием "Поиск", уже забил на неё, решил через пресловутую кнопку с действием "SQL-запрос" делать... И тут вот после думок о роли "главной таблицы" после информации от Дмитрия перемкнуло меня таблицу поиска поменять при дизайне кнопки "Поиск" - и всё встало как надо...
У меня таблицы связаны так: 1<-2<-3->4->5, где стрелочки - это ключи-связи. Так вот, таблицей поиска при действии "Поиск" была таблица 4 (потому что в ней половина извлекаемых данных находилась), а стоило поставить 3 - как всё заработало как надо, и необходимость в кнопке с действием "SQL-запрос" отпала... Ну как так-то?!
6 2019-06-07 12:40:10
Re: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр (6 replies, posted in Russian)
Так вот для чего нужна "главная таблица"!.. А я думал-думал, так и не понял, ведь в http://myvisualdatabase.com/help_ru/ написано только
Обратите внимание на опцию: "Выберите главную таблицу базы данных в запросе" - в случае сложных SQL запросов с подзапросами, необходимо самостоятельно выбрать главную таблицу базы данных.
и ни слова о гарантии работоспособности форм добавления-просмотра/редактирования-удаления записи из таблицы в данном отображении содержимого грида.
Проставил нужную таблицу - всё работает как надо. Спасибо!
7 2019-06-06 15:00:02
Topic: Кнопка с SQL-запросом и вывод в грид: не работают кнопки Показать/Сохр (6 replies, posted in Russian)
На форме есть грид, есть три комбобокса. По двум из трех комбобоксам фильтруется вывод в грид через инкрементальный поиск (к комбобоксам привязаны кнопки с действием "Поиск"). Также на форме присутствуют кнопки с действием "Новая запись", "Просмотреть/Отредактировать запись", "Удалить запись. На третьем комбобоксе висит кнопка с действием "SQL-запрос", так как стандартные механизмы не тянут - участвует 5 таблиц в выводе (программа просто виснет при настройке действия "Поиск").
Однако после применения этой кнопки на третьем комбоксе вдруг перестают работать кнопки на форме с просмотром и редактированием (а возможно, также с добавлением новой и удалением существующей) записей. То есть формы открываются для редактирования, но они - пустые. В грид выводится id записей из таблицы, аналогичной на первых двух комбобоксах (чтобы как раз и работали эти кнопки), однако этого не происходит. Вопрос - почему?
8 2019-05-31 15:18:14
Re: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
О, оптимизация кода подъехала!.. Спасибо!
9 2019-05-31 14:07:45
Re: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
Мне не нравится такая логика. По моей логике и задумке латентный ведомый комбобокс должен становится явным ведомым только после выбора значения в ведущем комбобоксе, а до этого момента быть самостоятельным и независимым комбобоксом. Поэтому я думаю, что изменение содержимого ведомого комбобокса надо вешать на событие OnChange ведущего комбобокса. Сохранность значения в ведомом комбобоксе для последующих действий - не важна.
10 2019-05-30 06:48:28
Re: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
DriveSoft, именно на OnDropDown вешать надо? Ведомого или таки ведущего комбобокса?
11 2019-05-29 06:00:15
Re: ComboBox настройка (54 replies, posted in Russian)
а frmEmployee.cbGroup.dbUpdate после INSERT'а где???
12 2019-05-29 05:35:43
Re: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
а я как-то больше привык работать с dbItemID, чем с sqlValue. да и проверки на наличие выбранного элемента у них разные: у первого <> -1, у второго <> "NULL".
13 2019-05-28 21:06:47
Re: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
А почему событие OnClick?
14 2019-05-28 15:26:13
Re: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
порыскал по форуму...
получается, надо определиться только с событием ведущего комбобокса, а связывать их статически при проектировании в самой IDE не обязательно, можно отрабатывать код типа:
if Form1.ComboBox_Master.dbItemID <> -1
then
begin
Form1.ComboBox_Slave.dbSQLExecute('SELECT SensorName, id FROM Sensors WHERE id_Object='+IntToStr(Form1.ComboBox_Master.dbItemID));
Form1.ComboBox_Slave.dbUpdate;
end
else
begin
Form1.ComboBox_Slave.dbSQLExecute('SELECT SensorName, id FROM Sensors');
Form1.ComboBox_Slave.dbUpdate;
end;
или будут другие предложения?
15 2019-05-28 13:55:22
Topic: ComboBox: связанный и несвязанный (11 replies, posted in Russian)
Все знают, что два комбобокса можно связать друг с другом при помощи свойства ParentComboBox - один (ведомый) станет зависеть от другого (ведущего), который будет указан в этом свойстве у ведомого.
Так вот вопрос на засыпку. Я хочу иметь ведомый комбобокс как самостоятельный (не связанный с ведущим) в том случае, если в ведущем комбобоксе не выбрано ни одно значение (при этом у ведущего FirstEmptyItem = True).
Понимаю, что завязать надо будет программно, связывать ведомый с ведущим придется через событие OnChange или OnCloseUp ведущего.
Для понимания конкретики. Есть у меня список датчиков (ведомый комбобокс в моей хотелке) и есть список объектов (ведущий комбобокс в моей хотелке), на котором эти датчики установлены (само собой, на одном объекте от одного до нескольких датчиков). Пока ни одно значение в ведущем комбобоксе не выборано, ведомый комбобокс должен вести себя как самостоятельный комбобокс с пустым свойством ParentComboBox и позволять выбирать ЛЮБОЙ датчик из всех существующих в базе. Однако как только в ведущем комбобоксе будет выбрано какое-то значение, то ведомый комбобокс должен уже отреагировать как положено в модели поведения "ведомый - ведущий" и позволить выбрать только те датчики, которые присутствуют на выбранном объекте из ведущего комбобокса.
16 2018-11-23 16:51:57
Re: Что реализовать в первую очередь? (396 replies, posted in Russian)
Компонент "Карта". Если API от Google стал платный, возможна ли поддержка открытых ГИС-платформ? Типа WiliWeb или OpenStreetMap?
17 2018-11-03 13:18:42
Re: Вывод списка имен файлов из папки в выподающем меню (9 replies, posted in Russian)
А связать этот список с тем же ComboBox?
18 2018-09-22 08:50:53
Re: Ключ для проекта (73 replies, posted in Russian)
Что вы там запихали в БД?.. Формы со скриптами не больше 15 метров весят... Вылейте на файлообменник без базы.
19 2018-09-13 08:16:47
Re: Конфликт 2-х db (15 replies, posted in Russian)
Я чего-то не пойму... А нельзя ли вместо
frmComServiceList.eNameCompany.Text := SQLExecute('SELECT NameCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eStreetCompany.Text := SQLExecute('SELECT streetCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eHouseCompany.Text := SQLExecute('SELECT houseCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eFractionCompany.Text := SQLExecute('SELECT fractionCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eOfficeCompany.Text := SQLExecute('SELECT officeCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eTelCompany.Text := SQLExecute('SELECT telCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eNameTypeOfEquipment.Text := SQLExecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eNameManufacturer.Text := SQLExecute('SELECT nameManufacturer FROM manufacturer WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eModel.Text := SQLExecute('SELECT Model FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eSerialNamber.Text := SQLExecute('SELECT SerialNamber FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.eEquipment.Text := SQLExecute('SELECT Equipment FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.mExternalStatus.Text := SQLExecute('SELECT ExternalStatus FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.mDiagnostics.Text := SQLExecute('SELECT Diagnostics FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
frmComServiceList.cbStatusName.DbItemID := SQLExecute('SELECT id_status FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
просто настроить кнопку с действием "показать запись"?..
20 2018-09-13 08:10:08
Re: Экзаменационная программа (24 replies, posted in Russian)
2. В прикрепленном файле имеется проект. Нажимаем начать тест, вводим имя и при входе в Form1 выдает ошибку List index out of bounds (1). В чем проблема не могу понять. Помогите.
Эта ошибка связана с использованием массивов. Если у вас где-то используется массив в цикле, посмотрите внимательно начальное и конечное значение индекса массива.
21 2018-09-12 08:33:58
Re: Экзаменационная программа (24 replies, posted in Russian)
попробуйте
SQLExecute('INSERT INTO exam (id_students, id_questions, id_answers) VALUES (' + IntToStr(Form1.ComboBox6.dbitemid) + ', ' + IntToStr(Form1.ComboBox1.dbitemid) + ', ' + IntToStr(Form1.ComboBox1.dbitemid) + ')');
так как свойство dbItemID - это число, а выполнить вы хотите SQL-запрос в виде текста, поэтому надо привести числовую переменную в символьную (строковую)
22 2018-09-09 14:37:50
Re: БД на заказ (6 replies, posted in Russian)
Без чёткого ТЗ - результат хз. Вы скажите, что вам надо. Подробно.
23 2018-09-07 09:13:44
Re: Лишние символы в отчёте Excel, сформированным действием "Отчёт (SQL)" (5 replies, posted in Russian)
Отформатировал - этот тип значения выставил с Text на Numerical?
24 2018-09-05 20:43:05
Re: Экзаменационная программа (24 replies, posted in Russian)
Сколько заплатите?)))
25 2018-09-03 09:37:40
Re: Сортировка в отчет (10 replies, posted in Russian)
на событие OnAfterSort в гриде повесить код типа
Sorted := 'ORDER BY <колонка таблицы - поле в БД>';
а в отчет выбирать SQL-запросом, в который будете добавлять эту строковую переменную Sorted, что-то типа
SQLQuery('SELECT * FROM ... WHERE ...' + Sorted, Result);
Если исходить из примера в хэлпе, то принимая во внимание
procedure Form1_TableGrid1_OnAfterSort (Sender: string; ACol: Integer);
begin
ShowMessage('Пользователь сделал сортировку по колонке №' + IntToStr(ACol));
end;
надо еще четко знать какой номер колонки за какое поле в тбалице БД отвечает, а номер отсортированной колонки передается в ACol.