Последняя версия DataExpress 2021.01.18

Изображение Скачать | Изображение Что нового?

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Предложения по новому функционалу и развитию существующего.
Аватара пользователя
Иван
Интересующийся
Сообщения: 239
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 34 раза
Поблагодарили: 74 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение Иван » 24 дек 2020, 09:38

Предложение к admin для удобства работы в дизайнере.

1. Было б отлично добавить реальное имя поля в окно Имя поля как на картинке.

2. В дизайнере поиск по полю и по форме (думаю выпадающий список тут был бы идеальным решением выше поля Найти форму и ввод в само поле Найти форму:
Имя формы (по умолчанию), Реальное имя формы, Имя поля, Реальное имя поля, Имя компонента).
Вложения
Скриншот 2020-12-24 08.17.54.png
Скриншот 2020-12-24 08.17.54.png (8.35 КБ) 485 просмотров

jurist23rus
Эксперт
Сообщения: 2728
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 3 раза
Поблагодарили: 32 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение jurist23rus » 24 дек 2020, 10:50

Новичок не будет понимать отличий между "Именем поля" и "Реальным именем поля". Для него это создаст иллюзию излишней сложности приложения, которое отпугивает с первых минут, так как у него нет интуитивного понимания как с этим работать. И главный вопрос: приложение для кого? Для десятка умников типа меня и вас или для сотен простых пользователей не представляющих как устроена реляционная база данных, но интуитивно понимающих, что это удобнее чем Эксель.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
rausNT
Специалист
Сообщения: 790
Зарегистрирован: 24 авг 2017, 09:23
Благодарил (а): 151 раз
Поблагодарили: 12 раз

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение rausNT » 24 дек 2020, 11:10

jurist23rus писал(а):Новичок не будет понимать отличий.


как вариант - показывать в режиме эксперт только.

Аватара пользователя
admin
Разработчик
Сообщения: 5361
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 45 раз
Поблагодарили: 387 раз

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение admin » 24 дек 2020, 12:28

Действительно, имя поля в базе данных нужно 2-3 пользователям. Поэтому такой возможности не будет.

Аватара пользователя
Иван
Интересующийся
Сообщения: 239
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 34 раза
Поблагодарили: 74 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение Иван » 24 дек 2020, 12:41

admin писал(а):Действительно, имя поля в базе данных нужно 2-3 пользователям. Поэтому такой возможности не будет.


Оно как бы да, ну если вдруг все же будет энтузиазм и что б новичков не смущать вот так бы сделать как на картинке и отлично) Те кому оно не нужно даже не заметят.
Вложения
Скриншот 2020-12-24 08.17.5114.png
Скриншот 2020-12-24 08.17.5114.png (6.84 КБ) 468 просмотров

jurist23rus
Эксперт
Сообщения: 2728
Зарегистрирован: 30 сен 2016, 09:42
Откуда: Майкоп
Благодарил (а): 3 раза
Поблагодарили: 32 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение jurist23rus » 24 дек 2020, 13:56

Иван, напишите расширение. Можно записывать нужную вам инфу из базы в файл каждый раз при запуске базы.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Иван
Интересующийся
Сообщения: 239
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 34 раза
Поблагодарили: 74 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение Иван » 24 дек 2020, 14:12

jurist23rus писал(а):Иван, напишите расширение. Можно записывать нужную вам инфу из базы в файл каждый раз при запуске базы.


У меня есть функция что полностью парсит SQL формата DX из названиями полей и форм, метками форм и т.д. под формат стандартного SQL, и такая же что парсит наоборот, то есть это по сути не критичный вопрос для меня. Просто удобно когда вдруг где то ошибку выдало с названием поля сразу предполагая где искать быстренько проверить название не прибегая к другим манипуляциям.

Аватара пользователя
Иван
Интересующийся
Сообщения: 239
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 34 раза
Поблагодарили: 74 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение Иван » 24 дек 2020, 17:41

jurist23rus писал(а):Иван, напишите расширение. Можно записывать нужную вам инфу из базы в файл каждый раз при запуске базы.


Хорошая идея, насчет расширения. Написал функцию, в дебаг выводит форму и поле по аргументу типа f1234, оставлю код в теме, может кому сэкономит нервы)

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

function RP(const SS, OP, NP: string): string;
begin    result:=StringReplace(SS, OP, NP,[rfReplaceAll]); end;

