8,951

(7 replies, posted in Script)

for combination of keys you should use event OnKeyDown

procedure Form1_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
     if (Chr(Key) = 'A') and (Ctrl) then ShowMessage('You press ctrl+a');
end;

Hello,


Please, fix it:

Form1.TableGrid1Piesa.dbFilter := 'piesa.idcazan = "c"'; 

to

Form1.TableGrid1Piesa.dbFilter := 'piesa.idcazan = "' + c+ '"'; 

8,953

(5 replies, posted in Script)

I just renamed table Kat1 to Kat,
if at the end of the table name is the figure this causes an error.

8,954

(5 replies, posted in Script)

You found bug in My Visual Database, for fix them, i renamed table "Kat1" to "Kat"


I can't answer to e-mail, got error
The error that the other server returned was:
554 delivery error: dd This user doesn't have a yahoo.com account


Please, download fixed project.

8,955

(5 replies, posted in Script)

v_pozidis
Please, send me your project to support@drive-software.com
I'll try to help you.

8,956

(6 replies, posted in Russian)

Да, отвечал через емейл, копия ответа:

Должно быть так
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
Users.TableGrid1.dbUpdate;
Users.TableGrid2.dbUpdate;
Users.ShowModal;
end;


Важно понимать, разницу между Show и ShowModal
при   использовании  ShowModal,  выполнение скрипта  в  этом  месте
останавливается,  пока  окно  не закроется, после чего будут выполнены
команды идущие после ShowModal


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

8,957

(1 replies, posted in Script)

In current version you can't using script for create report. You should use button with action "Report" or "Report (SQL)"
Then you can use Wizard (File > New > Standart Report Wizard) for create appearance of report.

savage wrote:

У меня при удалении в таблице 1 происходит проверка и если проверка удалась, удаляется запись в таблице 2. Если вешать все на onclick, то не получится так, что я после отмены удаления в таблице 1 получу, все равно, удаленную запись в  таблице 2?

у кнопки "Удалить запись" можно отключить подтверждение удаления, и организовать это подтверждение через скрипт с функцией MessageDlg



savage wrote:

DriveSoft, почему возможность получения id предусмотрена только при использовании кнопки "Сохранить"? Имхо, она (такая возможность) как раз и пригодилась бы...

Хорошая идея, спасибо, реализовал, но само собой доступ к этому id можно получить только в событии OnAfterClick

procedure Form1_Button1_OnAfterClick (Sender: string);
begin
     ShowMessage(IntToStr(Form1.Button1.dbGeneralTableId));
end;

для этой возможности, скачайте бета версию 1.46
https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0

8,959

(1 replies, posted in Script)

Yes, you can.

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
     Form1.Label1.Caption := IntToStr( Form1.TableGrid1.RowCount );
end;

Let me know, if you need example project.

Не совсем понял в чем проблема.
OnClick - получаем id записи, которая будет удалена
OnAfterClick - работает с этим id после удаления (почему такая связка нежелательна?)


либо можно все сделать в OnClick, удалить запись с помощью SQL и далее использовать id удаленной записи.

Скачайте снова бета версию 1.45
https://www.dropbox.com/s/88lx13h9cw5ro … 5.zip?dl=0


Добавил метод OpenCalendar для компонента DateTimePicker

procedure Form1_DateTimePicker12_OnCloseUp (Sender: string);
begin
     if  Form1.DateTimePicker12.DateTime < Form1.DateTimePicker11.DateTime then
      begin
        ShowMessage('Дата финиша не может быть меньше даты старта!');
        Form1.DateTimePicker12.Checked := False;
        Form1.DateTimePicker12.OpenCalendar;
      end;
end;

работу с мышкой к сожалению пока не реализовал.

savage
а что значит под вкладку? )

8,963

(4 replies, posted in Script)

Sorry )

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     s := SQLExecute ('SELECT MAX(einnahme) FROM Ennahmeausgabe');
     Main.biggerineu.Caption:= s +' €';
end;

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

UPDATE task SET isBlock = 1 WHERE (DateStart IS NOT NULL) and (DateFinish IS NOT NULL) 

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


5. В событии OnShow формы для редактирования, проверяем состояние CheckBox, если он True, то просто блокируем кнопку для Сохранения записи на этой форме
например так:

procedure Form2_OnShow (Sender: string; Action: string);
begin
     Form2.ButtonSave.Enabled := not Form2.CheckBox1.Checked;                                                                                                                                                                 
end;

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

8,966

(1 replies, posted in Script)

Form1.Hide;

8,967

(1 replies, posted in Script)

usually you do not need to use "Auto execution" and Search button together.


you can clear values from filter control then update TableGrid


Form1.Edit1.Clear;
Form1.Edit2.Clear;
Form1.TableGrid1.dbUpdate;

8,968

(4 replies, posted in Script)

try this:

Main.biggerineu.Caption := SQLExecute ('SELECT MAX(einnahme) FROM Ennahmeausgabe')+' €';

8,969

(1 replies, posted in General)

Hello,


sonixax wrote:

Hi,
I think this is Good Idea that users can put some data's to GridView and after click on save button data's wrote to database!

