Приложение для напоминаний - Триггер

Я новичок в lazarus, и мне было интересно, может ли кто-нибудь из вас дать решение проблемы, с которой я столкнулся.

Мое приложение оформлено в рамки. Есть рамка напоминаний, позволяющая создать напоминание. Это мой код в том кадре.

reminder_frame.pas:


   unit reminder_frame;

    {$mode objfpc}{$H+}

    interface

    uses
      Classes, SysUtils, sqlite3conn, sqldb, FileUtil, Forms, Controls, StdCtrls,
      Buttons, ExtCtrls, ExtDlgs, dialogs;

    type

      { TReminderFrame }

      TReminderFrame = class(TFrame)
        Button1: TButton;
        btnCalendar: TButton;
        Button2: TButton;
        createdb: TButton;
        CalendarDialog1: TCalendarDialog;
        DescriptionMemo: TMemo;
        Image2: TImage;
        NameEdit: TEdit;
        HoursEdit: TEdit;
        Label2: TLabel;
        MinsEdit: TEdit;
        editDate: TEdit;
        Image1: TImage;
        Label1: TLabel;
        SQLiteConnection: TSQLite3Connection;
        SQLQuery: TSQLQuery;
        SQLTransaction: TSQLTransaction;
        procedure Button1Click(Sender: TObject);
        procedure btnCalendarClick(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure createdbClick(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;

    implementation

    {$R *.lfm}

    { TReminderFrame }

    uses dashboard_unit;

    procedure TReminderFrame.Button1Click(Sender: TObject);
    begin
      if NameEdit.Text = '' then
      begin
        showmessage('Name required.');
      end else
      if editDate.Text = '' then
      begin
        showmessage('Date required.');
      end else
      if HoursEdit.Text = '' then
      begin
        showmessage('Hour required.');
      end else
      if MinsEdit.Text = '' then
      begin
        showmessage('Mins required.');
      end else
      if DescriptionMemo.Text = '' then
      begin
        showmessage('Description required.');
      end else
      begin
        SQLTransaction.StartTransaction;
        SQLQuery.SQL.Clear;
        SQLQuery.SQL.Add('select * from reminders where reminder_name = "'+ NameEdit.Text +'"');
        SQLQuery.Open;
        SQLQuery.Edit;
        SQLQuery['reminder_name']:=NameEdit.Text;
        SQLQuery['reminder_date']:=StrToDateTime(editDate.Text+' '+HoursEdit.Text+':'+MinsEdit.Text+':00');
        SQLQuery['reminder_description']:=DescriptionMemo.Text;
        SQLQuery.Post;
        SQLQuery.ApplyUpdates;
        SQLQuery.Close;
        SQLTransaction.Commit;
        SQLTransaction.EndTransaction;
        Form1.showreminders;
        Self.Hide;
        Self.Free;
      end;
    end;

    procedure TReminderFrame.btnCalendarClick(Sender: TObject);
    begin
      if CalendarDialog1.Execute then
      begin
        editDate.Text:=DateTimeToStr(CalendarDialog1.Date);
      end;
    end;

    procedure TReminderFrame.Button2Click(Sender: TObject);
    begin
      Self.Hide;
      Self.Free;
    end;

    procedure TReminderFrame.createdbClick(Sender: TObject);
    var
      newFile : Boolean;
    begin
      SQLiteConnection.Close; // Ensure the connection is closed when we start

      try
        // Since we're making this database for the first time,
        // check whether the file already exists
        newFile := not FileExists(SQLiteConnection.DatabaseName);

        if newFile then
        begin
          // Create the database and the tables
          try
            SQLiteConnection.Open;
            SQLTransaction.Active := true;

            // Here we're setting up a table named "DATA" in the new database
            SQLiteConnection.ExecuteDirect('CREATE TABLE "reminders"('+
                        ' "id" Integer NOT NULL PRIMARY KEY AUTOINCREMENT,'+
                        ' "reminder_name" Char(128) NOT NULL,'+
                        ' "reminder_description" Char(128) NOT NULL,'+
                        ' "reminder_date" DateTime NOT NULL);');

            // Creating an index based upon id in the DATA Table
            // SQLiteConnection.ExecuteDirect('CREATE UNIQUE INDEX "Data_id_idx" ON "DATA"( "id" );');

            SQLTransaction.Commit;

            ShowMessage('Succesfully created database.');
          except
            ShowMessage('Unable to Create new Database');
          end;
        end;
      except
        ShowMessage('Unable to check if database file exists');
      end;
     end;

    end.

У меня есть база данных (SQLite3) со следующими ДАННЫМИ:

    SQLiteConnection.ExecuteDirect('CREATE TABLE "reminders"('+
                ' "id" Integer NOT NULL PRIMARY KEY AUTOINCREMENT,'+
                ' "reminder_name" Char(128) NOT NULL,'+
                ' "reminder_description" Char(128) NOT NULL,'+
                ' "reminder_date" DateTime NOT NULL);'); 

И у меня есть TStringGrid в моей основной форме, в которой перечислены все мои напоминания. Я надеюсь в ближайшее время включить кнопку удаления, но пока мне просто нужно удалить свою базу данных: /

Итак, к актуальной проблеме: как я могу уведомить пользователя (меня), когда напоминание «Reminder_date» - это настоящая дата и время (сейчас).

Мне просто нужна следующая информация о шоу-сообщении:

showmessage ('У вас есть напоминание!' + [название должного напоминания] + 'необходимо.' + [описание должного напоминания])

Спасибо вам всем!

Хотите какую-нибудь информацию? Не стесняться спрашивать!

Харрисон

добавить таймер и проверять каждый ххх раз.

Marco van de Voort 30.10.2018 15:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
60
1

Ответы 1

То, как значение даты и времени хранится в бэкэнд-базе данных, зависит от рассматриваемой RDMS и типа столбца, как он определен.

В коде Lazarus (и Delphi) TDateTime обрабатывается как число с десятичной точкой: часть перед десятичной точкой - это «номер дня» (количество дней, прошедших с 30 декабря 1899 г.), а часть после точка («мантисса» или «дробная часть») - время суток.

Один из способов решения вашей проблемы - периодически выполнять SQL-запрос в форме

Select * from reminders where (reminder_date >= :date) and reminder_date < :date + 1)

где: date - параметр, который вы установили как now, предполагая, что вы хотите получить результаты за остаток дня с текущего времени. Если ваши напоминания имеют разрешение, скажем, 15 минут, то в результатах запроса вам необходимо сделать предупреждение для каждой строки в результатах запроса, где

SqlQuery.FieldByName('reminder_date').AsDateTime - Now <= 1 / (24 * 4)

4, потому что в часе 4 пятнадцатиминутных периода.

Похоже, вас не интересует этот ответ. Удалить его?

MartynA 20.11.2018 17:01

Другие вопросы по теме