MySQL — делаем swap 2 значений одной колонки

Понадобилось для задачи «Поднять, опустить» в списке клиента через базу.

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

Вот таблица, для которой это сделано

главное здесь, это sortIndex

Все значения отсортированы по  sortIndex. Простое и элегантное решение через хранимые процедуры в MySQL

Вариант № 1 Универсальный, записи могут находиться где угодно в этой таблице

Вариант №2 Записи должны находиться рядом друг с другом

swapDown

swapUP

Дергаем примерно так…

Пример реализации для Delphi клиента

 

 

Delphi. Ручное управление транзакциями

Работаю с MySQL InnoDB, там транзакции, коммиты и откаты идут автоматом, но товарищ мой сказал «хочу сам управлять этим». И вот что получилось, море кода, но да, управление есть…

На примере вставки записи в новую таблицу

А как Вы обрабатываете транзакции?

Delphi. VCL и не только. Делаем фильтр. Почти быстро и просто

Выглядеть он будет у нас вот так…

Можно добавлять бесконечное число параметров для фильтрования. Это начальная версия, я расскажу идею, там ещё много всего надо доработать, но как идея вполне рабочая.  Читать далее «Delphi. VCL и не только. Делаем фильтр. Почти быстро и просто»

MySQL. Добавляем хранимые процедуры и функции ( «рутину» ) в модель и физическую базу данных

Добрый день, сегодня простая и интересная тема.  Добавление хранимых процедур и функций, или как их называют в документации MySQL «рутин» в модель и физическую базу данных.

Добавление хранимой функции в физическую базу данных

Здесь всё просто. Открываем WorkBench

Добавляем хранимую функцию. Скажем это будет проверка логина, пароля и роли при входе.

Функция проверяет логин, пароль и роль, если они одновременно подходят, значит возвращает единицу. Если нет, или таких записей больше чем 1, то возвращает 0. Предполагается, что логин должен быть уникальным. Соответственно записи тоже. Читать далее «MySQL. Добавляем хранимые процедуры и функции ( «рутину» ) в модель и физическую базу данных»

Delphi.MySQL.Мои компоненты.TPSDBTreeView

Вот что у нас получится.  Дерево работает над базой MySQL. В примере 2 дерева, работающие над одной таблицей базы. 3-й ряд кнопок сам определяет какое дерево активно. Исходники прилагаю.

Типовая таблица для дерева. Это минимальный набор полей. Всё остальное можно добавлять по необходимости. При этом копирование-вставка записей будут происходить корректно.

Читать далее «Delphi.MySQL.Мои компоненты.TPSDBTreeView»

Delphi. MySQL. InsertSelect всех полей для реализации Copy Paste

Делал для своего компонента TPSDBTreeView функцию «вырезать, копировать, вставить» на основе InsertSelect. Проблема в том, что если пытаться копировать все поля, скажем так

то получим

Что же делать в таком случае? Нашёл такой выход

Вот пример из проекта

 

При вставке в Delphi TFDQuery

Что происходит в коде? Мы просто составляем запрос на уровне базы, выкидывая ненужные колонки, в нашем случае id и исполняем его там.

И далее обращаться, скажем так

 

MySQL. Вход по ролям на уровне базы

Напишем простейшую функцию, которая позволит входить по ролям на уровне базы.

Допустим у нас есть таблицы

Следующая функция позволит осуществлять вход по ролям. На выходе мы получим название роли. И в клиенте можем загружать тот или иной кабинет.

Тестируем

MySQL. Авторизация на языке базы (хранимая функция). И вызов из Delphi

Пример №1

Простая и надежная функция проверки логина, пароля, роли, с результатом tinyint(1)

C результатом VarChar

Вызов из Delphi

Вызов из Delphi

Пример №2

Вот функция в MySQL, которая проверяет пару логин пароль и при обнаружении выдает id пользователя

Эту функцию дал мне Денис Зубов, который также сейчас работает активно с базой MySQL.

Вариант от Дениса Зубова

Простая и понятная функция в стиле Си я бы сказал. Делаем выборку по логину и сравниваем пароль. Если ID не найден, тогда он 0. Можно использовать в качестве авторизации.

Я в своих проектах использую авторизацию через СМС, поэтому мне нужно проверять телефон и пароль. Немного изменил эту функцию на свой лад.

Далее нам нужно вызывать эту функцию, например таким образом

Как вызывать хранимую функцию из Delphi?

Подробное описание на официальном сайте Embarcadero

Если возвращается результат, используем ExecFunc, если нужно просто, чтобы процедура отработала на сервере базы, тогда ExecProc

Delphi. UniGUI. Делаем фильтры. Быстро и просто

Вот, что у нас получится на выходе

Чтобы освоить базовые принципы работы с фильтрами, посмотрите пример, который находится в

Вообще, у UniGUI отличные демки! Можно просто смотреть их и многое делать по аналогии! Читать далее «Delphi. UniGUI. Делаем фильтры. Быстро и просто»