-
MY PROJECTS
-
Recent Posts
- Algo.Java.BinarySearch
- SQL. Conditional expression with count()
- Java.Algo.CumulativeApproach
- Algo.Java.BFS in BinaryTree
- Java.Jackson.Serialize object to json
- Algo. Traverse linked list
- Algo. Java. Remove-duplicates-from-sorted-array
- Java.Hibernate.SimpleExample
- Java.Jdbc.SimpleExample
- SQL. Calc the sum with case, example
- Mullvad – free the internet :)
- Junit. Jupiter
- Java. SpringBoot Example how to work with dateTime in Specification
- Java.SpringBoot.PopularAnnotations
- SpringBoot. Exception Management
- Java.Hibernate.JoinTableAnnotation
- SpringBoot.Making our first starter and autoconfiguration
- Spring. Creating main annotation to start business logic
- Spring.Reading from properties file
- Spring.How to define spring version inside springBoot ?
Categories
- Aptana
- Azure
- C#
- DataSnap
- DBExpress
- Delphi
- Delphi и сети
- Delphi. Язык программирования
- ExtJS
- FastReport
- FireDAC
- FireMonkey
- GIT
- ICS
- IDE
- IIS
- Indy
- InnoSetup
- javascript
- jQuery
- JSON
- LiveBindings
- MSHTML
- MySQL
- PHP
- REST
- Ribbons
- SMS
- SQL инструкции
- SVN
- TRichView
- UniGui
- WebBroker
- WinAPI
- Windows
- Алгоритмы
- Без рубрики
- Деревья
- Ищу ответ
- Компонентостроение
- Мои компоненты
- Начальный уровень
- Обработка исключений
- Парсинг
- Потоки(Threads)
- Регулярные выражения
- Тестирование приложений
Category Archives: MySQL
MySQL. CloneDB
Скачать утилиты для MySQL Пример использования
1 |
mysqldbcopy --source=root:masterkey@localhost:3306 --destination=root:masterkey@localhost:3306 sewworld_db:sewworld_db2 |
Базы, в которую клонируем не должно быть. Утилита сама ее создаст.
Posted in MySQL
Comments Off on MySQL. CloneDB
MySQL. Triggers don’t fire on Cascade Delete
This is fact. No workaround possible with MySQL Syntax. Only on client. The end.
Posted in MySQL
Comments Off on MySQL. Triggers don’t fire on Cascade Delete
MySQL. Cравнение даты (datetime) через оператор BETWEEN
Источник Оператор BETWEEN идеально подходит для сравнения диапазона между датами (datetime). Но тут есть подводные камни. Например, есть задача — выбрать данные из таблицы за некоторый промежуток времени (с ‘2008-08-14’ по ‘2008-08-23’). Рекомендации: 1. Выполняя любые сравнения, приводить все данные … Continue reading
Posted in MySQL
Comments Off on MySQL. Cравнение даты (datetime) через оператор BETWEEN
MySQL.Example with Cursor
from project
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
CREATE DEFINER=`root`@`localhost` FUNCTION `isCorrect_ManyCorrectAnswers`(aEid integer,aTid integer, aUid integer, aQid integer) RETURNS tinyint(1) BEGIN declare r tinyint(1) default(0); declare answersID integer; Declare done tinyint(1) default(0); # is correct if all answers correct # isCorrect if at least one answer correct declare isCorrectIfAllAnswersCorrect tinyint(1); SELECT isCorrectIfAllAnswersCorrect FROM coffeetest_db.testquestions WHERE id = aQid INTO isCorrectIfAllAnswersCorrect; if isCorrectIfAllAnswersCorrect then begin # check if all answers correct DECLARE answersCursor CURSOR FOR SELECT iftable.testAnswers_id as respondentAnswer FROM coffeetest_db.answersonquestions aq, testQuestions tq, ifoneormanycorrectanswers iftable where aq.testQuestions_id=tq.id and iftable.answersonquestions_id=aq.id and aq.events_id=aEid and aq.users_id=aUid and aq.tests_id=aTid and aq.testQuestions_id=aQid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; set r=1; # assume all variants where checked correct Open answersCursor; whileLoop:while done=false do fetch answersCursor into answersId; # do something if isAnswerCorrect(aQid,answersId)=0 then begin set r=0; leave whileLoop; end; end if; end while; Close answersCursor; end; else begin # check if at least one answer correct DECLARE answersCursor CURSOR FOR SELECT iftable.testAnswers_id as respondentAnswer FROM coffeetest_db.answersonquestions aq, testQuestions tq, ifoneormanycorrectanswers iftable where aq.testQuestions_id=tq.id and iftable.answersonquestions_id=aq.id and aq.events_id=aEid and aq.users_id=aUid and aq.tests_id=aTid and aq.testQuestions_id=aQid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true; Open answersCursor; whileLoop:while done=false do fetch answersCursor into answersId; # do something if isAnswerCorrect(aQid,answersId)=1 then begin set r=1; leave whileLoop; end; end if; end while; Close answersCursor; end; end if; RETURN r; END |
Posted in MySQL
Comments Off on MySQL.Example with Cursor
Delphi. VCL и не только. Делаем фильтр. Почти быстро и просто
Выглядеть он будет у нас вот так… Можно добавлять бесконечное число параметров для фильтрования. Это начальная версия, я расскажу идею, там ещё много всего надо доработать, но как идея вполне рабочая.
MySQL. Добавляем хранимые процедуры и функции ( “рутину” ) в модель и физическую базу данных
Добрый день, сегодня простая и интересная тема. Добавление хранимых процедур и функций, или как их называют в документации MySQL “рутин” в модель и физическую базу данных. Добавление хранимой функции в физическую базу данных Здесь всё просто. Открываем WorkBench Добавляем хранимую … Continue reading
Posted in MySQL
Comments Off on MySQL. Добавляем хранимые процедуры и функции ( “рутину” ) в модель и физическую базу данных
Delphi.MySQL.Мои компоненты.TPSDBTreeView
Вот что у нас получится. Дерево работает над базой MySQL. В примере 2 дерева, работающие над одной таблицей базы. 3-й ряд кнопок сам определяет какое дерево активно. Исходники прилагаю. Типовая таблица для дерева. Это минимальный набор полей. Всё остальное можно … Continue reading
Posted in Delphi, MySQL, Компонентостроение
Comments Off on Delphi.MySQL.Мои компоненты.TPSDBTreeView
Delphi. MySQL. InsertSelect всех полей для реализации Copy Paste
Делал для своего компонента TPSDBTreeView функцию “вырезать, копировать, вставить” на основе InsertSelect. Проблема в том, что если пытаться копировать все поля, скажем так
1 |
insert into users SELECT * FROM coffeetest_db.users; |
то получим
1 2 |
10:35:43 insert into users SELECT * FROM coffeetest_db.users Error Code: 1062. Duplicate entry '1025' for key 'PRIMARY' 0.016 sec |
Что же делать в таком случае? Нашёл такой выход Вот пример из проекта … Continue reading
Posted in MySQL, Без рубрики
Comments Off on Delphi. MySQL. InsertSelect всех полей для реализации Copy Paste
MySQL. Вход по ролям на уровне базы
Напишем простейшую функцию, которая позволит входить по ролям на уровне базы. Допустим у нас есть таблицы Следующая функция позволит осуществлять вход по ролям. На выходе мы получим название роли. И в клиенте можем загружать тот или иной кабинет.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
CREATE DEFINER=`root`@`localhost` FUNCTION `getUserRole`(luser_name VARCHAR(45),lpassword VARCHAR(45)) RETURNS varchar(45) CHARSET utf8 BEGIN -- defining local vars DECLARE aid_user INT; DECLARE roleName VARCHAR(45); DECLARE apassword VARCHAR(45) default 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET aid_user = 0; -- selecting for login and md5 password select id,password into aid_user,apassword from users where login=luser_name and password=md5(lpassword); -- check number of selected rows SELECT FOUND_ROWS() as num_of_rows_found into @RowCount; if @RowCount=0 then begin set aid_user = 0; set roleName='wrong login or password';end; else begin select name into roleName from roles where id=aid_user; end; end if; -- if md5(lpassword)<>apassword then set aid_user = 0; end if; -- if lpassword<>apassword then set aid_user = 0; end if; RETURN roleName; END |
Тестируем
Posted in MySQL
Comments Off on MySQL. Вход по ролям на уровне базы
MySQL. Пример авторизации на языке базы (хранимая функция). И вызов из Delphi
Пример №1 Простая и надежная функция проверки логина, пароля, роли, с результатом tinyint(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE DEFINER=`root`@`localhost` FUNCTION `loginpasswordrolecheck2`(ALogin VARCHAR(45), APassword VARCHAR(45), ARoleName VARCHAR(45)) RETURNS tinyint(1) BEGIN -- DECLARE foundRows INT; -- default 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION return 0; -- if count=1 then OK select count(*) from users where login=ALogin and password=APassword and roles_id=(select id from roles where name=ARoleName) into @RowCount; if @RowCount=1 then return 1; else return 0; end if; END |
C результатом VarChar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CREATE DEFINER=`root`@`localhost` FUNCTION `loginpasswordrolecheck`(ALogin VARCHAR(45), APassword VARCHAR(45), ARoleName VARCHAR(45)) RETURNS varchar(45) CHARSET utf8 BEGIN -- DECLARE foundRows INT; -- default 0; -- DECLARE roleName varchar(45); -- default 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION return 0; -- if count=1 then OK select count(*) from users where login=ALogin and password=APassword and roles_id=(select id from roles where name=ARoleName) into @RowCount; if @RowCount=1 then return '1'; else return '0'; end if; END |
Вызов из Delphi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CREATE DEFINER=`root`@`localhost` FUNCTION `loginpasswordrolecheck`(ALogin VARCHAR(45), APassword VARCHAR(45), ARoleName VARCHAR(45)) RETURNS varchar(45) CHARSET utf8 BEGIN -- DECLARE foundRows INT; -- default 0; -- DECLARE roleName varchar(45); -- default 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION return 0; -- if count=1 then OK select count(*) from users where login=ALogin and password=APassword and roles_id=(select id from roles where name=ARoleName) into @RowCount; if @RowCount=1 then return '1'; else return '0'; end if; END |
Вызов из Delphi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
procedure TMain.bHelloClick(Sender: TObject); var result:string; begin with FDStoredProc do begin Connection:=FDConnection; //coffeetest_db.loginPasswordRoleCheck //StoredProcName:='loginpasswordrolecheck'; StoredProcName:='loginpasswordrolecheck2'; Prepare; Params[0].Value := 'admin1'; Params[1].Value := 'admin'; Params[2].Value := 'admin'; Result := ExecFunc; ShowMessage(result); end; end; |
Пример №2 Вот функция в MySQL, которая проверяет пару логин пароль и при обнаружении … Continue reading