Delphi. Делаем простой DBPaginator на примере MySQL

50

Понадобилось ручное листание страниц (определенного заранее числа записей на странице). Пользуюсь FireDAC, знаю, что там это уже реализовано, но после нескольких попыток понял, что хочу сделать такую штуку сам, поскольку явно пригодится в других языках и технологиях. Итак, вот что у меня получилось.

47

48

Проект выглядит примерно так…

46

Исходники

385_FireDacRowsFetching

Описание кода

Как видно здесь 2 FDQuery ,один из них основной, другой просто считает число записей в таблице. SQL запрос основного FDQuery должен быть без точки с запятой на конце, так как мы должны добавить инструкцию LIMIT StartRow, CountOfRows к основному запросу. Я здесь не делал акцент на подключении, а просто забил параметры подключения в FDConnection и подключил Queries к FDConnection визуально, хотя по хорошему, надо подключать их в коде. Но хотелось сосредоточиться на другом, именно на паджинаторе. Итак, основная работа у нас происходит в uDBPagination.

Требования к запросу SQL

В принципе он может быть любым SELECTом, главное, чтобы в его конец можно было добавить инструкцию LIMIT StartRow, CountOfRows 

В моем случае это был

Функционал 

-загрузить первую страницу

-загрузить следующую страницу

-загрузить предыдущую страницу

Далее описание юнитов Continue reading

Delphi. MySQL. Реализуем поиск вхождений, регистрозависимый поиск, поиск точной фразы.

7

Сделать это довольно просто, опираясь на запросы SQL, которые я рассмотрел в предыдущем посте. Вот что у нас получится

2

А если поиск ничего не обнаружил, получим следующее

3

Итак, оформим такую панель поиска

1

Всего будет 3 типа поиска

-Поиск вхождений

-Точное соответствие

-Регистронезависимый поиск

Будем собирать ID записей, при нажатии на “Найти” будем ставить курсор на первую запись в найденной выборке, либо сообщать, что ничего не найдено.

При нажатии на стрелки вправо или влево будем перемещать курсор на соответствующие записи в общей выборке.

Перво-наперво создадим запросы, по аналогии с тем, как это мы делали в прошлом посте

Поиск вхождений

Continue reading

MySQL. Регистрозависимость поиска и поиск вхождений

Пусть у нас есть 2 строки в базе mysql

106

Регистро зависимый поиск

107

Регистро Независимый поиск

108

Поиск вхождений (регистро независимый)

110

Delphi. Рекурсивное отражение файловой директории в базе данных

103

Данный алгоритм использует рекурсивный обход директорий при помощи System.IOUtils для того, чтобы отразить файловую структуру в базе данных. Понадобилась мне такая штука, решил вывести это в отдельный пост. Вот что у нас получится.

102

А вот как мы это сделали

uses

Собственно основная рекурсивная функция, добавляющая файлы и папки в базу Continue reading

Delphi. Отражение папок файловой директории в базе данных

101

Допустим нам нужно записать файловую директорию \public\files\UserID\2016\28\10\temp в базу данных. Данный алгоритм запишет только папки директории, и не более. Чтобы полностью отразить директорию, нужен обход с рекурсивным алгоритмом, который я представлю чуть позже, в другом посте.

99

Я сделал это так. Для начала оптимизированный вариант

Прикол был с users_id, суть в том, что это поле содержит в себе внешний ключ к таблице пользователей, и если указать при вставке значение, которого нет, то выпадает ошибка. Поэтому тут внимательнее.  Continue reading

Delphi. UniGUI. Делаем авторизацию через СМС. Часть 2 – база данных и логика программы

5

Результат у меня получился таким

33

34

После отправки кода, в случае корректного результата происходит переход на нужную страницу и уходит сообщение админу, либо открывается форма. Continue reading

Delphi. MySQL. Пример добавления даты и времени в базу данных

Как вариант можно хранить TDateTime в качестве строки. Допустим у нас в базе есть поле CreationDateTime varchar(45);

Обратно можно преобразовать с помощью StrTODateTime;

В чем разница между identifying and non-identifying relationships?

Теперь, собственно попробуем наладить взаимосвязи! Но прежде, разберемся с пунктирными и непунктирными линиями во взаимосвязях

18

 

Классные объяснения на английском находятся здесь. Больше всего мне понравилось вот это объяснение

A book belongs to an owner, and an owner can own multiple books. But the book can exist also without the owner and it can change the owner. The relationship between a book and an owner is a non-identifying relationship.

A book however is written by an author, and the author could have written multiple books. But the book needs to be written by an author it cannot exist without an author. Therefore the relationship between the book and the author is an identifying relationship.

Если книга может существовать без владельца, а она может, тогда  non-identifying relationship

Если книга не может существовать без автора,а она не может, тогда  identifying relationship

Технически это отражается следующим образом

identifying relationship:

non-identifying relationship:

То есть, в случае identifying в ключ ребенка встроен ключ родителя. А в случае non-identifying, в ключе ребенка нет ключа родителя.

MySQL. InnoSetup. “Тихая установка”. Добавляем Uninstall MySQL сервера при деинсталляции основной программы

Чтобы добавить возможность деинсталляции MySQL сервера при деинсталляции основной программы, нужно в код InnoSetup добавить следующую инструкцию

Код целиком, будет выглядеть следующим образом, он включает в себя инсталляцию основной программы, инсталляцию сервера базы данных и его конфигурирование, и его деинсталляцию при деинсталляции основной программы. Continue reading

MySQL. InnoSetup. “Тихая установка”. Загрузка своей базы данных при инсталляции

Продолжаю прошлую тему – устанавливать “тихо” MySQL сервер мы научились. Что дальше?

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

Пусть у нас есть дамп базы под названием test_dump.sql – о том как его сделать я писал в другой статье, но если кратко и здесь, то

1 способ, через командную строку под администратором Windows

2 способ

-через WorkBench >DataExport > Export To Self Contained File

9

 

Итак, дамп у нас есть, остается придумать как его использовать в InnoSetup,

1-е изменение, которое я внес, это в сектор [Files]

2-е изменение, которое я внёс, это в сектор Run, нам нужно каким-то образом дать серверу mysql команду на создание пустой базы данных и импортирование в неё данных, это можно сделать следующим образом…

Полный код тихой инсталляции MySQL для InnoSetup

Continue reading