Здравствуйте.
Кроме конфликта клиентов для Вашего примера еще есть конфликт SQL-запросов и конфликт двух одиночных нажатий ЛКМ (двойной клик) оператором.
С оператором, увы, сделать ничего нельзя. Разрешить первые два эти конфликта можно двумя способами:
1. "кто первый встал тому и тапки" - отклонением действий всех клиентов, кроме первого. В качестве флажка возможности перехода можно использовать "пустое" значение переменной vCurrentClient.
Скрипт по нажатию кнопки:
begin
if vCurrentClient.AsStr <> '' then exit;
vCurrentClient.Value := GetClientName;
RunSQL('...', nil, 2);
. . .
end.
Скрипт обработки SQL-запроса:
begin
. . .
GetSubpageByName('spg' + DataSet.Fields[0].AsStr).GoToSubpageClient(vCurrentClient.AsStr);
vCurrentClient.Value "= '';
...
end.
2. Использовать список клиентов, запросивших переход к подстранице. Список обслуживается аналогично пункту 1. Размер списка определяет количество одновременно обслуживаемых клиентов и теоретически равен удвоенному числу клиентов, максимально возможных к одновременному подключению.
Во вложении пример подстраничного перехода для списка из 6 элементов. К проекту необходимо предварительно подключить БД. В индикации (одной на всех) указаны имя подстраницы перехода, имя клиента и Tag запроса. Первый запрос имеет Tag=1, второй - 2 и т.д.
При некотором терпении, "двойной клик ЛКМ" может вызвать два перехода - см. счетчик максимального заполнения списка.