Ещё вопрос по футеру. Если я таблицу заполняю SQL запросом, как в ней футер сделать?

2

(5 replies, posted in Russian)

newusr wrote:

Как сделать, чтобы в TGrid заказ отображались записи только текущего заказа? Может у меня вообще в корне не верный алгоритм?
PS: БД - MySQL.

Понял, в чём была моя ошибка. Таблица zakaz никак не привязана к форме была, добавил в таблицу zakaz поле с номером заказа и разместил на форме, теперь в TGrid заказ отображаются только данные текущего заказа.

3

(5 replies, posted in Russian)

pavlenko.vladimir.v wrote:

что значит sostav_2 ?
для чего эта таблица??

Нет таблицы sostav_2, есть sostav_z.
В таблице bludo список всех блюд и цены, в таблице zakaz сумма всего заказа (потом будут ещё поля), в таблице sostav_z соответсвенно состав заказа, т.е. список блюд (id) привязанных к закау (id).

4

(5 replies, posted in Russian)

Добрый день.
Делаю БД кафешки, пока только набросок. Помогите с отображением данных в TGrid:
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=10406
При открытии формы Fzakaz, скриптом вставляю в таблицу zakaz новую пустую запись и сохраняю id, в левой TGrid меню выводятся все данные из таблицы bludo, при нажатии кнопки "Добавить в заказ" открывается новая форма с заполненными полями из таблицы bludo (название, цена) и zakaz (id), по нажатию в этой форме кнопки "сохранить" все данные сохраняются в таблицу sostav_z и форма закрывается, при этом в TGrid заказ отображается все данные из таблицы sostav_z, а должны только записи текущего заказа (zakaz.id=lastid).
Пытался сделать фильтр в настройках таблицы и скриптом:

procedure Fzakaz_TableGrid2_OnChange (Sender: TObject);
begin
   Fzakaz.TableGrid2.dbFilter:='id='+lastid;
end;

при выполнении запроса появляется ошибка:

Сообщение об ошибке: 
#23000Column 'id' in where clause is ambiguous
Action (Search): 
Fzakaz

Запрос вызывающий ошибку:

SELECT DISTINCT `sostav_z`.`id_zakaz` as "sostav_z.id_zakaz",`bludo`.`Название` as "bludo.Название",`sostav_z`.`Количество` as "sostav_z.Количество",`sostav_z`.`Сумма` as "sostav_z.Сумма",`sostav_z`.id,`sostav_z`.`id_bludo` as "sostav_z.id_bludo" FROM `sostav_z` LEFT OUTER JOIN `bludo` ON `sostav_z`.`id_bludo`=`bludo`.id WHERE (id=22)

Как сделать, чтобы в TGrid заказ отображались записи только текущего заказа? Может у меня вообще в корне не верный алгоритм?
PS: БД - MySQL.

Спасибо, Дерек, это моя невнимательность...)

Добрый день.
Подскажите, как скопировать значение из Footer таблицы определённой колонки и вставить в текстовое поле. В footer содержится сумма по колонке.
Поле БД, к которому привязано текстовое поле, имеет тип Деньги, когда пытаюсь сделать так:

Form1.edPrice:=Form1.GridPartsUse.columns[3].footer.Caption

получаю ошибку - несовместимый тип данных.

k245 wrote:

md5(password+username)
Отсюда интересное следствие - после редактирования имени пользователя его пароль становится недействительным ))

Интересно, если это такая защита от редактирования, то почему было бы не сделать md5(password+username+id_role+is_admin)...

8

(28 replies, posted in Russian)

m128mx wrote:

Удалось вывести скрин с камеры на twebbrowser запросом isapi -  http://user:pass@<ip>:<port>/ISAPI/streaming/chanels/101/picture?SnapShotimageType=JPEG

Используй функцию HTTPGetFile(URL,,)var, сохраняет в файл.
Вот пример на форуме

9

(28 replies, posted in Russian)

6katran6 wrote:

VSPlayer  он не показывает все камеры сразу в online

