Delphi отбелязва размишления относно недостатъците на набора от данни
Забележки на програмиста Delphi + Oracle
Размисли по темата: недостатъци на наборите данни
Тази публикация е размисъл по темата: недостатъците на TDataSet. Предполагам, че читателят е запознат с факта, че TDataSet е основен клас за работа с набори от данни (DD). Предполагам също, че читателят е запознат с основите на програмните приложения за работа с бази данни (DB).
Delphi предлага следната схема за работа с ND:
а) TDataSet - за работа със самия ND;
б) TDataSource - източник на данни, използван за свързване на ND с визуални компоненти;
в) свързване на компоненти с ND (за показване и редактиране) чрез DataSource.
Всичко изглежда красиво.
Най-простото нещо е да се създаде форма за редактиране на определен запис: всяка контрола във формуляра е свързана с конкретно ND поле. Преди редактиране потребителят избира записа и след редактирането или запазва промените, или отменя. Работата с конкретен запис е задоволителна.
Но когато е необходимо да се работи с целия набор наведнъж (за показване в мрежата, за сортиране, за решаване на някои аналитични проблеми), веднага възникват проблеми с неудобството. Причината за тези проблеми е, че итерацията върху записите в листа с данни е възможна само с помощта на курсора, сочещ към текущия (активен) запис. Трябва да се помни, че ако визуалните контроли са свързани с набора от данни, като цяло е необходимо да се направи нещо подобно:
DisableControls/EnableControls трябва да се направят така, че контролите да не реагират на промените в текущия запис и да не причиняват трептене. Необходим е отметка, за да се върне към записа, с който е работил потребителят след работа с ND.
Наборите данни имат свойство - текущото състояние. Има междинно състояние - dsBrowse и много различни - записът се редактира, търси и т.н. Освен това преходът от едно състояние в друго е възможен само чрез dsBrowse. Това означава, че ако ND е отворен за редактиране, търсенето на същия ND вече не е възможно. Освен това, ако работя, например, с йерархична структура, след като съм отворил запис за редактиране, не мога да използвам същия ND, за да посоча родителския запис.