Общие вопросы
Re: Общие вопросы
Возможно ли задать свойство полю БД NOT NULL и значение по умолчанию?
- LucasProject
- Site Admin
- Сообщения: 44
- Зарегистрирован: ноя 3, '19, 10:03
- Откуда: Москва
- Контактная информация:
Re: Общие вопросы
Ответы данные сейчас мной отражают текущие варианты решения задачи, но это не означает, что я их не переделаю в будущем, они скорее всего временные.
1. Чтобы установить значение по умолчанию, нужно назначить событие "OnGetDefaultValue" для поля объекта "TDataSet", а в теле события присвоить параметру "Value.[AsType]" само значение, где [AsType] должен соответствовать типу поля (AsInteger, AsString, AsBoolean и т.д.):
Value.AsString: = 'DefaultValue';
Данная команда назначает значение 'DefaultValue' для текстового поля при добавлении новой записи в источнике данных. (рис1)
2. Проверка на NOT NULL с в самой программе пока не реализована, но если у Вас есть установленный MsAccess, то можно открыть в нем базу и для соответствующего поля установить данное ограничение. (рис2)
1. Чтобы установить значение по умолчанию, нужно назначить событие "OnGetDefaultValue" для поля объекта "TDataSet", а в теле события присвоить параметру "Value.[AsType]" само значение, где [AsType] должен соответствовать типу поля (AsInteger, AsString, AsBoolean и т.д.):
Value.AsString: = 'DefaultValue';
Данная команда назначает значение 'DefaultValue' для текстового поля при добавлении новой записи в источнике данных. (рис1)
2. Проверка на NOT NULL с в самой программе пока не реализована, но если у Вас есть установленный MsAccess, то можно открыть в нем базу и для соответствующего поля установить данное ограничение. (рис2)
- Вложения
-
- NotNull.png (31.86 КБ) 2474 просмотра
-
- Default.png (68.52 КБ) 2474 просмотра
Re: Общие вопросы
Здравствуйте. Расскажите над чем сейчас работаете, что ожидать в ближайших обновлениях. Можно опубликовать что-то вроде дорожной карты.
- LucasProject
- Site Admin
- Сообщения: 44
- Зарегистрирован: ноя 3, '19, 10:03
- Откуда: Москва
- Контактная информация:
Re: Общие вопросы
В данный момент заканчиваю реализацию по работе с библиотеками DLL. Данный функционал уже доступен в версии 2.0.0.35. Работа с библиотеками основывается на описании функций из них, например код ниже показывает как описать некоторые функции из системной библиотеки User32.Dll
Объявлять функции можно в любом месте, но желательно это делать в модулях, так будет удобнее работать с проектом. После объявления методов DLL с ними можно работать как с обычными функциями:
Библиотеки можно использовать как системные, сторонних производителей так и свои собственные. Передача параметров осуществляется по Windows стандарту stdcall.
Код: Выделить всё
//Поиск дескриптора окна
function FindWindowA(lpClassName, lpWindowName:AnsiString):integer; external 'User32.dll';
//Показать окно
function ShowWindow(hWnd:Integer; nCmdShow:Integer):Boolean; external 'User32.dll';
Код: Выделить всё
var CalcHWD:Integer;
CalcHWD:= User32.FindWindowA('', 'Calculator');
PrintLn(IntToStr(CalcHWD));
if CalcHWD <> 0 then
begin
User32.ShowWindow(CalcHWD, 0);
User32.ShowWindow(CalcHWD, 1);
end;
Re: Общие вопросы
Не совсем понятно как "добывать" данные из подчиненных таблиц.
Допустим имеем следующее: Как при редактировании таблице А прочитать/изменить данные в таблице С
Таблица С дочерняя В, а В дочерняя А.
Join? но он не умеет сохранять данные.
Чтобы добраться из А в Б я делаю следующее:
TextEdit_f1.DataSet.FieldByName('fn'').AsString ...
Но это как то криво.
До данных таблице С только запросом с параметрами? Но что то тоже не получается. Значение всегда 0;
Допустим имеем следующее: Как при редактировании таблице А прочитать/изменить данные в таблице С
Таблица С дочерняя В, а В дочерняя А.
Join? но он не умеет сохранять данные.
Чтобы добраться из А в Б я делаю следующее:
TextEdit_f1.DataSet.FieldByName('fn'').AsString ...
Но это как то криво.
До данных таблице С только запросом с параметрами? Но что то тоже не получается. Значение всегда 0;
- LucasProject
- Site Admin
- Сообщения: 44
- Зарегистрирован: ноя 3, '19, 10:03
- Откуда: Москва
- Контактная информация:
Re: Общие вопросы
Как я понял у вас 3 таблицы, которые описаны в секции "Tables".
Данные таблицы Вы располагаете на формах в виде источников данных "TableDataSet".
Затем по ключевым полям вы устанавливаете подчинённость (Как на картинке).
Теперь ваши таблицы будут подчинены согласно вашим настройкам.
При изменении позиции в управляемой таблице, подчиненные таблицы будут соответствовать установленным правилам отбора. Для получения (FieldByName())и изменения (Edit, INSERT, DELETE) данных в них используются стандартные методы работы с наборами данных.
Я правильно понял Ваш воgрос?
Данные таблицы Вы располагаете на формах в виде источников данных "TableDataSet".
Затем по ключевым полям вы устанавливаете подчинённость (Как на картинке).
Теперь ваши таблицы будут подчинены согласно вашим настройкам.
При изменении позиции в управляемой таблице, подчиненные таблицы будут соответствовать установленным правилам отбора. Для получения (FieldByName())и изменения (Edit, INSERT, DELETE) данных в них используются стандартные методы работы с наборами данных.
Я правильно понял Ваш воgрос?
- Вложения
-
- Master.png (13.37 КБ) 2405 просмотров
Re: Общие вопросы
Ага. Понял ошибку. Я для каждой таблице делал фрейм отображения данных в Grid, а также фрейм для создания новой записи или редактирования. Соответственно, у меня фрейм имел только одну таблицу. Из за чего приходилось изгаляться так как я это выше описал.
Правильно подход - это создание для фрейма всех необходимых таблиц (2, 3, 5 - сколько нужно), данные которых в фрейме используются.
Спасибо.
Правильно подход - это создание для фрейма всех необходимых таблиц (2, 3, 5 - сколько нужно), данные которых в фрейме используются.
Спасибо.
- LucasProject
- Site Admin
- Сообщения: 44
- Зарегистрирован: ноя 3, '19, 10:03
- Откуда: Москва
- Контактная информация:
Re: Общие вопросы
Вы можете использовать правила подчинения и между фреймами, по моему описанный вами первый вариант более предпочтительный. Вы создаете один общий фрейм, добавляете в него набор данных, а потом используете его совместно с другими фреймами, т.е устанавливаете подчинение.
- Develop-Soft
- Сообщения: 24
- Зарегистрирован: ноя 4, '19, 08:09
- Контактная информация:
Re: Общие вопросы
Волшебно!LucasProject писал(а): ↑сен 16, '20, 21:20В данный момент заканчиваю реализацию по работе с библиотеками DLL...
Re: Общие вопросы
Не совсем понятно, что за свойство TTreeNode.Texts (String). Оно вроде строковое, но используется как массив 'ATreeNode.Texts[n]'. Что хранится в этом массиве? ('ATreeNode.Texts[0]' - вроде как имя узла). Как узнать размер массива? ('Lenght(ATreeNode.Texts)' не работает).