8,926

(10 replies, posted in Script)

Change if 7 = MessageDlg to if 6 = MessageDlg

8,927

(7 replies, posted in Script)

sonixax
Please, send me your project, i'll check it.
support@drive-software.com

8,928

(10 replies, posted in Script)

carlo_dj

you forgot to write Begin and End after Then

procedure Form1_btBackup_OnClick (Sender: string; var Cancel: boolean);
begin
          if 7 = MessageDlg('Create / Update the SqLiteDB? Best choice is every day on the end of the shift back it up.', mtConfirmation, mbYes + mbNo, 0) then
          begin
                Cancel := True;  // I think it is not necessary
                CopyFile('sqlite.db', 'Backup\sqlite.db'); // Application path
                //CopyFile('sqlite.db', 'I:\TP2014\Backup\sqlite.db'); // Reserve path
                //P:\C\CF\CF3\TEST GA en MB\TP2014\Backup\sqlite.db  // Backup path workplace
          end;
end;

8,929

(6 replies, posted in General)

First, please download beta version 1.46
https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0


Example, how to make trial period

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
   iDays: integer;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\MyVisualDatabaseTrial',true);
     if not reg.ValueExists('StartDate') then reg.WriteDate('StartDate', Now+10); // trial period is 10 days

     iDays := Trunc(reg.ReadDate('StartDate')) - Trunc(Now); // time left days

     reg.CloseKey;
     reg.Free;

     if iDays < 1 then
     begin
          ShowMessage('Trial period is over.');
          Form1.Close;
     end;

     ShowMessage('Demo version. Time left: ' + IntToStr(iDays));
end;

Also you can download example project.

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


Можно, в бета версию 1.46 добавил возможность писать в системный реестр, где и можно хранить дату первого запуска, и затем сравнить ее с текущей.
Скачайте бета версию:
https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0


Код можно поместить в событие OnShow главной формы:

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
   iDays: integer;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\MyVisualDatabaseTrial',true);
     if not reg.ValueExists('StartDate') then reg.WriteDate('StartDate', Now+10); // trial period is 10 days

     iDays := Trunc(reg.ReadDate('StartDate')) - Trunc(Now); // time left days

     reg.CloseKey;
     reg.Free;

     if iDays < 1 then
     begin
          ShowMessage('Trial period is over.');
          Form1.Close;
     end;

     ShowMessage('Demo version. Time left: ' + IntToStr(iDays));
end;

также можете скачать готовый проект с данной реализацией

Sorry )

procedure frmProdModel_Button1_OnAfterClick (Sender: string);
begin
          frmProdModel.GridProdMod.SelectedRow := 0;
          frmProdModel.lblCompType.Caption := frmProdModel.GridProdMod.Cells[3, 0];
          frmProdModel. EdProdModel.Text := frmProdModel.GridProdMod.Cells[2, 0];
end;

8,932

(30 replies, posted in Script)

function for check:

function CheckDublicate (Action, sTable, sField, sValue: string; id: integer;): boolean;
var
   s: string;
begin
     result := False;
     if Action = 'NewRecord' then
     begin
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE '+sField+' LIKE "' + sValue + '"');
          if StrToInt(s) > 0 then result := True;
     end;

     if Action = 'ShowRecord' then
     begin
          s := SQLExecute ('SELECT Count(*) FROM '+sTable+' WHERE ('+sField+' LIKE "' + sValue + '") AND (id <> '+ IntToStr(id) +')');
          if StrToInt(s) > 0 then result := True;
     end;
end;


// Event OnClick of button for save record
procedure frmEmployee_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
     if CheckDublicate(frmEmployee.dbAction, 'employees', 'lastname', frmEmployee.edLastName.Text, frmEmployee.ButtonSave.dbGeneralTableId) AND
        CheckDublicate(frmEmployee.dbAction, 'employees', 'firstname', frmEmployee.edFistName.Text, frmEmployee.ButtonSave.dbGeneralTableId) then
     begin
          ShowMessage('Person already exists.');
          Cancel := True;
     end;
end;


Please, download this project example:

8,933

(10 replies, posted in Script)

Please, download latest version 1.45
http://myvisualdatabase.com/download/myvisualdb.exe

8,934

(10 replies, posted in Script)

Hello,


if the file sqlite.db in the project folder, also you should create folder "Backup"

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
   CopyFile('sqlite.db', 'Backup\sqlite.db');
end;

try this

procedure frmProdModel_Button1_OnAfterClick (Sender: string);
begin
          frmProdModel.GridProdMod.SelectedRow := 0;
          frmProdModel.lblCompType.Caption := frmProdModel.GridProdMod.Cells[3, ARow];
          frmProdModel. EdProdModel.Text := frmProdModel.GridProdMod.Cells[2, ARow];
