Delphi. MySQL. Считаем сумму заказа через Delphi и MySQL

Есть таблицы. Далее будут эволюционировать по мере написания поста.

39

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

Вариант посложнее, через Delphi. Continue reading

Delphi. UniGUI. Знаки вопроса. Кодировка (charset) на VPS и локаль

50

2 дня убил на то, чтобы понять, почему на VPS, при загрузке туда приложения UniGUI и базы MySQL при Insert и Update пишутся знаки вопросов вместо русского текста.

Решение. Выставить локаль Wndows Server 2012 на русскую. А также все, что возможно выставить в UTF-8.

Что было сделано до локали?

-Все, что возможно, было выставлено в utf-8 в MySQL.

-При подключении TFDConnection, параметр UTF-8 также был добавлен.

Но обо всем по порядку. Обсуждение темы находится на официальном форуме UniGUI.

Приведу описание проблемы и ее решение Continue reading

MySQL. 2 способа пересечения множеств и объединения таблиц

Есть следующая структура

36

Нужно составить вот такую таблицу

37

Часть данных у нас в одной таблице, часть данных в другой. Как получить это за один запрос?

1 способ (спасибо Денису Зубову из Самары)

2 способ

На выходе получим

38

Но есть одна проблема – поля с одинаковыми названиями, тогда делаем так…

либо так…

 

Delphi. MySQL. Пишем в DECIMAL поле и читаем из него.

Есть Decimal поле для цены в одном из проектов. Есть на форме 2 spinEdit, рубли и копейки соответственно.

33

Чтение из базы

Получение дробной части из Float(Real)

Получение целой и дробной частей для загрузки на форму

Запись в базу

 

Delphi. Гениальная борьба с WideMemo

Делаю проект на UniGUI. Соответственно, не могу воспользоваться DBGridEh

Имеется поле типа TEXT в MySQL, Delphi определяет его как WideMemo

32

Я просто создал кальк поле и прописал значения туда

 

 

 

MySQL. Удаление записей с истекшим сроком давности

в базе

27

код, пример из проекта, допустим нам нужно удалить записи со сроком давности > 1 минуты

 

Delphi. REST. Декодирование ответа сервера, или превращаем \u0422\u0430\u043A… в нормальный русский текст

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

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

MySQL. Insert in table with foreign-key

Шпаргалочка. Допустим sessions_id это foreign key другой таблицы. Вот как можно вставить в таблицу с foreign key

 

Delphi. DBTreeView. Простой алгоритм обхода всего дерева и обход всех детей конкретного узла.

23

Данные алгоритмы не рекурсивны, как возможно стоило бы сделать. Но в компоненте TTreeView есть ряд готовых методов, которыми можно просто пользоваться. В данном случае, мы опираемся на метод GetNext, который дает нам всегда следующий узел, независимо от уровня.

Пусть есть дерево TTreeView. Вот простой способ обойти все дерево.

 

 

Обход самого узла и всех детей конкретного узла

 

Delphi.DBTreeView. Алгоритм динамического обновления узлов

22

Пусть есть TreeView, связанное с базой данных, например MySQL. Необходимо сделать так, чтобы данные загружались только при первоначальном заполнении (idParent=-1) либо при раскрытии узла (OnExpanding).

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

Итак, человеческими словами

Алгоритм

-собрать ID и имена всех детей для определенного родителя

-очистить узел от указателей и детей

-загрузить данные в узел, добавляя в свойство Node.Data ссылку на ID узла в базе. Для большинства задач этого достаточно, если нужно больше данных, можно использовать ссылку на запись или экземпляр класса, если уж все будет совсем масштабно.

-при загрузке проверять, если у какого-то ребенка есть еще дети, добавлять “призрачный” узел, чтобы у TreeView появлялся “плюсик”, при нажатии на который можно производить очередной Expanding Continue reading