Hello,


Please first download latest beta version 2.8
https://www.dropbox.com/s/k1wd8mqe3qb35 … a.zip?dl=0


then you can use this example:

procedure Form1_Button4_OnClick (Sender: string; var Cancel: boolean);
var
    sSQL: string;
    sFileName: string;
    sFieldName: string;

    Params: TParams;
    MemoryStream: TMemoryStream;
    Param: TParam;
begin
    sFileName := 'd:\db 1.jpg';
    sFieldName := 'somefile';

    sSQL := 'INSERT INTO test (title, '+sFieldName+', '+sFieldName+'_filename) VALUES("title text", :'+sFieldName+', "'+ ExtractFileName(sFileName)+'")';
    Params := TParams.Create(nil);


    // BLOB
    MemoryStream := TMemoryStream.Create;
    MemoryStream.LoadFromFile(sFileName); // load file to memory
    MemoryStream.Position := 0;
    Params.CreateParam(ftBlob, sFieldName, ptInput).LoadFromStream(MemoryStream, 15);  // 15 ftBlob (TBlobType)

    Form1.SQLConnection.Execute(sSQL, Params);

    MemoryStream.Free;
    Params.Free;
    Form1.TableGrid1.dbUpdate;
end;


also you can download project with this example:

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

     OpenDialog := TOpenDialog.Create(Form1);
     if OpenDialog.Execute then Form1.Memo1.Lines.LoadFromFile(OpenDialog.FileName);
     OpenDialog.Free;

4,503

(35 replies, posted in Russian)

tkuzmin wrote:

Дмитрий, добрый день! )

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

Пример: пользователь ставить галочку напротив шкаф №2 а в грид попадают :
Шкаф №2
Высота
Глубина
Ширина
и тд

Как такое сделать?

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


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

4,504

(3 replies, posted in Reports)

sonixax wrote:

Thanks a lot smile
And one more problem!
Dear Dimitri, I have a date field with type of Time in my project.
in database it is Time field again!
But in reports it shows strange things!

For example for 22:23:44 it shows : 22:September:44

How can I fix this too ?
thanks again smile

Please attach your project for test.

Between these licenses only one different, life time updates for free or free minor updates.

fenixbel wrote:

Все верно, задумка такая :
Приходит новый клиент,(Петров) у него визитка с штрихкодом человека который его пригласил(например Иванов), оператор заводя нового клиента должна сканером считать штрихкод  в графу пригласил(форма AddEdit),  у Иванова в этот момент соответственно в графе кол-во приведенных клиентов добавляется  +1.
В связи с этим  поле пригласил должно быть TextBox, а у нас получилось, что каждый клиент добавляется в комбобокс, при базе в 400-500 клиентов это не допустимо.

В штрихкоде необходимо сохранять идентификатор клиента, а не ФИО. Т.е. сканер штрихкода вставляет id клиента в компонент edIdKlient, после чего в ComboBox автоматически показывается ФИО данного клиента.


fenixbel wrote:

Так получается подсчет не работает,?
т..е. в графе количество приведенных клиентов отображается  idKlient., например кликаем на Петрова, мы видим что его пригласил Иванов, а в графе Кол-во привед-х клиентов у него 0.

Подсчет можно сделать так

procedure AddEdit_OnShow (Sender: string; Action: string);
begin
    if Action = 'ShowRecord' then
    begin
        AddEdit.Button4.Click;
        AddEdit.Edit6.Text := SQLExecute('SELECT COUNT(*) FROM Klient WHERE idKlient='+IntToStr(AddEdit.Button1.dbGeneralTableId));
    end;
end;

4,507

(4 replies, posted in Russian)

Попробуйте подобное выч. поле

CAST ( (julianday("Окончание работ") - julianday("Начало работ")) * 24 AS REAL )

Чтобы получить результат в формате %d %H:%M, я нашел пример в интернете, но не проверял

    CAST((strftime('%s', '2011-11-10 11:46') - strftime('%s', '2011-11-09 09:00')) / (60 * 60 * 24) AS TEXT) || ' ' ||
    CAST(((strftime('%s', '2011-11-10 11:46') - strftime('%s', '2011-11-09 09:00')) % (60 * 60 * 24)) / (60 * 60) AS TEXT) || ':' ||
    CAST((((strftime('%s', '2011-11-10 11:46') - strftime('%s', '2011-11-09 09:00')) % (60 * 60 * 24)) % (60 * 60)) / 60 AS TEXT)