function GetFromTString ( txt: TStrings; s: string; n, k: integer): string; // получение данных и строки где есть определенный атрибут
var i, j: integer;
begin
  try
   result:= '';

            if (n>0) then
            if (k=0) or (k>n) then
            if n<=txt.count then
            begin
               if k=0 then k:= txt.count-1;

               for i:=n to k do
               begin
                 j:= UTF8Pos( utf8lowercase(s), utf8lowercase(txt[i]), 1);
                 if j>0 then
                 begin
                    result:= trim(RP(UTF8Copy(txt[i], j+utf8length(s), utf8length(txt[i])),'''',''));
                    break;
                 end;
               end;
            end;
  except
     debug(' GetFromTString ' );
  end;
end;


// получение номера строки где есть определенный атрибут
function GetNumFromTString ( txt: TStrings; s: string; n: integer): integer;
var i: integer;
begin
  try
            result:= -1;
            s:= utf8lowercase(s);

            if txt.count>0 then
            if n<=txt.count then
            for i:= n to txt.count-1 do
            if UTF8Pos( s, utf8lowercase(txt[i]), 1)>0 then
            begin
                result:= i;
                break;
            end;
  except
     debug(' GetNumFromTString ' );
  end;
end;


function GetFieldCaptionFromXML ( txt: TStrings; s: string): string;
var n: integer;
begin
           result:='';
           n:= GetNumFromTString (txt, 'Id = ' + s, 10);
           if n<>-1 then
           result:= GetFromTString (txt, 'FieldName = ', n+1,0);
end;

{@function
OrigName=GetFormAndField
Name=GetFormAndField
Args=s
Result=s
Group=SQL
Description= Возвращает название формы и поля на котороом размещено поле
с реальным именем в качестве аргумента.
GetFormAndField ('f1234'): string;
 @}

function GetFormAndField (s: string): string;
 var q: TdxSqlQuery; ss, sss: string; lg: longint; i: integer; txt: TStringList;
begin
  result:= '';
  s:= trim(RP(vartostr(s),'f',''));

  if s='' then exit;
  try
        txt:=TstringListUTF8.Create;
        q:=sqlselect('select * from DX_forms');
        q.open;
        if not q.eof then
        begin
           q.movefirst;
           for i:= 0 to q.recordcount-1 do   
           begin
              txt.text:= q.ass['form'];
              if UTF8Pos('Id = ' + s,txt.text,10)>0 then
              begin
                 result:= 'форма="' + GetFromTString (txt, 'FormCaption = ', 1,0) + '" поле="'+ GetFieldCaptionFromXML(txt,s) +'"';
                 debug(result);
                 exit;
              end;
              q.MoveNext;
           end;
        end;
  except
    debug('  GetXMLFormByID' );
  finally
    if txt<>nil then txt.free;
    if q<>nil   then q.free;
  end;
end;


Аватара пользователя
Иван
Интересующийся
Сообщения: 239
Зарегистрирован: 22 дек 2018, 14:16
Откуда: Kiev
Благодарил (а): 34 раза
Поблагодарили: 74 раза

Реальное имя поля в окне "Имя поля" и поиск по полю, форме

Сообщение Иван » 25 дек 2020, 11:36

Немного подправил для улучшения однозначности поиска.

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

function RP(const SS, OP, NP: string): string;
begin
    result:=StringReplace(SS, OP, NP,[rfReplaceAll]);
end;

function GetFromTString ( txt: TStrings; s: string; n, k: integer): string; // получение данных и строки где есть определенный атрибут
var i, j: integer;
begin
  try
   result:= '';

            if (n>0) then
            if (k=0) or (k>n) then
            if n<=txt.count then
            begin
               if k=0 then k:= txt.count-1;

               for i:=n to k do
               begin
                 j:= UTF8Pos( utf8lowercase(s), utf8lowercase(txt[i]), 1);
                 if j>0 then
                 begin
                    result:= trim(RP(UTF8Copy(txt[i], j+utf8length(s), utf8length(txt[i])),'''',''));
                    break;
                 end;
               end;
            end;
  except
     debug(' GetFromTString ' );
  end;
end;


// получение номера строки где есть определенный атрибут
function GetNumFromTString ( txt: TStrings; s: string; n: integer): integer;
var i: integer;
begin
  try
            result:= -1;
            s:= utf8lowercase(s);

            if txt.count>0 then
            if n<=txt.count then
            for i:= n to txt.count-1 do
            if UTF8Pos( s, utf8lowercase(txt[i]), 1)>0 then
            begin
                result:= i;
                break;
            end;
  except
     debug(' GetNumFromTString ' );
  end;
end;


function GetFieldCaptionFromXML ( txt: TStrings; s: string): string;
var n: integer;
begin
           result:='';
           n:= GetNumFromTString (txt, 'Id = ' + s, 10);
           if n<>-1 then
           result:= GetFromTString (txt, 'FieldName = ', n+1,0);
end;

{@function
OrigName=GetFormAndField
Name=GetFormAndField
Args=s
Result=s
Group=SQL
Description= Возвращает название формы и поля на котороом размещено поле
с реальным именем в качестве аргумента.
GetFormAndField ('f1234'): string;
 @}

function GetFormAndField (s: string): string;
 var q: TdxSqlQuery; ss, sss: string; lg: longint; i,j: integer; txt: TStringList;
begin
  result:= '';
  s:= trim(RP(vartostr(s),'f',''));

  if s='' then exit;
  try
        txt:=TstringListUTF8.Create;
        q:=sqlselect('select * from DX_forms');
        q.open;
        if not q.eof then
        begin
           q.movefirst;
           for i:= 0 to q.recordcount-1 do
           begin
              txt.text:= q.ass['form'];
              for j:= 0 to txt.count-1 do
              txt[j]:=txt[j]+' ';

              if UTF8Pos('Id = ' + s + ' ',txt.text,10)>0 then
              begin
                 result:= 'форма="' + GetFromTString (txt, 'FormCaption = ', 1,0) + '" поле="'+ GetFieldCaptionFromXML(txt,s) +'"';
                 debug(result);
                 exit;
              end;
              q.MoveNext;
           end;
        end;
  except
    debug('  GetXMLFormByID' );
  finally
    if txt<>nil then txt.free;
    if q<>nil   then q.free;
  end;
end;


Вернуться в «Предложения по развитию проекта.»