-
MY PROJECTS
-
Recent Posts
- SQL.How can you compare two nullable values safely, and how does IS DISTINCT FROM differ from <>?
- SQL.How are NULL values ordered by ORDER BY, how do defaults differ between databases, and how can you control their placement?
- SQL.How does NULL propagate through arithmetic expressions, and how can COALESCE and NULLIF help handle missing values and division by zero?
- SQL.How does NULL affect join conditions, and why can filtering the right-hand table in WHERE remove unmatched rows from a LEFT JOIN?
- SQL.How do GROUP BY and DISTINCT treat NULL values, even though NULL = NULL evaluates to UNKNOWN?
- SQL.How do aggregate functions handle NULL, and what is the difference between COUNT(*), COUNT(column), and COUNT(DISTINCT column)?
- SQL.How does NULL affect IN and NOT IN, and why can NOT EXISTS be a safer choice when a subquery returns nullable values?
- SQL.How do WHERE, HAVING, and CHECK constraints treat conditions that evaluate to UNKNOWN?
- SQL.Why do column = NULL and column <> NULL not work as expected, and when should you use IS NULL and IS NOT NULL?
- SQL.What is SQL’s three-valued logic (TRUE, FALSE, UNKNOWN), and how do AND, OR, and NOT behave with UNKNOWN?
- ChromeDevTools.Watch all failed requests
- SQL.What are domain types (or constraints on data types), and how do they help enforce data correctness?
- SQL.How does SQL handle comparisons between different data types (for example, string vs number), and why is this dangerous?
- SQL.What is the difference between DATE, TIME, TIMESTAMP, and TIMESTAMPTZ, and which one should be used for business events?
- SQL.How do numeric types like INTEGER, BIGINT, DECIMAL, and FLOAT differ in terms of precision and use cases?
- SQL.What problems can arise from implicit type casting in SQL, and how can it affect indexes?
- SQL.How does NULL differ from 0, an empty string, or FALSE in SQL?
- SQL.What is the difference between CHAR, VARCHAR, and TEXT, and when would you choose each?
- SQL.What is MVCC ?
- SQL.What is AutoVacuum Postgres ?
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: Delphi
Delphi. TTreeView. Корректная замена StateIndex иконок при DragDrop
Корректно заработало только при таком коде – сначала пришлось поставить другую иконку, потом вернуть её на место.
|
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 |
procedure TDMDB.UpdateStateIndex(Node: TTreeNode); var i:integer; begin if Node.StateIndex=2 then begin Node.StateIndex:=1; Node.StateIndex:=2; end else begin Node.StateIndex:=2; Node.StateIndex:=1; end; // Далее рекурсивно по всем потомкам if Node.HasChildren then begin for i := 0 to Node.Count-1 do UpdateStateIndex(Node[i]); end; end; |
Delphi. Иерархические данные. DBTreeView своими руками. Удаление потомков узла из TreeView
Удаление потомков узла. По логике, перед тем как вставить что-то новое желательно, удалить старые элементы узла.
|
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 |
Процедуры очищения узла в дереве //----------------------------Очищение узла от всех потомков в дереве------------------------- procedure TCopyAndPasteThread.ClearNodeChildrenData(Node:TTreeNode); //Вспомогательная процедура - рекурсивно очищает память под Data под всеми узлами var i:integer; begin if not (MainForm.TreeView1.Selected=Node) then begin If Node.Data<>nil then Dispose(Node.Data); end; for i := 0 to Node.Count-1 do Self.ClearNodeChildrenData(Node[i]); end; procedure TCopyAndPasteThread.ClearAllChildren; //Непосредственное удаление из дерева var Node:TTreeNode; begin Node:=MainForm.TreeView1.Selected; ClearNodeChildrenData(Node); Node.DeleteChildren; end; |
Delphi. MySQL. Копирование записи
Часто встречается такая задача, чтобы не искать долго по интернетам, решил вывести её решение в отдельный пост. Решение задачи базируется на удобной возможности MySQL Insert… Select…
|
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 |
//---------------------------------Копирование записей в БД----------------------------- function CopyRecordInDB(SourceID: integer): integer; var qSelectInsert: TFDQuery; qGetKey: TFDQuery; begin qSelectInsert := TFDQuery.Create(nil); try qSelectInsert.Connection := FDConnection; qSelectInsert.SQL.Text:= 'INSERT INTO `treeview_db`.`tree`'+ '(`IdParent`,'+ '`Name`,'+ '`Index`,'+ '`isChecked`,'+ '`IsExpanded`,'+ '`Level`,'+ '`IsFolder`)'+ 'SELECT'+ '`IdParent`,'+ '`Name`,'+ '`Index`,'+ '`isChecked`,'+ '`IsExpanded`,'+ '`Level`,'+ '`IsFolder`'+ ' from'+ '`treeview_db`.`tree` where id = :id' ; qSelectInsert.Params.ParamValues['id'] := SourceId; qSelectInsert.ExecSQL; finally qSelectInsert.Free; end; end; |
Delphi. Иерархические данные. DBTreeView своими руками. Копирование узлов в TreeView с сохранением структуры
Это продолжение статьи про копирование узлов. В прошлом посте копировали иерархические записи в БД, в данном посте – будем обновлять узел в который вставляли скопированные записи. Эти 2 части – БД и TreeView должны работать синхронно – в этом самая … Continue reading
Delphi. Иерархические данные. DBTreeView своими руками. Копирование записей в БД с сохранением структуры
В данной статье посмотрим как копировать записи иерархических структур в DBTreeView, который мы уже на протяжении нескольких статей создаем своими руками. В этом посте только копирование записей в базе. В следующей добавлю обновление в дереве. Для меня задача оказалась нетривиальной. … Continue reading
Posted in Delphi, Без рубрики, Деревья
Comments Off on Delphi. Иерархические данные. DBTreeView своими руками. Копирование записей в БД с сохранением структуры
Delphi. Иерархические данные. DBTreeView своими руками. Делим узлы на папки и файлы
Продолжаю структурировать DBTreeView. Пришел к мысли, что в потоки следует убирать долгие операции, в моем случае – удаление множества узлов, отмечание галочками множества узлов. Короткие же достаточно поместить в обычный юнит – в частности добавление узлов. Данная статья посвящена специализации … Continue reading
Delphi. Иерархические данные. DBTreeView своими руками. Удаление “Checked” узлов в отдельном потоке
В данной статье описан алгоритм удаления узлов, отмеченных галочками в случае, когда дерево загружается динамически (то есть не полностью). Сам алгоритм работает из отдельного потока. Идея в том, чтобы собрать список “чекнутых” узлов, рекурсивно пройтись по базе, чтобы узнать есть … Continue reading
Delphi. Иерархические данные. DBTreeView своими руками. Чекбоксы в отдельном потоке
Решил добавить многопоточности в дерево. Cтолкнулся с тем, что при большом количестве потомков у узла, больше 500, начинаются тормоза с проставлением галочек у всех потомков. Я запрограммировал так, что при нажатии на узел родителя, если у него есть узлы дети, … Continue reading
Posted in Delphi, Без рубрики, Деревья
Comments Off on Delphi. Иерархические данные. DBTreeView своими руками. Чекбоксы в отдельном потоке
Delphi. Иерархические данные. DBTreeView своими руками. Динамическая подгрузка веточек
Идея динамической подгрузки веточек-узлов пришла ко мне, когда я стал добавлять по 500 узлов в узлы родители, и при загрузке дерева стала ощущаться задержка. Я так и представил разрастающиеся базы пользователей и эти долгие загрузки со всеми последствиями. Оно и … Continue reading
Delphi. Иерархические данные. DBTreeView своими руками. Рекурсивное удаление поддерева
В связи с тем, что переделал алгоритм загрузки данных для дерева до динамического, пришлось переделать алгоритм удаления из базы. При динамической подгрузке в TreeView видны узлы лишь до уровня, открытого пользователем. Всё что глубже – просто не загружено. Поэтому как … Continue reading
Posted in Delphi, Без рубрики, Деревья
Comments Off on Delphi. Иерархические данные. DBTreeView своими руками. Рекурсивное удаление поддерева