4,508

(4 replies, posted in Russian)

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



Какую СУБД вы используете в своем проекте? SQLite или MySQL?

4,509

(2 replies, posted in Russian)

arturas1028 wrote:

Скажите пожалуйста, как использовать несколько скриптов?

Можете привести пример нескольких скриптов, покажу пример как их использовать.

4,510

(14 replies, posted in Russian)

Igor wrote:

Дмитрий, здравствуйте !
Когда-то поднимался вопрос:  Сохранение изображений с web камеры в базу. Скажите когда планируется реализация данной функции в MVDB ?

К сожалению не могу подсказать по срокам.

4,511

(11 replies, posted in General)

Actiron wrote:

Hello,

    can I ask you for information how restart trial period, I can test this software before I buy it, but trial period is too short.

Thanks,
Actiron

Hello,


I sent to you e-mail.


Thanks.

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


Исправленный проект

4,513

(8 replies, posted in Russian)

ale2574 wrote:

Я наверное не правильно объяснил. Нужно дублировать таблицу с одной формы на другую, с данными, которые в таблице. Данные я ввожу на первой таблице, а продолжаю работать с этими данными на второй.

Вам необходимо просто скопировать таблицу с одной формы на другую с таким же настройками, т.о. на обеих формах будут показаны одни и теже данные. Компонент TableGrid сам по себе не является хранилещем данных, а всего лишь выводит их из базы данных.

4,514

(2 replies, posted in General)

Example, green text in the first column:

procedure Form3_TableGrid1_OnChange (Sender: string);
var 
    i,c: integer;
 begin 
      c := Form3.TableGrid1.RowCount - 1;                     
      for i := 0 to c do
      begin
         Form3.TableGrid1.Cell[0,i].TextColor := clGreen
     end;
end;

4,515

(8 replies, posted in Russian)

ale2574 wrote:

Нет простите. Я имею в виду дублировать по нажатию кнопки.

К сожалению не совсем понимаю, что именно вы имеете ввиду.

4,516

(8 replies, posted in Russian)

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


Имеете ввиду скопировать? Выделите необходимый компонент на форме, затем нажмите Ctrl+C (либо правой кнопкой мыши по компоненту, затем выберите пункт меню "Copy"), затем на другой форме нажмите Ctr+V чтобы вставить компонент (либо через меню правой кнопкой мыши, выбрав пункт "Paste")

4,517

(3 replies, posted in Reports)

Hello,


I suggest using calculate field for that, example:

CASE BoolField WHEN 1 THEN 'Ja' WHEN 0 THEN 'Nein' ELSE '' END

This calculated field you can add to report and use in a TableGrid.

4,518

(35 replies, posted in Russian)

Более подробней при работе с полем Дата/Время прочитайте раздел "Подробней о свойстве "Calendar"
http://myvisualdatabase.com/help_ru/com … icker.html



Также исправил ваш проект:

4,519

(35 replies, posted in Russian)

Popkov-alex

