9,076

(1 replies, posted in Russian)

Спасибо, постараюсь попробовать на днях )

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

procedure Form1_Button9_OnClick (Sender: string; var Cancel: boolean);
var
   f: string;
begin
     f := SQLExecute('SELECT file_project_filename FROM Tasks WHERE id = ' + IntToStr(Form1.TabGr_TaskList.dbItemID) );
     OpenFile(f);
end;

9,078

(1 replies, posted in Russian)

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


нет никакой связи между тем, что находится в Grid и что попадет в отчет.
Возможно вы неверно создали шаблон отчета, поэтому видите только одну запись.


Отправьте пожалуйста ваш проект на support@drive-software.com с описанием проблемы, постараюсь помочь.

так можно подставить идентификатор выделенной записи из компонента TableGrid

s := SQLExecute ( 'SELECT  SUM(quanty*parts.price) as total FROM partsapp WHERE id_application=' + IntToStr(Form1.TableGrid.dbItemID));

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

s := SQLExecute ( 'SELECT  SUM(quanty*parts.price) as total FROM partsapp WHERE id_application=' + IntToStr(Form2.Button1.dbGeneralTableId ));

но в этом случае, нужно понимать, что этот идентификатор записи известен только при редактировании записи, при создании новой записи, идентификатор будет равен -1, т.к. запись еще не сохранена и свой идентификатор не получила.

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

Поправил проект, ошибка была в скриптах, а именно в процедуре
procedure NewTask_TabGrSubTasks_OnChange (Sender: string);


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

      sDate := SQLExecute('SELECT min(start_pf) FROM SubTasks WHERE SubTasks.id_Tasks = "' + IntToStr(idTask)  + '";');
      if sDate <> '' then NewTask.DateTimePicker3.DateTime :=  SQLDateTimeToDateTime(sDate);


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

savage
к сожалению нет, чтобы раскрасить всю строку, придется раскрасить все ячейки этой строки.

9,083

(237 replies, posted in Russian)

Пока не знаю, надо подумать )

9,084

(237 replies, posted in Russian)

savage
Но ведь маркер курсора может находится и в теле уже другой процедуры.

9,085

(7 replies, posted in Russian)

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


Что нового?


- Добавлена возможность множественного выбора компонентов в дизайнере форм (удерживая Shift) (28.09.2014)
а также их копирование и удаление.


- Добавлена функция для скрипта, позволяющая заменять произвольные символы в строке (28.09.2014)
ReplaceStr(const AText, AFromText, AToText: string): string


- Добавлена функция для скрипта (в отчетах), позволяющая преобразовать денежную сумму прописью (29.09.2014)
Проект с примером реализации: http://myvisualdatabase.com/forum/misc. … download=1


- Добавлена функция для скрипта SplitString (04.10.2014)
SplitString(const S, Delimiters: string): array of string


- Для компонента DBFile добавлено свойство CopyTo (04.10.2014)
Если у компонента в свойстве Type выбрано LinkFile, то свойство CopyTo позволяет указать, куда необходимо автоматически скопировать файл относительно пути расположения файла базы данных
Возможные значения свойство CopyTo:
\ - файл будет автоматически скопирован в папку с файлом базы данных

files - в папке расположения файла базы данных, будет создана папка files, куда файлы будут автоматически скопированы, допускается указать цепочку папок, например files\docs, данные папки будут созданы автоматически


- Добавлены новые функции для скрипта (08.10.2014)
function CopyFile(ExistingFileName, NewFileName: string;
function DeleteFile(const FileName: string): Boolean
function RenameFile(const OldName, NewName: string): Boolean
function ExtractFilePath(const FileName: string): string
function ExtractFileDir(const FileName: string): string
function ExtractFileDrive(const FileName: string): string
function ExtractFileName(const FileName: string): string
function ExtractFileExt(const FileName: string): string
function ToWords(value: real; currencyName: string = ''usd''): string
function ToWordsRu(value: real; currencyName: string = ''rub''): string



- Добавлены новые методы для ComboBox (09.10.2014)
dbAddRecord(id: integer; s: string);
dbEditRecord(id: integer; s: string);
dbDeleteRecord(id: integer);

Моя ошибка, то что SQL запрос ругается  Под Button2, исправил, скачайте пожалуйста бета версию 1.45
https://www.dropbox.com/s/88lx13h9cw5ro … 5.zip?dl=0


вводите числа с разделителем - запятой, т.к. именно она задана у вас в региональных настройках.
и не забудьте для компонента Edit3 указать свойства TableName и FieldName, чтобы система знала, что данный компонент должен содержать число с плавающей запятой.



Также добавил новую функция в скрипт, позволяющая заменить в строке один символ, на другой
ReplaceStr(const AText, AFromText, AToText: string): string


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

if not ValidFloat(sFloat) then sFloat := ReplaceStr(ReplaceStr, '.', ','); // если строка не может быть приведена к FLOAT, меняет точку на запятую
if not ValidFloat(sFloat) then sFloat := ReplaceStr(ReplaceStr, ',', '.'); // если строка не может быть приведена к FLOAT, меняет запятую на точку

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


Странно, судя по описанию не должно быть ошибки.
Какая именно функция подразумевается под "А функции преобразований для FLOAT" ?


ошибка возникает при использовании скриптов или SQL запроса?
можете отправить мне свой проект на support@drive-software.com
постараюсь помочь.

9,088

(1 replies, posted in Script)

Hi,


You can't refresh form, but you can refresh TableGrid on the Form by automatically pressing button for Search or using method: Form1.TableGrid.dbUpdate;



Here you can download example project

9,089

(1 replies, posted in General)

I'm afraid not exactly understand the question.


You can change number of field in settings button with action "Search", or you can create second button for Search, fist button will be with fours fields, second button will be with five fields.

9,090

(6 replies, posted in Russian)

думаю так:
id_TpodstSostojnTV = 2

Используйте событие OnAfterClick от кнопки сохранения, в основную таблицу S сохраняйте информацию с помощью кнопки с действием Сохранить запись, а в таблицу D с помощью данного скрипта

procedure Form1_Button1_OnAfterClick (Sender: string);
begin
   SQLExecute( 'INSERT INTO D (X, Y, Z) VALUES ("' + Form2.Edit1.Text + '","' + Form2.Edit2.Text + '","' + Form2.Edit3.Text +'")' );
end;

9,092

(6 replies, posted in Russian)

Отвечает Александр Друзь.


шутка )


