Aleksandr.Popkov

1. Немного доработал данный пример, т.к. не очень удобный. К сожалению проблему с исчезновением курсора решить не получиться, но теперь при поиске, вы можете нажать стрелку вниз, чтобы сразу начать выбор вариантов в ComboBox во время поиска, также можно нажать Esc, чтобы отменить поиск. (проект приложил к сообщению)


2. В случае создания обязательного внешнего ключа (для ComboBox), необходимо указать идентификатор записи по умолчанию, который присвоится для существующих записей, где данный внешний ключ не имеет значения. Например вы можете в словаре услуг создать название услуги как "Не определена", затем идентификатор этой новой записи использовать как значение по умолчанию.


Либо можно написать небольшой скрипт, который не позволит при создании/редактировании записи сохранить ее без указания Услуги, например так:
Создайте событие OnClick для кнопки "Сохранить запись"

procedure frmAbonent_Button6_OnClick (Sender: string; var Cancel: boolean);
begin
    if frmAbonent.cbService.dbItemID = -1 then
    begin
        ShowMessage('Выберите услугу.');
        Cancel := True;
    end;
end;

6,702

(1 replies, posted in Russian)

1.
Компонент Memo не поддерживает выравнивание по обеим сторонам.


2.
Символ степени 2 можно вставить так, удерживая Alt, набрать на дополнительной клавиатуре 0178
для степени 3, удерживая Alt, набрать 0179


другие коды символов можно посмотреть здесь:
http://konyakov.ru/2012/10/22/ascii-kod … html-utf8/

6,703

(11 replies, posted in Russian)

Вы не можете изменить цвет кнопки, т.к. в последних версиях Windows эта возможность была заблокирована на уровне ОС.


Но можно например изменить стиль кнопки, надпись сделать жирной:

procedure Form1_Button7_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.Button7.Font.Style := fsBold;
end;

6,704

(4 replies, posted in Russian)

Используйте свойство EditMask компонента TextBox, маска ввода:
+7\-999\-999\-99\-99;0;_


но символ +7 не будет сохранен в базе, т.к. является частью маски.

Пожалуйста скачайте данный пример
http://myvisualdatabase.com/forum/misc. … download=1

Конечно, пишите )

6,707

(63 replies, posted in Russian)

Попробуйте пожалуйста данный SQL запрос

SELECT
task.taskname,
strftime('%d.%m.%Y',task.dateEnd),
subtask.subtaskname,
strftime('%d.%m.%Y',subtask.dateEnd)

FROM task

LEFT OUTER JOIN subtask ON subtask.id_task=task.id

WHERE
((SELECT Count(*) FROM subtask sub WHERE sub.id_task=task.id AND sub.status=1) > 0 OR task.status=1) AND (subtask.status <> 0 OR subtask.status IS NULL )


ORDER BY strftime('%d.%m.%Y',task.dateEnd), strftime('%d.%m.%Y',subtask.dateEnd)

6,708

(63 replies, posted in Russian)

Как только появится время, я посмотрю.

При потере фокуса, выделение в гриде менее заметно, поэтому вы могли подумать что запись не выбрана, изменить цвет выделения записи когда компонент не активен можно так

    Form1.TableGrid1.InactiveSelectionColor := clHighlight;
    Form1.TableGrid2.InactiveSelectionColor := clHighlight;

данный код можно расположить на событие OnShow формы Form1

Aleksandr.Popkov wrote:

По вашему примеру это просто информация которая не записывается в базу поэтому через поиск не отфильтруется и в отчет не попадет. Смысл программы теряется.


Данную информацию не нужно записывать, так как зная услугу, можно определить ее "Тип услуги" и "ОГВ"
Удалил из проекта лишние ComboBox-ы и связи в БД, поиск и отчеты при этом работают.

6,711

(17 replies, posted in Script)

Please download an example:
http://myvisualdatabase.com/forum/misc. … download=1

pha1984 wrote:

я нарисовал то что хотел на фотошопе, надеюсь будет понятно, смотрите скриншот

Имеете ввиду цвет выделения записи? чтобы у обоих он был синего цвета?

pha1984
1. Возможно я не понял вопроса, но когда вы выбираете значение в грид2, родительская запись в грид1 уже выделена и чтобы вы не выбрали в грид2, для грид1 это ничего не изменит, т.к. в грид2 присутствуют только дочерние записи выделенной родительской записи в грид1.


2. Они идентичны, второй вариант был добавлен в более новых версиях для удобства.

Aleksandr.Popkov
Если у вас это связанный список (Орган власти > Услуги)
то обычно сперва выбирают родительскую запись (Орган власти), затем уже дочернюю (Услуги), в таком виде при выборе Органа власти, вы видите Услуги в списке, которые принадлежать к выбранному Органу власти и только затем выбираете услугу.


если же вы хотите сразу выбирать Услугу, то ComboBox-ы "Тип услуги" и "ОГВ" на форме в принципе не нужны, так как выбранная услуга однозначна определяет эти значения ("Тип услуги" и "ОГВ"), т.о. лучше выводить их например на компонент Label, просто для информации, без возможности изменения.
Реализовал это в качестве примера на вашем проекте.


Такое же хотел проделать для пользователей, Логин входа привязать к справочнику операторов и на frmMain могли выбрать только свои данные.

Пожалуйста загляните в эту тему
http://myvisualdatabase.com/forum/viewtopic.php?id=1633

Поправил.


В настройках кнопки "Поиск" неверна была указана таблица (Category вместо Subcategory)


и ошибка в SQL запросе скрипта, необходимо так:

Form1.Memo1.Text:= SQLExecute('Select danniye from Subcategory where id='+Form1.TableGrid2.sqlValue);
Godless wrote:

А можно второй проект (видит только свои)  для версии 1,44, пожалуйста?

Пожалуйста.

6,717

(63 replies, posted in Russian)

SELECT
task.taskname,
strftime('%d.%m.%Y',task.dateEnd),
subtask.subtaskname,
strftime('%d.%m.%Y',subtask.dateEnd)

FROM task

LEFT OUTER JOIN subtask ON subtask.id_task=task.id

WHERE
task.status=1 AND subtask.status=1

ORDER BY strftime('%d.%m.%Y',task.dateEnd), strftime('%d.%m.%Y',subtask.dateEnd)

если в SQL запросе встречается точка с запятой, это означает конец запроса, и все что написано дальше, будет проигнорировано.

3. К сожалению не понял, что вы имеете ввиду, поиск у вас работает, данные в ComboBox-ах из справочников присутствуют, пожалуйста опишите конкретно (с именами форм и компонентов), что именно не работает.


4.  Для полей расположенных на MasterData1, установите значение StretchMode = smMaxHeight

Приветствую,


к сожалению проект не приложен к сообщению, отправьте его на support@drive-software.com
со ссылкой на данную тему, постараюсь помочь.

6,720

(63 replies, posted in Russian)

Добавил в пример

6,721

(63 replies, posted in Russian)

Готово.

6,722

(63 replies, posted in Russian)

Form1.dtpBirthday.DateTime := SQLDateTimeToDateTime( SQLExecute ('SELECT contact.birthday FROM contact WHERE id='+Form1.TableGrid2.sqlValue) );

6,723

(63 replies, posted in Russian)

в sql запросе пропущено слово FROM

Form1.dtpBirthday.DateTime := SQLExecute ('SELECT strftime(''%d.%m.%Y'',contact.birthday) FROM contact WHERE id='+Form1.TableGrid2.sqlValue);

6,724

(63 replies, posted in Russian)

Form1.dtpBirthday.DateTime := SQLExecute ('SELECT strftime(''%d.%m.%Y'',contact.birthday) WHERE id='+Form1.TableGrid2.sqlValue);

6,725

(26 replies, posted in Russian)

alex842
Спасибо, действительно так.