Про установку галочки обязятельный я знаю, только мне её нужно было сразу поставить, а теперь база уже есть (ошибка #22004Invalid use of NULL value).

Если записи уже есть, также необходимо указать Default value в данном окне, чтобы всем пустым записям присвоилось указанное значение, т.к. галочка Not null запрещает содержать пустое значение в данном поле.

4,520

(10 replies, posted in Russian)

pt.82 wrote:

вроде разобрался, нашел ошибку, пытаюсь сделать огромную таблицу состоящую из 2000 ячеек, надеюсь он не будет зависать при обработке базы из 5 тыс человек.
вопрос знатокам может есть способ другой, сейчас буду делать, по странично на каждую страничку будет своя кнопка или комбобоксом еще не решил. на странице примерно будет 400 ячеек, соответсвенно и в скрипте будет 400 переменных которые будут ложится в ячейки. Вопрос а надо как то память очищать пр закрытии отчета, значение переменных из памяти тоже чистятся?

или вообще может есть способ более простой реализовать такой отчет?

Очищать переменные не нужно.


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

4,521

(4 replies, posted in General)

prahousefamily wrote:

How to edit script set format in tablegrid

-number
123456.789 to

123,456.789

You should use type CURRENCY for field, where you can activate thousand separator:
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=2380&download=0


prahousefamily wrote:

-date
2016-09-14 14:39 to

14/09/2020
by year + 4

You should use calculate field, an example:

strftime('%d.%m.%Y', datefield, '+4 years')



prahousefamily wrote:

-time
14:39 to

02:39 AM

My Visual Database uses user's regional format, but if you need, you can change format in the tablegrid using script, an example:

procedure Form1_GridEmployees_OnChange (Sender: string);
var
   i,c: integer;
   sTime: string;
begin
     Form1.GridEmployees.BeginUpdate;

     c := Form1.GridEmployees.RowCount - 1;
     for i := 0 to c do
     begin
         sTime := Form1.GridEmployees.Cells[4,i];

         if sTime<>'' then
             Form1.GridEmployees.Cells[4,i] := FormatDateTime( 'hh:mm ampm', StrToTime(sTime) );
     end;

     Form1.GridEmployees.EndUpdate;
end;

It's not supported, you can do it only using script and SQL queries.

4,523

(35 replies, posted in Russian)

Popkov-alex wrote:

Добрый день.
Проект запускается, ошибки происходят при формировании отчетов на MySQL (на SQLite работает). Скрины во вложении.

Макрос это просто мысли в слух smile. При нажатии кнопки отчет "фильтр" срабатывал макросом, а не SQL запросом. Стандартный отчет и так неплохо создается (меня устраивает). Задачу поставиили, чтобы в отчет падали только те записи где заполнено поле примечание и дата из другой таблици. Пока просто размышлизмы.


в MySQL нет функции strftime, замените строки с использованием этой функции,например

strftime('%d.%m.%Y', application.date)

на

DATE_FORMAT(application.date, '%d%.%m.%Y')

4,524

(35 replies, posted in Russian)

Popkov-alex wrote:

Добрый день.
Существует рабочий проект в котором нужно сделать 3 поля обязательными для заполнения:
1) Оператор - ComboBox, он работает
2) Заявитель - TextBox, он не должен быть пустым
3) Телефон - цифровой TextBox (NumbersOnly), хотелось бы сделать чтобы количество цифр было равным 14 иначе вывод "ошибка в номере телефона". +7 прописано в DefaultValue.
Можно пример как это сделать.



1-2. На вкладке Таблицы базы данных задайте необходимым полям свойство Not null, т.о. данные поля станут обязательными для заполнения.
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=2377&amp;download=0




3. пример

procedure Добавить_обращение_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
    if Length(Добавить_обращение.Телефон.Text)<>14 then
    begin
        ShowMessage('ошибка в номере телефона');
        Добавить_обращение.Телефон.SetFocus; // устанавливаем фокус ввода
        Cancel := True;
    end;
end;

4,525

(35 replies, posted in Russian)

Popkov-alex wrote:
DriveSoft wrote:
Popkov-alex wrote:

На версиях выше 2.4 проект вообще не запускается sad

Приложите пожалуйста ваш проект.

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

Переместите код подключения к БД MySQL в событие главной формы OnShow, итоговый скрипт должен быть таким

// Автовход в MySQL
procedure Обращения_OnShow (Sender: string; Action: string);
begin
   {$MySQL disable_connectdialog}
     // Обращения.MySQLConnection.Server := '192.168.10.25';
     Обращения.MySQLConnection.Server := '11.0.0.24';
     Обращения.MySQLConnection.Port := 3306;
     Обращения.MySQLConnection.Username := 'user2';
     Обращения.MySQLConnection.Password := '******';
     Обращения.MySQLConnection.Database := 'mfclnt';

     try
         Обращения.MySQLConnection.Connect;
     except
         ShowMessage('Вы не подключились к базе данных.');
     end;

     if Обращения.MySQLConnection.Connected then
     begin
         UpdateDatabase(''); // вызываем автозаполение ComboBox-ов
     end;
end;



begin

end.