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;
My Visual Database → Posts by DriveSoft
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+ '"';
I just renamed table Kat1 to Kat,
if at the end of the table name is the figure this causes an error.
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.
v_pozidis
Please, send me your project to support@drive-software.com
I'll try to help you.
Да, отвечал через емейл, копия ответа:
Должно быть так
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
Users.TableGrid1.dbUpdate;
Users.TableGrid2.dbUpdate;
Users.ShowModal;
end;Важно понимать, разницу между Show и ShowModal
при использовании ShowModal, выполнение скрипта в этом месте
останавливается, пока окно не закроется, после чего будут выполнены
команды идущие после ShowModalвместо данного кода, можете использовать дейстие кнопки Показать
форму, тогда гриды будут обновлены автоматически.
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.
У меня при удалении в таблице 1 происходит проверка и если проверка удалась, удаляется запись в таблице 2. Если вешать все на onclick, то не получится так, что я после отмены удаления в таблице 1 получу, все равно, удаленную запись в таблице 2?
у кнопки "Удалить запись" можно отключить подтверждение удаления, и организовать это подтверждение через скрипт с функцией MessageDlg
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
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
а что значит под вкладку? )
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;
Честно говоря я уже запутался,
мне слишком много придется разбираться в проекте чтобы ответить на все вопросы )
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;
try this:
Main.biggerineu.Caption := SQLExecute ('SELECT MAX(einnahme) FROM Ennahmeausgabe')+' €';
Hello,
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.
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.
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
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;
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' ?
1. Это необходимо проверять, в примере ниже проверяется DateTimePicker3
Это я понял, но я имел вв иду сделать эту функцию штатной (проверкой по умолчанию), т.к. пользователем предполагается, что если не заполнено, то пусто
это предполагается в случае сохранения записи без использования скриптов, в случае скриптов, все чуть сложней )
но согласен, нужно будет сделать для компонента DateTimePicker метод, возвращающий значение для SQL запроса, где уже будет встроена проверка.
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 не задано), то данное событие не вызывается.
My Visual Database → Posts by DriveSoft
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi