Общие вопросы

Вопросы работы программы, ошибки, рекомендации и.т.п.
KIP
Сообщения: 20
Зарегистрирован: июл 27, '20, 07:37

Re: Общие вопросы

Сообщение KIP » сен 7, '20, 19:05

Возможно ли задать свойство полю БД NOT NULL и значение по умолчанию?
Аватара пользователя
LucasProject
Site Admin
Сообщения: 44
Зарегистрирован: ноя 3, '19, 10:03
Откуда: Москва
Контактная информация:

Re: Общие вопросы

Сообщение LucasProject » сен 8, '20, 12:11

Ответы данные сейчас мной отражают текущие варианты решения задачи, но это не означает, что я их не переделаю в будущем, они скорее всего временные.
1. Чтобы установить значение по умолчанию, нужно назначить событие "OnGetDefaultValue" для поля объекта "TDataSet", а в теле события присвоить параметру "Value.[AsType]" само значение, где [AsType] должен соответствовать типу поля (AsInteger, AsString, AsBoolean и т.д.):

Value.AsString: = 'DefaultValue';

Данная команда назначает значение 'DefaultValue' для текстового поля при добавлении новой записи в источнике данных. (рис1)

2. Проверка на NOT NULL с в самой программе пока не реализована, но если у Вас есть установленный MsAccess, то можно открыть в нем базу и для соответствующего поля установить данное ограничение. (рис2)
Вложения
NotNull.png
NotNull.png (31.86 КБ) 1536 просмотров
Default.png
Default.png (68.52 КБ) 1536 просмотров
KIP
Сообщения: 20
Зарегистрирован: июл 27, '20, 07:37

Re: Общие вопросы

Сообщение KIP » сен 15, '20, 15:49

Здравствуйте. Расскажите над чем сейчас работаете, что ожидать в ближайших обновлениях. Можно опубликовать что-то вроде дорожной карты.
Аватара пользователя
LucasProject
Site Admin
Сообщения: 44
Зарегистрирован: ноя 3, '19, 10:03
Откуда: Москва
Контактная информация:

Re: Общие вопросы

Сообщение LucasProject » сен 16, '20, 21:20

В данный момент заканчиваю реализацию по работе с библиотеками DLL. Данный функционал уже доступен в версии 2.0.0.35. Работа с библиотеками основывается на описании функций из них, например код ниже показывает как описать некоторые функции из системной библиотеки User32.Dll

Код: Выделить всё

//Поиск дескриптора окна
function FindWindowA(lpClassName, lpWindowName:AnsiString):integer; external 'User32.dll';
//Показать окно
function ShowWindow(hWnd:Integer; nCmdShow:Integer):Boolean; external 'User32.dll';
Объявлять функции можно в любом месте, но желательно это делать в модулях, так будет удобнее работать с проектом. После объявления методов 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;
  
Библиотеки можно использовать как системные, сторонних производителей так и свои собственные. Передача параметров осуществляется по Windows стандарту stdcall.
KIP
Сообщения: 20
Зарегистрирован: июл 27, '20, 07:37

Re: Общие вопросы

Сообщение KIP » сен 18, '20, 08:58

Не совсем понятно как "добывать" данные из подчиненных таблиц.
Допустим имеем следующее:
Структура.png
Структура.png (6.25 КБ) 1467 просмотров
Как при редактировании таблице А прочитать/изменить данные в таблице С
Таблица С дочерняя В, а В дочерняя А.
Join? но он не умеет сохранять данные.
Чтобы добраться из А в Б я делаю следующее:

TextEdit_f1.DataSet.FieldByName('fn'').AsString ...

Но это как то криво.

До данных таблице С только запросом с параметрами? Но что то тоже не получается. Значение всегда 0;
Аватара пользователя
LucasProject
Site Admin
Сообщения: 44
Зарегистрирован: ноя 3, '19, 10:03
Откуда: Москва
Контактная информация:

Re: Общие вопросы

Сообщение LucasProject » сен 18, '20, 09:18

Как я понял у вас 3 таблицы, которые описаны в секции "Tables".
Данные таблицы Вы располагаете на формах в виде источников данных "TableDataSet".
Затем по ключевым полям вы устанавливаете подчинённость (Как на картинке).
Теперь ваши таблицы будут подчинены согласно вашим настройкам.

При изменении позиции в управляемой таблице, подчиненные таблицы будут соответствовать установленным правилам отбора. Для получения (FieldByName())и изменения (Edit, INSERT, DELETE) данных в них используются стандартные методы работы с наборами данных.

Я правильно понял Ваш воgрос?
Вложения
Master.png
Master.png (13.37 КБ) 1467 просмотров
KIP
Сообщения: 20
Зарегистрирован: июл 27, '20, 07:37

Re: Общие вопросы

Сообщение KIP » сен 18, '20, 09:31

Ага. Понял ошибку. Я для каждой таблице делал фрейм отображения данных в Grid, а также фрейм для создания новой записи или редактирования. Соответственно, у меня фрейм имел только одну таблицу. Из за чего приходилось изгаляться так как я это выше описал.
Правильно подход - это создание для фрейма всех необходимых таблиц (2, 3, 5 - сколько нужно), данные которых в фрейме используются.
Спасибо.
Аватара пользователя
LucasProject
Site Admin
Сообщения: 44
Зарегистрирован: ноя 3, '19, 10:03
Откуда: Москва
Контактная информация:

Re: Общие вопросы

Сообщение LucasProject » сен 18, '20, 09:55

Вы можете использовать правила подчинения и между фреймами, по моему описанный вами первый вариант более предпочтительный. Вы создаете один общий фрейм, добавляете в него набор данных, а потом используете его совместно с другими фреймами, т.е устанавливаете подчинение.
Аватара пользователя
Develop-Soft
Сообщения: 24
Зарегистрирован: ноя 4, '19, 08:09
Контактная информация:

Re: Общие вопросы

Сообщение Develop-Soft » сен 21, '20, 11:19

LucasProject писал(а):
сен 16, '20, 21:20
В данный момент заканчиваю реализацию по работе с библиотеками DLL...
Волшебно!
KIP
Сообщения: 20
Зарегистрирован: июл 27, '20, 07:37

Re: Общие вопросы

Сообщение KIP » окт 3, '20, 18:45

Не совсем понятно, что за свойство TTreeNode.Texts (String). Оно вроде строковое, но используется как массив 'ATreeNode.Texts[n]'. Что хранится в этом массиве? ('ATreeNode.Texts[0]' - вроде как имя узла). Как узнать размер массива? ('Lenght(ATreeNode.Texts)' не работает).
Ответить