This function is planned.


sonixax wrote:

I've seen your Invoice template and I found users can wrote Items to database without assigning them to an Invoice!!!
This is Make database fulled up by unusable data's!

You can make some fields is required.
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&amp;item=233&amp;download=0



sonixax wrote:

Also I don't know how can I validate input values before wrote them down to database! For example I need to put an Item to database with a SKU number, so I want to search database for that SKU number and if it exist automatically put it to GridView and if not show an error message smile

Thanks a lot



Example, how to validate values before save

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
 begin
    if Form1.Edit1.Text='' then
    begin
       ShowMessage('Empty value.');
       Cancel := True;
    end;
 end;

8,970

(7 replies, posted in Script)

Script:

procedure Form1_OnKeyDown (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
     if key = 13 then Form1.SetFocusNextControl; // go to next field when press enter key on keyboard
end;

procedure Form1_OnKeyPress (Sender: string; var Key: Char);
begin
     if (Key = 's') or (Key='S') then Form2.ShowModal; // show Form2 when pressing a key "s" on keyboard!

end;

begin
     Form1.KeyPreview := True; // If KeyPreview is true, keyboard events occur on the form before they occur on the active control.
end.

Also you can download example project.

maybe you have an error in the database structure.


Why fields  'bookename' and  'bookissuedate'  in two different tables?
There is a relationship between the tables 'bookename' and  'bookissuedate' ?

savage wrote:

1. Это необходимо проверять, в примере ниже проверяется DateTimePicker3

Это я понял, но я имел вв иду сделать эту функцию штатной (проверкой по умолчанию), т.к. пользователем предполагается, что если не заполнено, то пусто

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

8,973

(4 replies, posted in Script)

Sorry, may be I do not understand your question )


Sender is name of component who sent the event.

procedure Form1_Button_OnClick (Sender: string; var Cancel: boolean);
begin
     if Sender = 'Button1'  then ShowMessage('Event from Button1');
     if Sender = 'Button2'  then ShowMessage('Event from Button2');
end;

savage


1. Это необходимо проверять, в примере ниже проверяется DateTimePicker3

var
  sDate1: string;
begin
if AddSubTask.DateTimePicker3.Checked then  sDate1 := '"' +FormatDateTime('yyyy-MM-DD',AddSubTask.DateTimePicker3.Date) + '"'
else sDate1 := 'NULL';

SQLExecute('INSERT INTO Tasks (Task_name, id_TaskType, id_users, start_PF, finishPL, finishFc, active_task, comments) VALUES ("'+AddSubTask.Edit1.Text+'", 2 , ' + IntToStr(AddSubTask.ComboBoxEmpl.dbItemID)+', '+ sDate1 +', "'+ FormatDateTime('yyyy-MM-DD',AddSubTask.DateTimePicker1.Date)+'", "'+ FormatDateTime('yyyy-MM-DD',AddSubTask.DateTimePicker2.Date)+'",' + IntToStr(AddSubTask.CheckBox1.State)+',"'+AddSubTask.Memo1.Text+'" );');

2. Эта форма при сохранении вызывает SQL скрипт INSERT INTO?
если да, то необходимо в случае редактирования записи, использовать UPDATE


Form1.dbAction - позволяет узнать, для чего была открыта форма (для создания новой записи или редактирования)
Может иметь следующие значения:
'NewRecord' - при вызове окна с помощью кнопки с действием Новая запись.
'ShowRecord' - при вызове окна с помощью кнопки с действием Показать запись
'ShowForm' - при вызове окна с помощью кнопки с действием Показать форму
'' - пустая строка, если окно было вызвано с помощью скрипта.

пример:

 procedure Form1_bSave_OnClick (Sender: string; var Cancel: boolean);
 begin
    if Form1.dbAction = 'NewRecord' then ShowMessage('Форма была вызвана для создания новой записи');
 end;

помимо этого, вам необходимо знать идентификатор текущей записи, его можно получить у кнопки сохранения записи
Form1.Button1.dbGeneralTableId

дату в SQL запросе также необходимо обрамлять кавычками

SQLExecute('INSERT INTO Tasks (Task_name, id_TaskType, id_users, start_PF, finishPL, finishFc, active_task, comments) VALUES ("'+AddSubTask.Edit1.Text+'", 2 , ' + IntToStr(AddSubTask.ComboBoxEmpl.dbItemID)+', "'+ FormatDateTime('yyyy-MM-DD',AddSubTask.DateTimePicker3.Date)+'", "'+ FormatDateTime('yyyy-MM-DD',AddSubTask.DateTimePicker1.Date)+'", "'+ FormatDateTime('yyyy-MM-DD',AddSubTask.DateTimePicker2.Date)+'",' + IntToStr(AddSubTask.CheckBox1.State)+',"'+AddSubTask.Memo1.Text+'" );');

OnAfterClick
Срабатывает при нажатии кнопки, но после выполнения действия, которое было назначено для кнопки, такие как: Новая запись, Сохранить запись и т.д.
Если у кнопки нет действия (свойство Action не задано), то данное событие не вызывается.