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

7

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

2

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

3

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

1

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

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

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

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

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

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

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

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

Continue reading

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

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

106

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

107

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

108

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

110

Delphi. MySQL. Ошибка Type mismatch for field ‘name’, expecting: String actual: WideString

Пока не понял природу этой ошибки, но решил зафиксировать, мало ли кому понадобится.

Такая ошибка появилась у меня в результате работы с базой MySQL с кодировкой UTF8 и FDConnection, также с кодировкой UTF8, но передаваемым не напрямую, а через другой модуль. У меня была проблема с тем, что кириллица не отображалась корректно в FDTable и мне пришлось искать решение какое-то время.

Решение №1

В ручную создать новые поля типа WideString в FDTable или FDQuery (смотря с чем работаете) взамен тех, у которых тип String. Например так

13

 

14

После того как я в ручную создал эти поля и удалил те, которые String – все стало как нужно.

ПолуРешение №2 (оно только очистит поля)

Но в этом случае придется пересоздавать поля

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

103

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

102

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

uses

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

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

101

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

99

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

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

Delphi. UniGUI. Делаем витрину (showcase) 2 часть

97

В прошлом посте мы сделали подготовочку. Структуру базы данных, определили основные сущности программы, создали под них таблицы в базе и модули в прекрасной IDE Delphi.

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

Общий вид витрины

90

Выделение товара

91

Добавление товара

94

Перелистнем на следующую страницу

93

Изменим размер формы – как видно товары перестроились в зависимости от новой ширины.

95

Исходники

Continue reading

Delphi. Uploading to Keep2Share. Successful attempt

89

А теперь удачная попытка. Суть в том, что мы сначала отправляем файлы на VPS, далее, уже на Keep2Share через PHP скрипт.

Сам скрипт отправки файла с одного сервера на другой достаточно прост

Он выдает некоторую информацию, из которой нам с вами нужно вытащить ссылку на закачанный файл. Вот какой получится результат

82

Continue reading

Delphi. Uploading to Keep2Share. Half Successfull Atempt…

Поступил ко мне небольшой заказ на автоматизацию заливки файлов на файлообменник Keep2Share.cc Всего было у меня 2 попытки делания данного проекта. Сначала опишу неудачную попытку, а в другом посте удачную. Задача стояла таким образом, чтобы сделать заливку напрямую из Delphi программы на сервере Keep2Share.cc

К счастью, у Keep2Share.cc есть API.  Это API работает прекрасно со скриптами PHP,  о чем приводится пример на той же странице с API.

Вот моя попытка, скажу сразу, удалось почти всё, кроме последнего шага, который мне показался самым трудным.

Согласно API все транзакции проходят в JSON формате, я научился получать токен авторизации, отправлять тестовый запрос, а вот загружать файл не научился, хотя удалось получить от сервера всю необходимую информацию для отправки файла на сервер. Проблема оказалась в том, что я не смог до конца корректно перевести CURL запрос в INDY. cURL я так понимаю это библиотека, аналогичная InDY, только для C подобных языков.

Получение токена авторизации

77 Continue reading

Delphi. UniGUI. Простой способ пропорционального уменьшения картинки

74

Заблудился, что называется в 3 соснах. Долго отлаживал этот простой код и Аллилуйя теперь все работает как нужно. С одной стороны сказалась специфика UniGUI, с другой нюансы Delphi. Я уже писал код для уменьшения картинок в потоке, но там все только для VCL и может быть FireMonkey. В UniGUI же я столкнулся с тем, что не смог воспользоваться методом LoadFromFile для экземпляра класса TWIC, что ввело меня в ступор. Но слава Богу нашелся другой вариант.

В общем вот элегантное решение, на мой взгляд, на примере UniGUI фрэймворка, но оно же подойдет для VCL если TuniImage заменить на TImage

Continue reading

Delphi. Indy. Как отправить Get запрос, принять и обработать его на idHTTPServer?

72

Уже была подобная статья про отправку запросов с параметрами методом POST, а также был подобный пост, который касался отправки файлов методом POST и был на порядок сложнее того, что я напишу сейчас. Данные во второй статье отправляются в кодированном виде и мы делали специальный модуль для декодирования параметров запроса, а также передаваемых файлов. GET запрос в данном случае будем передавать в традиционном виде, то есть URI+параметры, например так…

В качестве примера я возьму проект на UniGUI, который в свою очередь использует idHTTPServer по умолчанию, в один из модулей я добавил idHTTP, таким образом у нас есть всё, для того, чтобы отправить и принять запрос.

Отправка GET запроса Continue reading