5,526

(9 replies, posted in Russian)

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


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


В будующих версиях я сделаю поддержку целостности опциональной.

5,527

(16 replies, posted in General)

timlitw wrote:

Thanks that looks very nice.   If I understand the change, you made the table grid sort column0 by the date.

Yes.

5,528

(9 replies, posted in Russian)

Evgeniy D
Пожалуйста приложите какой либо простой проект, в котором данная ошибка также повторяется и опишите шаги, которые приводят к этому.

5,529

(15 replies, posted in Russian)

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

vaskar wrote:

Изначально я имел в виду с момента суток до момента искомых. Но раз такое сделать нельзя, то тогда удобнее было бы считать как
1 января до 30 января это 30 суток аренды.  Как такое сделать? Что нужно изменить?

Тогда так

WITH RECURSIVE dates(date) AS (
  VALUES({edbegdate})
  UNION ALL
  SELECT date("date", '+1 day')
  FROM dates
  WHERE "date" < date({edenddate})
)

SELECT

"date",
printf("%.2f",
TOTAL(
     (
     SELECT TOTAL(rent.rent / ((julianday(rent."end") - julianday(rent."begin")+1))) FROM rent WHERE "date" >= rent."begin" AND "date" < rent."end"
     AND (CASE WHEN {ComboBox1}=-1 THEN 1=1 ELSE rent.id_car={ComboBox1} END)
     )
     )
     )



FROM dates

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


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

  // Initial check whether there is a database administrator user
  // if not, create an administrator with username admin and password admin
     if SQLExecute('SELECT count(id) FROM users;') = '0' then
     begin
         SQLExecute('INSERT INTO users (login, password) VALUES ("admin", "admin");');
         frmLogin.edUser.Text := 'admin';
         frmLogin.edPassword.Text := 'admin';
     end;

5,532

(4 replies, posted in Russian)

Sid.Killsayd
В проекте можно изменить базу с SQLite на MySQL, но данные автоматически не будут перенесены, это необходимо будет сделать обычным способом, экспорт в CSV из SQLite, затем импорт из CSV в MySQL


При переходе на MySQL возможно придеться изменить некоторые SQL запросы написанные вами, т.к. синтаксис SQL запросов этих двух СУБД может быть различен в некоторых случаях.



dbLimit как либо помог?

5,533

(9 replies, posted in Russian)

Evgeniy D
Видимо для внешнего ключа у вас задействована поддержка целостности, что означает, удаление сотрудника при удалении его отдела.

vaskar
Что то я запутался, вы писали что вторая дата это До, значит последняя дата не должна быть оплачена.
т.е. с 1 января до 2 января это одни сутки аренды, а с 1 января до 30 января это 29 суток аренды.

5,535

(16 replies, posted in General)

timlitw
Please download latest beta version:
https://www.dropbox.com/s/ro1hs53q8rdv5 … a.zip?dl=0


then change this event:

procedure Form1_TableGrid1_OnChange (Sender: string);
var
   i,c: integer;
   s: string;
   dt: TDate;
begin
     c := Form1.TableGrid1.RowCount - 1;
     for i := 0 to c do
     begin
         s := Form1.TableGrid1.Cells[0,i];
         if s = '' then continue;

         dt := SQLDateTimeToDateTime(s);
         Form1.TableGrid1.Cells[0,i] := DateToStr(dt);
         s := Form1.TableGrid1.Cells[0,i];

         if ValidDate(s) then
         begin
             if (StrToDate(s) + 330) <= now then Form1.TableGrid1.Cell[0,i].Color := clRed;
             if (StrToDate(s) + 329) >= now then Form1.TableGrid1.Cell[0,i].Color := $0000CCFF;
             if (StrToDate(s) + 260) >= now then Form1.TableGrid1.Cell[0,i].Color := $0000CC00;
         end;
     end;

     Form1.TableGrid1.Columns[0].SortType := stDate;
     Form1.TableGrid1.Columns[0].Sorted := true;
end;

5,536

(5 replies, posted in General)

Done.

5,537

(13 replies, posted in General)

geochrist wrote:

Please email me at geochrist@gmail.com so that I can send you more info. My app has confidential data and I do not want to post it on the forum.

Please send to support@drive-software.com with link on this topic.

5,538

(15 replies, posted in Russian)

igor197617
К сожалению о лазарусе я только слышал, но не использовал.

5,539

(15 replies, posted in Russian)

