Думаю будет лучше сделать скрытый компонент TextBox, в котором будет содержаться результат вычислений скрипта для поля sum_euro, чтобы это значение можно было записать в базу без использования SQL.


вычисление будет примерно таким
frmAddPay.edSumEuro.Text := FloatToStr( StrToFloat(frmAddPay.Edit1.Text ) / StrToFloat(valEUR) );


перед этим вычислением, не плохо бы проверить, являются ли все значения корректными числами, с помощью функции ValidFloat(cFlt: String): Boolean
а то пользователь может ввести и буквы туда.



p.s.

       idEUR := IntToStr(SQLExecute('SELECT count(id) FROM Currancy WHERE (cur_name = "EUR");'));// получение id EUR из таблицы Currancy
       valEUR := IntToStr(SQLExecute('SELECT sum FROM CurrancyEx WHERE (date = ''' + FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.DateTime) + ''') AND (id_Currancy = ' + idEUR +');'));  //получение курса EUR на заданную дату из таблицы CurrancyEx

здесь лучше убрать IntToStr, т.к. SQLExecute возвращает особый тип результата, Variant, который и так автоматически преобразуется в текст

Была ошибка в скрипте, вы убрали нужные begin и end в условии, когда курс не найден.

procedure frmAddPay_bPayOk_OnClick (Sender: string; var Cancel: boolean);
var
   val: string;
   valEUR: string;
   idEUR: string;
begin
       idEUR := IntToStr(SQLExecute('SELECT count(id) FROM Currancy WHERE (cur_name = "EUR");'));// получение id EUR из таблицы Currancy
       valEUR := IntToStr(SQLExecute('SELECT sum FROM CurrancyEx WHERE (date = ''' + FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.DateTime) + ''') AND (id_Currancy = ' + idEUR +');'));  //получение курса EUR на заданную дату из таблицы CurrancyEx

       // делаем SQL запрос, для проверки, есть ли такая валюта на такую дату в базе
        val:= IntToStr(SQLExecute('SELECT sum FROM CurrancyEx WHERE (date = ''' + FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.DateTime) + ''') AND (id_Currancy =' + IntToStr(frmAddPay.ComboBox1.dbItemID) + ');'));// получение курса валюты платежа на заданную дату из таблицы CurrancyEx
          if val <> '0' then    // если результат не равен нулю, значит такая валюта на такую дату в базе есть

           begin
               if frmAddPay.ComboBox1.Text='EUR'  then
                 begin
                   SQLExecute('INSERT INTO Payments (sum_euro) VALUES (''' +frmAddPay.Edit1.Text + ''');');

                 end;

              // if frmAddPay.ComboBox1.Text='BRB'  then
              // begin
              //   SQLExecute('INSERT INTO Payments (sum_euro)   VALUES ("frmAddPay.Edit1.Text");');

             //  end else SQLExecute('INSERT INTO Payments (sum_euro)   VALUES (''' +frmAddPay.Edit1.Text + ''');');

           end else
           begin
                    ShowMessage('В базе нет курса на данную дату.'); // ваше сообщение
                    Cancel := True; // отменяем действие кнопки
           end;
end;

9,103

(4 replies, posted in Russian)

Пример, по нажатию по кнопке

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
     Form1.Label1.Caption := SQLExecute('SELECT TOTAL(field) FROM tablename');
end;

9,104

(4 replies, posted in Russian)

Какая таблица имеется ввиду? компонент TableGrid или таблица базы данных?

При создании таблицы бд Payments, вы указали поле id_Company как обязательное для заполнения, но в SQL запросе не заполняете его, поэтому и ошибка.

1. Такую запись компонентов как {Edit1} можно использовать только в кнопках с действием SQL запрос либо Отчет, в скриптах, обращаться к компоненту, например чтобы получить его текст, нужно так: Form1.Edit1.Text


2. Можно воспользоваться функцией
FormatFloat('0.##', 25.5466);
в результате будет строка 25.55

Спасибо, поправлю.

1. Это можно сделать с помощью кнопки с действием SQL запрос, запрос будет примерно такой

SELECT * FROM tablename 
WHERE  (Date(finish_fact) >= Date({DateTimePicker1}) OR (finish_fact is null)

2.
для сохранения даты

procedure Form1_OnClose (Sender: string; Action: string);
var
   ini: TIniFile;
   s: string;
begin
     ini := TiniFile.Create(ExtractFilePath(Application.ExeName) +'file.ini');
     ini.WriteDate('SectionName', 'ValueName', Form1.DateTimePicker1.DateTime);
     ini.Free;
end;

для загрузки даты

procedure Form1_OnShow (Sender: string; Action: string);
var
   ini: TIniFile;
   s: string;
begin
     ini := TiniFile.Create(ExtractFilePath(Application.ExeName) +'file.ini');
     Form1.DateTimePicker1.DateTime := ini.ReadDate('SectionName', 'ValueName', now);
     ini.Free;
end;

Спасибо, знаю, к сожалению пока не разобрался почему.

1. Вы попытались обратиться к вычисляемому полю, его на самом деле не существует, я изменил запрос с учетом этого
2. Проверил, после изменения запроса не смог добиться этой ошибки.
3. Так же не заметил такого.


проект приложил к сообщение, проверьте пожалуйста.

9,111

(5 replies, posted in General)

Example:

procedure Form2_Edit1_OnChange (Sender: string);
var
   s1, s2: string;
begin
   s1 := Form2.Edit1.Text;
   s2 := Form2.Edit2.Text;
   if (ValidFloat(s1)) and (ValidFloat(s2)) then Form2.Edit3.Text := FloatToStr(StrToFloat(s1) + StrToFloat(s2));
end;

procedure Form2_Edit2_OnChange (Sender: string);
var
   s1, s2: string;
begin
   s1 := Form2.Edit1.Text;
   s2 := Form2.Edit2.Text;
   if (ValidFloat(s1)) and (ValidFloat(s2)) then Form2.Edit3.Text := FloatToStr(StrToFloat(s1) + StrToFloat(s2));
end;
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
     Form1.mniReport.Click;
end;

но перед использованием этого кода, скачайте пожалуйста бета версию 1.44
https://www.dropbox.com/s/2phoggh5kfu88 … 4.zip?dl=0

Извиняюсь, забыл ответить.


к сожалению в вашем проекте, структура базы данных пока не построена полностью и назначение таблицы с названием tblChecBox мне не ясна.  Если по минимуму, у вас должны быть следующие таблицы в БД: Техника, Тип, Фирма, Модель, и другие таблицы, которые будут связаны с компонентами ComboBox


Создавать записи в ComboBox без таблиц не получится, это противоречит нормам проектирования баз данных.


У компонента TextBox есть свойство Filter, у одного выберите значение >= а у второго <= таким образом вы сможете искать по диапазону.

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
     frmOptionsdbCore.ShowModal;
end;

9,115

(1 replies, posted in General)

This is possible only using the script and SQL queries.


I hope this topic will be helpful
http://myvisualdatabase.com/forum/viewtopic.php?id=459

9,116

(12 replies, posted in Script)

SQLExecute ('UPDATE tablename SET field1="data1", field2="data2"  WHERE id = ' + IntToStr(Form1.TableGrid.dbItemID));

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

тогда условие окрашивания ячейки будет таким

procedure Form1_TableGrid1_OnChange (Sender: string);
var
    i,c: integer;
begin
    c := Form1.TableGrid1.RowCount - 1;
    for i := 0 to c do
    begin
         if  Pos('T', Form1.TableGrid1.Cells[3,i])>0 then Form1.TableGrid1.Cell[3,i].Color := clRed;
    end;
end;

окрашивание текста до знака к сожалению не сделать.

Попробуйте так


procedure frmAddPay_bPayOk_OnClick (Sender: string; var Cancel: boolean);
var
   val: string;
begin
     // делаем SQL запрос, для проверки, есть ли такая валюта на такую дату в базе
     val := SQLExecute('SELECT count(id) FROM CurrancyEx WHERE (date = ''' + FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.Date) + ''') AND (curEx_name = ''' + frmAddPay.ComboBox1.Text + ''');');
     if val <> '0' then    // если результат не равен нулю, значит такая валюта на такую дату в базе есть
       begin
          MessageDlg('В базе есть такой курс на данную дату!', mtError, mbOk, 0); // сообщение если дата и курс есть в базе
       end else    MessageDlg('В базе нет курса на данную дату. Введите!', mtError, mbOk, 0); // сообщение если нет

end;

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


к сожалению такой встроенной возможности нет, могу только посоветовать написать скрипт, который все данные из компонента TableGrid перенесет в Memo.

Можно
Cell[x,y].TextColor - Определяет цвет текста в указанной ячейки


пример:

 Form1.TableGrid1.Cell[3,4].TextColor := clRed;

neitrino
пожалуйста, посмотрите данный видео урок
https://www.youtube.com/watch?v=cNnEXexH1dk


но этот видео урок был создан в старой версии, когда ComboBox действительно имел свойство TableName вместо ForeignKey, но сути это не меняет, без связей ComboBox работать не будет.

9,123

(2 replies, posted in General)

Hello,


1) Trim works in your project.
Trim: Remove spaces from the beginning and end.


2)
Fixed code:

procedure Form1_btn_trim_OnClick (Sender: string; var Cancel: boolean);
var
   invert, s : string;
   i : Integer;
begin
    invert := '';
    i := Length(Form1.txb_orig.text);
    Form1.txb_trim.text := Trim(Form1.txb_orig.text);   //Works            

    s := Form1.txb_orig.text;
    while(i > 0 ) do
    begin
      ShowMessage(ord(s[i]));
      if ( ((ord(s[i]) >= 65) AND (ord(s[i]) <= 90)) ) or // for CAPITAL chars
         ( ((ord(s[i]) >= 97) AND (ord(s[i]) <= 122)) )  then // for small chars
      begin
        invert := invert + s[i]; // Works        
      end;
      i := i - 1;
    end;

    Form1.txb_union.text :=  invert;
end;


In current version there is no TrimLeft and TrimRight functions.

9,124

(1 replies, posted in General)

Please, send me your project to support@drive-software.com with link on current topic
I'll try to help you.

9,125

(12 replies, posted in Script)

v_pozidis

for delete selected record from TableGrid:

SQLExecute ('DELETE FROM tablename WHERE id = ' + IntToStr(Form1.TableGrid1.dbItemId) );

for update TableGrid

Form1.TableGrid1.dbUpdate;

for execute program

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
   OpenFile('notepad.exe');
end;