end;

8,936

(5 replies, posted in General)

sonixax wrote:

also, how can I show the file_filename in grid ?!

You shoud create calculated fied with value: fieldname_filename

8,937

(5 replies, posted in General)

sonixax wrote:

thanks a lot,
But another question,
how can I get root folder address of exe file ?!
I want to copy file inside the program "root/images" directory!

Just set property of component DBFile:
CopyTo=/images


and file will be copied automatically to this folder

sonixax wrote:

Of course I want to rename them in the new directory!
Thanks a lot

if a file with the same name already exists, it will be automatically renamed.

Hello,


You should use event OnAfterClick of button for search and use this script:

Form1.TableGrid1.SelectedRow := 0;

8,939

(5 replies, posted in General)

Hello,

In one field may be only one image.
In the current version, to select multipe images can only be done using a script, but it is quite difficult.


For save in database only image name and copy image file in a specific folder, you can use component DBFile,
set the property of the component Type = Link File and CopyTo, here you can get more inmormation about property CopyTo:
https://translate.googleusercontent.com … WCnwsx7Cbg

8,940

(5 replies, posted in Script)

in your case, you need another table


Please, download project

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


var
   i: integer;
begin
  i := Form1.TableGrid1.SelectedRow; // запоминаем номер выбранной  строки
  Form1.TableGrid1.dbUpdate; // обновление грида
  Form1.TableGrid1.ScrollToRow(i); // скролим, чтобы было видно выбранную строку
  Form1.TableGrid1.SelectedRow := i; // восстанавливаем выделение выбранной строки

но постоянно обновлять грид конечно не лучшее решение, можно завести глобальную переменную, в которой будем хранить последний добавленный id записи, который можем узнать воспользовавшись функцией:
Last_Insert_id(TableName: string): integer


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

Hello,


Unfortunately I do not see your attach file.


Please, try this example:
http://myvisualdatabase.com/forum/misc. … download=1

8,943

(5 replies, posted in Russian)

Чучкин Евгений wrote:

на DateTimePicker повесил скрипт
procedure Main_DateTimePicker1_OnChange (Sender: string; ACol, ARow: Integer);
begin
Main.button2.click;
end;


у компонента DateTimePicker1 (у других также) есть свойство Increm. Search, где вы можете выбрать кнопку с действием Поиск либо SQL запрос, которая будет автоматически нажиматься при изменении содержимого компонента.
Т.о. можно обойтись без этой части скрипта (Main_DateTimePicker1_OnChange)

8,944

(5 replies, posted in Russian)

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


К сожалению в текущей версии это можно сделать только с помощью действия кнопки SQL запрос, но спасибо за идею, реализую в будущем режим компонента DateTimePicker позволяющий искать только по месяцу.


SQL запрос поиска только по месяцу для кнопки с действием "SQL запрос":

SELECT
lastname
,firstname
,strftime('%d.%m.%Y', dateofbirth)
,id

FROM employees

WHERE strftime('%m', dateofbirth) = strftime('%m', {DateTimePickerM})


К сообщению прикрепил проект, с данной реализацией поиска. Но перед этим скачайте бета версию программы 1.46, т.к. пришлось исправить одну ошибку для корректной работы данного проекта
https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0

8,945

(2 replies, posted in General)

Hello,


Unfortunately not yet solved this problem.

8,946

(5 replies, posted in Script)

Using script and SQL query, you can do it

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
     SQLExecute('INSERT INTO table1 (data1, data2) VALUES ("' + Form1.edData11.Text + '","' + Form1.edData21.Text + '")');
     SQLExecute('INSERT INTO table1 (data1, data2) VALUES ("' + Form1.edData12.Text + '","' + Form1.edData22.Text + '")');
     SQLExecute('INSERT INTO table1 (data1, data2) VALUES ("' + Form1.edData13.Text + '","' + Form1.edData23.Text + '")');
     Form1.TableGrid1.dbUpdate;
end;


Please, download example project.

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


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

8,948

(1 replies, posted in Script)

Yes, you should use event OnAfterClick, this event occurs after the action of button.
Example:

procedure Form1_Button1_OnAfterClick (Sender: string);
begin
     Form1.Edit1.Clear;                                             
end;

8,949

(6 replies, posted in General)

atanubehigh
Unfortunately this is not possible.
To work through the internet, I suggest you use Remote Desktop Connection.

8,950

(2 replies, posted in Script)

Hello,


I sent updated project to your e-mail.