igor197617
Пожалуйста, сформулируйте конкретные вопросы, на которые хотите получить ответы.


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

5,540

(4 replies, posted in Russian)

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


какой текущий размер файла базы данных?



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

begin
    Form1.TableGrid1.dbLimit := 100;
    Form1.TableGrid2.dbLimit := 100;
    Form1.TableGrid3.dbLimit := 100;
end.

если это не решит полностью проблему, тогда рекомендую создать индексы для тех полей, по которым вы производите поиск. Создать индексы для файла базы данных (sqlite.db) можно с помощью  бесплатной программы SQLlite Studio


В целом база данных SQLite хоть и поддерживает многопользовательскую работу, но не создавалась для таких целей, поэтому при ее большом размере могут возникнуть проблемы в скорости, для многопользовательской работы рекомендуется использовать клиент-серверную базу данных MySQL.

igor197617 wrote:

можно как то подробней про индексы. пример или ссылку на пример.

Подробней об индексах
https://ru.wikipedia.org/wiki/Индекс_(базы_данных)



Создать индексы для sqlite базы данных можно с помощью бесплатной утилиты SQLite Studio
Для каких именно полей создавать индексы, зависит от того, по каким полям вы будете искать информацию.

5,542

(1 replies, posted in FAQ)

Hello,


I made an example for you:

Попробуйте такой SQL запрос

WITH RECURSIVE dates(date) AS (
  VALUES({edbegdate})
  UNION ALL
  SELECT date("date", '+1 day')
  FROM dates
  WHERE "date" < date({edenddate})
)

SELECT

"date",
printf("%.2f",
TOTAL(
     (
     SELECT TOTAL(rent.rent / (julianday(rent."end") - julianday(rent."begin"))) FROM rent WHERE "date" > rent."begin" AND "date" < rent."end"
     AND (CASE WHEN {ComboBox1}=-1 THEN 1=1 ELSE rent.id_car={ComboBox1} END)
     )
     )
     )

FROM dates

также округляет до 2го знака.
К сожалению как сделать с учетом времени не смогу подсказать, SQL запрос работает с полями типа ДАТА, измените ваши поля с типа ДАТА/ВРЕМЯ на тип ДАТА

5,544

(11 replies, posted in General)

Роман wrote:

Доброго времени суток!
Спасибо  за пример!
ДМИТРИЙ ЭТО ПРИБЛИЖАЕТ НАС К ЭТИМ ВЕЩАМ????(рисунок прилагается)

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


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

Да, это вполне возможно, к сожалению примера каталога нету.

5,546

(13 replies, posted in General)

identity wrote:

hi
I have the same problem
is this script can be used for version 1.45?
I used this script and it said undeclared identifier "ChangeKeyboardLayout":(
what can I do?
thanks

Version 1.45 don't have this function.

5,547

(13 replies, posted in General)

geochrist wrote:

Unfortunately it does not work.
To change the keyboard I must press Alt+Shift simultaneously. How can I automate this?

Please attach your project, I will test it.

5,548

(16 replies, posted in General)

timlitw wrote:

Drivesoft, 2 things with the way your change works,

I wanted the form1 tablegrid to show the oldest inspections at the top - when filled with data the list will be longer than 1 screen.
and
I want a report that shows a list of vehicles who's inspections are 305 days or older.  And a list of vehicles who do not have an inspection.

I don't know how to work with the calculated date field to make either of these work.

I can help you only with specific questions.

5,549

(11 replies, posted in General)

identity wrote:

thanks for your reply
but I can't run your project. I'm using version 1.45
is your script available in this version?

vaskar wrote:

Еще подскажите  пожалуйста, как необходимо изменить запрос, чтобы давал результат только для определенного в комбобоксе CARа
Проект приложен

Тогда запрос будет таким

WITH RECURSIVE dates(date) AS (
  VALUES({edbegdate})
  UNION ALL
  SELECT date(date, '+1 day')
  FROM dates
  WHERE date < {edenddate}
)

SELECT
"date",
TOTAL(
     (
     SELECT TOTAL(rent.rent / (julianday(rent."end") - julianday(rent."begin"))) FROM rent WHERE "date" > rent."begin" AND "date" < rent."end"
     AND (CASE WHEN {ComboBox1}=-1 THEN 1=1 ELSE rent.id_car={ComboBox1} END)
     )
     ) as TotalResult

FROM dates

если в ComboBox не будет выбрана машина, тогда запрос посчитает сумму для всех машин.