Попробуй Xeoma, есть бесплатная версия.

10

(28 replies, posted in Russian)

Это пример для второго варианта с использованием плагина камеры в TWebBrowser, а не для воспроизведения RTSP потока в VLC плеере.

11

(28 replies, posted in Russian)

Владимир, у Вас же было готовое решение с портабельным VLC плеером, предложите товарищу, может заинтересует.

12

(28 replies, posted in Russian)

Смотря ещё какой поток камера отдаёт, например RTMP умеет и встроенный плеер играть. Ну так автор программы утверждает.

Спасибо за пример, возьму в арсенал.

Ясно, спасибо.

vovka3003 wrote:

Делать страницу в виде файла - необязательно, достаточно записать код в TWebBrowser.
Ну и сам установщик контрола с собой таскать для компьютеров, где его нет.

А как в него записать, есть пример какой-нибудь?

vovka3003 wrote:

Ну, может производителю задать вопрос?

С ними особо не пообщаешься, производитель ACTI. Кодек старинный SED2140.
На все запросы отвечают стандартно: оборудование снято с производства, приобретайте новое...

vovka3003 wrote:

Если есть Onvif, то ODM что-то должен показать.

Нет, к сожалению, Onvif.

Я правильно понял, что для каждой камеры нужно создать html файл и открыть их через TWebBrowser на форме?

vovka3003 wrote:

OLE-объекты нельзя рассматривать как WinControl.

Возможные варианты:

1. Плеер загнать в TWebBrowser, а сам TWebBrowser положить на форму.

2. Собрать в делфи в Ole-контейнере, запускать как Exe-шник, придумать управление (например через параметры запуска).

3. Заюзать через rtsp в VLС плеере (exe), SetParent-ом подтянуть к форме. Управление возможно http-командами.

Да пробовал уже варианты, первые 2 работают, для 3-го нужно знать rtsp поток, а я, к сожалению, не смог его вычислить.
Но хотелось по красоте сделать...

Доброго дня!
Есть код плеера, сграбленного с вэб интерфейса камеры. Плеер в виде nvEncoderMedia.dll. Видимо, чтобы он отображался на форме, его нужно как-то прикрутить к ней, но не соображу как:

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
  NV1: Variant;
begin
  NV1:=CreateOleObject('NVCTRLMEDIA.Media.1');
  //TWinControl(NV1).Parent := Form1.Panel1;  // - ошибка invalid variant operation
  NV1.MediaURL := '192.168.1.100';
NV1.MediaUsername := 'admin';
NV1.MediaPassword := ' ';
NV1.HttpPort := '80';
NV1.DisplayTitleBar(0);
NV1.ID := 1 ;
NV1.SetCommunicationPort(6000,6001,6002,5000,6005,6006);
NV1.Connect();
NV1.Play();
end;

Это получается, что в строке

objExec := objShell.Exec('cmd');

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

vovka3003 wrote:

Но мне кажется, есть более изящное решение, чем:

FindWindow('', 'c:\windows\system32\cmd.exe');

через OLE например.

Добрый день. А как через OLE, например?

vovka3003 wrote:

Только если пропатчить DrvFR.dll smile

Можно подробней, как пропатчить и как пользоваться патченым dll?

vovka3003 wrote:

Как вариант "асинхронности" - вызывать отдельный процесс (exe-шник),..

Я в общем-то к этому и пришёл, но на всякий случай решил спросить, вдруг всё-таки был вариант.

vovka3003 wrote:

Каким способом?

Подключаю драйвер ККМ как OLE объект, подключаюсь, запрашиваю данные, пока по кнопке, потом буду по таймеру:

procedure [name] (Sender: TObject; var Cancel: boolean);
var
  kkm: Variant;
begin
  if VarType(kkm) = varNull then kkm:=CreateOleObject('Addin.DrvFR');
  if kkm.Connect = 0 then
      begin
        
        запросы данных...

    kkm.Disconnect;
      end else showmessage('Не удалось подключиться к ККМ: '+kkm.ResultCodeDescription);
end;