в поле Фильтр вам необходимо указать условие, примерно такого вида:
id_status = 2


к сожалению не знаю как точно называется внешний ключ в таблице бд, который ссылается на таблицу статусов.

9,093

(1 replies, posted in Russian)

1. Вам необходимо создать 4 поля в таблице базы данных с типом ДА/НЕТ


2. На форме создания/редактирования записи, расположить 4 компонента CheckBox и присвоить каждому из них свое поле из таблицы базы данных (с помощью свойств TableName и FieldName)


3. На форме для поиска, в настройках кнопки с действием Поиск, добавить эти 4 поля, которые будут видны в результате поиска.

Добавил в проект Клиент-Мастер контроль остатков при списании.


Контроль осуществляется на форме frmPartApp, при событии OnClick на кнопке OK


Код:

procedure frmPartApp_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     // если не выбрали запчасть
     if frmPartApp.GridPart.dbItemID = -1 then
     begin
          Cancel := True;
          ShowMessage('Выберите запчасть.');
          Exit;
     end;

     // делаем SQL запрос, чтобы узнать количество выбранной детали в GridPart на складе
     s := SQLExecute ('SELECT (SUM(quanity*(id_operation=1)) - SUM(quanity*(id_operation=2))) - '+
     'ifnull((SELECT SUM(partsapp.quanty) as result FROM partsapp WHERE partsapp.id_parts = '+ IntToStr(frmPartApp.GridPart.dbItemID) +'),0) '+
     'FROM sklad '+
     'WHERE sklad.id_parts = ' + IntToStr(frmPartApp.GridPart.dbItemID));

     // проверяем, не привышаем ли расход
     if StrToInt(frmPartApp.edQunity.Text) > StrToInt(s) then
     begin
          Cancel := True;
          ShowMessage('Вы пытаетесь исрасходовать ' + frmPartApp.edQunity.Text + ' запчастей при наличии только ' + s + ' запчастей.');
     end;
end;

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

9,095

(2 replies, posted in Russian)

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


В вашем случае UNION не нужен, и не верно была связана таблица Prefix (LEFT OUTER JOIN)
Исправленный SQL запрос:

SELECT
Podrazdelenie.id as 'id',
Prefix.PrefixOP,
Podrazdelenie.Gorod,
Podrazdelenie.Obl,
Podrazdelenie.TelMob,
Podrazdelenie.FIOBK

FROM Podrazdelenie
LEFT OUTER JOIN Prefix ON Prefix.id =Podrazdelenie.id_Prefix

WHERE

(TelMob LIKE '%{EdFIOBK}%') OR
(FIOBK LIKE '%{EdFIOBK}%')  OR
(prefop LIKE '%{EdFIOBK}%') OR
(Obl LIKE '%{EdFIOBK}%') OR
(case when '{EdFIOBK}'='' then 1=1 else PrefixOP LIKE '%{EdFIOBK}%' end);

можно  так

Form1.Label1.Caption := FormatFloat('0.00', 0.654354);

9,097

(2 replies, posted in General)

Example, event of button with action SAVE RECORD

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

Проверил, у меня этот код работает для всех валют, если есть курс на указанную дату.
Может быть вы забыли компонент frmAddPay.edSumEuro внести в список сохраняемых в настройках кнопки Сохранить?

9,099

(1 replies, posted in General)

You can set focus for control, example: 
Form1.Edit1.SetFocus;


Also you can change backgroung color of TextBox:
Form1.Edit1.Color := clRed;


but don't forget after that return default color, for example in the event of the form OnClose
Form1.Edit1.Color := clWindow;

9,100

(4 replies, posted in Russian)

можно так

Form1.ComboBox1.dbItemID := SQLExecute('SELECT id FROM Таблица WHERE fieldname LIKE "' + Form1.Edit1.Text  + '");

а с какой целью это необходимо?