1

(22 replies, posted in Russian)

я все же хочу узнать как работает group_concat

2

(22 replies, posted in Russian)

Milla.Makova wrote:
DenNik wrote:

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

Ага, точно. Спасибо. И как сама не догадалась:)

за что спасибо-то? каким образом я ответил на твой вопрос? smile

3

(22 replies, posted in Russian)

ага. не совсем работает. когда одно из полей пустое, вычисляемое поле содержит пустоту.
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=596&download=0

4

(22 replies, posted in Russian)

так работает. а почему функция не работает?

5

(22 replies, posted in Russian)

замечание я автору проекта адресовал )
теперь вопрос по вычисляемым полям
у меня есть три поля: Фамилия,Имя,Отчество
как сделать вычисляемое поле Ф+И+О?
почему ругается на конструкцию?

group_concat(author.surname,author.name,author.lastname,' ')

6

(22 replies, posted in Russian)

Дмитрий. Вот тебе еще один глюк касающийся редактора форм. Проект base_fixed, как я понял, был сделан на ОООЧЕНЬ большом мониторе. я открыл его на нормальном мониторе и при попытке выделить таблицу полезли глюки со смещением таблицы непонятно куда.
попутно замечание: делать формы в расчете на то что что у всех пользователей мониторы размером км на км - не есть хороший тон в программировани. в таких случаях при запуске формы подгоняется её размер под размер дисплея а также используются якоря. т.к. при запуске этой программы на моем мониторе кнопки оказались скрыты под нижним краем формы. это при том что форма развернута на весь экран

DriveSoft, рекомендую в имени архива с бетами указывать порядковый номер обновления. а то человек вот так скачает бету, а окажется, что у него версия новее. можно конечно, сравнивать даты изменения файлов, но легче ведь ориентироваться по имени )

8

(11 replies, posted in Russian)

1. расположи админские компоненты, например в низу формы, и в зависимости от прав меняй высоту формы, скрывая админские контролы для юзеров
2. наиболее оптимальный/правильный/красивый/профессиональный вариант - применять PageControl, скрывая/показывая вкладки

9

(6 replies, posted in Russian)

хороший перевод smile

Dmitry, а бету по вышеприведенной ссылке обновляешь? т.е. там уже нет тех ошибок открытия, которые я нашел пару дней назад?

jazzitcool, ты не знаешь сильно программирования. но давай абстрагируемся от программирования и подумаем.
хотеть, чтобы форма сама закрывалась по прошествии времени - хорошо. какие проблемы возникают
- если форма закрывается при отсутствии активности. чтобы отслеживать эту активность, нужно написать систему, сродни высококлассному ИИ. смысл? кто будет писать?
- форма закрывается при УХОДЕ пользователя от компа (была парочка таких хотельщиков на другом форуме). следовательно, нужно поставить камеру и разработать сложнейшую систему распознавания образов под управлением нейронной сети. это в пентагон. или положить кнопку под задницу пользователя: встал со стула, форма закрылась
- форма закрывается по желанию/велению юзера. иди лови щуку
- форма тупо закрывается по таймеру. как я сказал, это тупо...

какие еще варианты предложишь? просто теоретически. не задумываясь о тонкостях программирования..

12

(7 replies, posted in Script)

what for? Cancel is a default value

13

(7 replies, posted in Script)

I think a command Cancel:= true; stops script executing after itself.
otherwise there would be no sense in this command

есть такие пользователи, которые в силу своих НЕзнаний, лени/забывчивости и тому подобных особенностей организма хотят получить нечто, зачастую не зная толком, как ЭТО должно выглядеть и действительно ли они хотят получить ЭТО, а не ТО. и приходят на форумы с вопросами, вызывающими недоумение. почитай крупные форумы наподобие киберфорума и других, разделы для начинающих программистов.

DriveSoft wrote:

Порой встречается такая проблема, но она свойственна  для модальных окон, к сожалению как исправить не знаю, но закрыть по таймеру можно, сделал для вас пример:

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

это называется "лепить горбатого" - всякие таймеры для забывчивых пользователей и тому подобный говнокод

это один из основных принципов ОС Windows - будучи вызванным в модальном режиме, окно будет блокировать немодальное вызвавшее его окно. если Дмитрий сделал так, что окно редактора отображается в модальном режиме, то так тому и быть. И это правильно, поскольку ситуация, когда окно редактора (в данном случае, редактирование записи БД) открыто, при этом оставляя возможность взаимодействия с главным окном - признак плохо спроектированной программы.

а то, что кто-то забыл об открытом окне - должно быть его личной проблемой, а не проблемой разработчика ПО

думаю немного модифицировать схему. можно избавиться от поля blocked, а вывод о блокировке записи делать по полю block_user - если пустая строка, значит не заблокирована

короче говоря, сделать полноценную многопользовательскую систему (даже в пределах локальной сети) при помощи данного инструмента не представляется возможным. по крайней мере, в текущей версии.

для теста сделал копию приложения в другую папку с доступом к одной и той же БД.
вроде работает smile
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=585&download=0

Решил я придумать механизм, запрещающий нескольким пользователям одновременно редактировать одну запись
для этого вводятся служебные поля в таблицу БД
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=584&download=0

далее вводятся несколько глобальных переменных

var
  isBlocked: boolean; // состояние блокировки редактируемой записи
                      // (открыта ли она другим пользователем)
  isNewRecord: boolean;
  RecordID: string;   // идентификатор записи

затем при открытии окна редактирования проверяю, заблокирована ли уже запись. если нет, блокирую ее

procedure frmEditor_OnShow (Sender: string; Action: string);
begin
  isBlocked:= false;
  RecordID:= '';
  isNewRecord:= true;
  // проверка, новая запись или нет
  if Action = 'NewRecord' then Exit;
  isNewRecord:= false;
  // получаем идентификатор записи
  RecordID:= IntToStr(frmMain.GridMain.dbItemID);
  // получаем состояние блокировки записи
  isBlocked:= SQLExecute('SELECT blocked FROM main WHERE id='+RecordID);

  // если запись уже заблокирована, покажем предупреждающую надпись и блокируем редактор
  if isBlocked then
  begin
    frmEditor.lblWarning.Caption:= 'Запись редактируется пользователем ' +
      SQLExecute('SELECT block_user FROM main WHERE id='+RecordID);
    EnableEditor(false);
  end else
  // иначе монополизируем открытую запись (запишем флаг blocked и имя пользователя)
  begin
    SQLExecute('UPDATE main SET blocked=1 WHERE id='+RecordID);
    SQLExecute('UPDATE main SET block_user='''+GetUserName+''' WHERE id='+RecordID);
  end;
end;

при закрыти редактора разблокируем запись

procedure frmEditor_OnClose (Sender: string; Action: string);
begin
  // разблокируем запись, если запись была НЕ ЗАБЛОКИРОВАНА и НЕ НОВАЯ
  if (not isBlocked) and (not isNewRecord) then
    SQLExecute('UPDATE main SET blocked=0 WHERE id='+RecordID);
  // разблокируем редактор
  if isBlocked then EnableEditor(true);
end;

An easy to understanding video in first post

23

(5 replies, posted in Russian)

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

24

(5 replies, posted in Russian)

плохо то, что пока не нажмешь "предпросмотр", не появляется кнопка загрузки вложений

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=583&download=0

25

(5 replies, posted in Russian)

DriveSoft wrote:

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


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

а, я не так делал. я загрузил картинку и из списка вложений копировал ссылку.