1

(6 replies, posted in Script)

Добрый день!
Подскажите, как сделать так, чтобы при наборе текста в поле все начиналось с заглавной буквы?
Пробовал использовать маску ввода >L<, но как я понял, здесь жестко указывается количество символов. А мне необходимо вводить текст неограниченного по символам.
Спасибо!

2

(15 replies, posted in Russian)

dazzleqq wrote:

Можно и так (обновленный вариант Derek) big_smile:D:D
P.S. Возможно неправльно, но за то работает) (лучше конечно DateTimerPicker использовать и обновлять не кнопкой, а скриптом, дабы лишними кнопками не засорять форму)

Большое человеческое вам спасибо!

3

(15 replies, posted in Russian)

k245 wrote:

Тогда нужно добавить поле в таблицу с параметрами системы (а если такой таблиц нет, то создать), и записывать туда дату последнего обновления.

Не могли бы Вы пример прислать?
1.Я создал в таблице БД Main поле dateupd (ДАТА/ВРЕМЯ).
2. На основной форме вынес DatePicker с привязкой к полю dateupd БД Main.
3. На форме Frm_Import на кнопке "Импортировать в базу" создал событие Frm_Import_Button3_OnAfterClick.
А на самом главном я ничего сделать не могу. В скрипте пишу "FrmMain.dupdate.DateTime := ...; (((

4

(15 replies, posted in Russian)

k245 wrote:

Если есть необходимость хранить эти данные в базе, то дальше нужно немного теории почитать:
Про БД, таблицы и поля - https://k245.ru/mvdb/relyatsionnye-bazy-dannyh.html
Про SQL - https://drive.google.com/file/d/1BK2H9q … drive_link
Чтобы дальнейшие объяснения были вам понятны.


Но могут быть и другие решения, не связанные с SQL, например, сохранять эту дату в файле настройки. Settings.ini


Тут все зависит от бизнес-задачи, для которой эта самая дата нужна. А про задачу вы ещё ничего не рассказали: для кого нужна эта дата, что он с ней будет делать и как эта дата влияет на процесс его работы?


Попробуйте составить ТЗ (https://k245.ru/bez-rubriki/proektirovanie.html), работать станет намного легче smile

Спасибо за все советы. Дата необходима для визуального контроля. Есть две программы: одна с интерфейсом для пользователя, другая для администратора. Администратор обновляет БД, а пользователь открывая основную форму должен видеть и понимать какой "свежести" данная БД и давно ли ее обновляли. Как-то так. Обновил администратор базу, в таблице появились новые записи или наоборот - удалены, у пользователя есть кнопочка "обновить таблицу", он жмет и видит, что данные были обновлены администратором полчаса назад, как раз в тот промежуток времени пока программа была открыта пользователем и была свернута (неактивна). Вот как-то так.

5

(15 replies, posted in Russian)

k245 wrote:
Vickus wrote:

Возможно не правильно сформулировал. Сохранять данные по дате обновления не требуется, гланое, чтобы было видно когда в последний раз она обновлялась. Если невозможно без сохранения, то значит необзодимо создать поле?

Если нужно ТОЛЬКО В МОМЕНТ ОБНОВЛЕНИЯ, тогда достаточно на форме (Form1)  метку разместить (labUpdateDate).
Чтобы на метке появилась надпись, присвойте свойству caption нужное значение:

procedure Form1_buttonabout_OnAfterClick (Sender: TObject);
begin
   Form1.labUpdateDate.Caption := 'Last Updated On:  ' + datetostr(now) + '   At:  ' + timetostr(time);
end;

Про метку и её свойства можно почитать здесь: https://k245.ru/mvdb/metka-tdblabel.html


P.S. Как только вы закроете программу, информация о дате обновления исчезнет. И при последующем запуске в метке ничего отображаться не будет. Это я так, на всякий случай озвучиваю )))

Большое спасибо! Я точно также сделал чуть раньше, все так и получилось. А чтобы дата сохранялась, необходимо в БД добавить поле типа dateupddb? И вместо лэйбла текстовое поле? А что дальше подскажете?

6

(15 replies, posted in Russian)

k245 wrote:
Vickus wrote:
k245 wrote:

Не, ну народ обленился.... Одну строчку в коде заменить не могут.
https://myvisualdatabase.com/forum/view … hp?id=6262

Я не программист, а самоучка. Пытаюсь разобраться. Сам пытался поменять, как Вы выразились, строчку, но ничего не вышло, поэтому и прошу помощи. А Вам вместо того, чтобы хейтить лучше бы проявить доброжелательность по примеру Дерека, который постоянно не отказывает и идет на помощь!

Не проблема: если вы продемонстрируете свои попытки в виде вашего проекта, в котором какая-то часть не работает, я вам лично всё подправлю.


И где вы тут увидели хейтерство? А вот культуру общения на форуме - да, насаждаю ))
https://sun9-79.userapi.com/impg/I-vTwMJbe1Ukj5ZEBzN8cWRIPwohncN2cjWRhA/0PhoO9gVGS0.jpg?size=1200x595&amp;quality=96&amp;sign=d5bdfc8180fb10df651c7f37fb4ecbeb&amp;c_uniq_tag=d-1KiMOXHUVwUXE_EMUj4w3KxLpSDdeUpt7V0aj3AVI&amp;type=album


P.S. Что касается вашей задачи, то нужно правильно формулировать запрос. Вам не просто нужно, чтобы где-то на форме отображалась дата обновления после загрузки. Скорей всего вам необходимо, чтобы эта дата запоминалась в базе и отображалась всё время. А вот обновлялась после того, как загрузили данные из Excel, верно?

Возможно не правильно сформулировал. Сохранять данные по дате обновления не требуется, гланое, чтобы было видно когда в последний раз она обновлялась. Если невозможно без сохранения, то значит необзодимо создать поле?

7

(15 replies, posted in Russian)

k245 wrote:

Не, ну народ обленился.... Одну строчку в коде заменить не могут.
https://myvisualdatabase.com/forum/view … hp?id=6262

Я не программист, а самоучка. Пытаюсь разобраться. Сам пытался поменять, как Вы выразились, строчку, но ничего не вышло, поэтому и прошу помощи. А Вам вместо того, чтобы хейтить лучше бы проявить доброжелательность по примеру Дерека, который постоянно не отказывает и идет на помощь!

8

(15 replies, posted in Russian)

derek wrote:

Привет
Это помогает?
Derek.

Дерек, большое спасибо за Вашу помощь! А возможно тоже самое, но чтобы не всплывало окно сообщения, а именно на форме в лэйбле или текстовом поле такое же отображалось? Еще раз благодарю!

9

(15 replies, posted in Russian)

Добрый день!
Прошу помощи у знатоков. Есть форма загрузки данных из файла Excel. Подскажите, как можно сделать так, чтобы после нажатия кнопки "Загрузить данные" на основной форме с таблицей, в которую как раз и загрузились данные из файла, отображалась надпись типа "Последнее обновление БД: 28.09.2023 08:16".
Благодарю!

10

(2 replies, posted in Russian)

derek wrote:

Привет Vickus
Ознакомьтесь с прикрепленным примером различных вариантов форматирования числовых столбцов.
Это применимо независимо от того, относится ли это к вычисляемым полям или нет.
Regards,
Derek.
.

Please have a look at the attached example for the various formatting options for number columns.
This applies whether it refers to calculated fields or not.

Дерек, благодарю за очередную ПОМОЩЬ! Все получилось!

11

(2 replies, posted in Russian)

Добрый день!

Помогите, пожалуйста, решить проблему с отображением в таблице чисел из вычисляемого поля в денежном формате.
Дело в том, что в БД есть поле с вычисляемым значением (см. вложение), точнее итогом main.price * main.zakaz (цена - денежный формат, умножается на количество - целое число). В таблице полученное число отображается без запятой. Как сделать отображение с запятой и двумя знаками после нее?
Спасибо всем, кто решит мне помочь!

derek wrote:

Привет Vickus,
Использование фильтра tablegrid работает лучше всего, если условие всегда истинно. Если оно является переменным, то лучше использовать кнопки «поиск» либо с предварительно установленным условием фильтра (см. Приложение), либо, что еще более гибко, было бы использовать поле со списком.
Нет необходимости в сценарии
С уважением,
Derek.

Огромное спасибо Дерек!
Воспользовался Вашим советом, отлично все получилось!

Добрый день!
Подскажите, в настройках компанентов таблицы есть возможность установки фильтра (п.3). Возможно ли данный фильтр использовать в скрипте и если да, то как сделать, чтобы была возможность отключения данного фильтра кнопкой, типа "Показать все записи".
Заранее всех благодарю!

2. И еще вспомнилось. Есть вычисляемое поле в денежном формате. Почему-то в таблице отображается как целое число, без запятой. Как исправить данную проблему. Еще раз благодарю.

k245 wrote:

Да вам не пример тут нужен, а скрипт, который вычисляет итоговую сумму в зависимости от установленных чекеров в таблице.


Вы вручную чекеры что ли ставите и не сохраняете их состояние в базу? Я бы рекомендовал сохранять информацию об оплате в базу, а колонку "Сумма" нужно сделать вычисляемой, в зависимости от оплаты. Тогда и скрипт не понадобится.


P.S. Эффективней спрашивать не  о том, как работает функционал компонентов (это можно прочитать в инструкциях), а о том, как правильно решить бизнес-задачу.


На форме записи есть чекбокс. Хотелось бы, чтобы при установке чекбокса "Ранее включен в счет" в итоговой таблице на главной форме это значение имело знак минус и в футере из суммы вычиталось.

15

(0 replies, posted in Russian)

Добрый день!
Уважаемые знатоки и мастера своего дела!
Помогите с решением задачи. Необходимо, чтобы значение одного из полей в таблице менялось на отрицательное при установке чекбокса.
Спасибо!

Добрый день!
Помогите примером, пожалуйста. Есть таблица с данными. При открытии записи есть возможность поставить галочку "Запись включена в счет" и кнопка Сохранить. Необходимо, чтобы после установки данной галочки и сохранении число приобретало отрицательное значение, чтобы данное отрицательное значение вычиталось из суммы в футере.

pavlenko.vladimir.v wrote:
Vickus wrote:

Добрый день!
Помогите, пожалуйста, с примером. Необходимо при клике на чекбокс в таблице, чтобы строка окрашивалась в любой цвет.
Спасибо!

procedure Form1_TableGrid1_OnEditAccept (Sender: TObject; ACol, ARow: Integer; Value: String; var Accept: Boolean);
var
i,CC: integer;
begin
  if (Form1.TableGrid1.Cell[ACol,ARow].AsBoolean = False) then
  begin
     CC := randomColor;
     for i:=0 to Form1.TableGrid1.Columns.Count-1 do
         Form1.TableGrid1.Cell[i,ARow].Color := CC;
  end else
    for i:=0 to Form1.TableGrid1.Columns.Count-1 do
         Form1.TableGrid1.Cell[i,ARow].Color := clWhite;
end;

function randomColor: integer;
var
RR:integer;
begin
  Randomize;
  RR := Random(7);
  CASE RR OF
  1: Result := clFuchsia;
  2: Result := clGray;
  3: Result := clGreen;
  4: Result := clNavy;
  5: Result := clTeal;
  6: Result := clAqua;
  7: Result := clHighlight;
  end;
end;

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  if (SQLExecute('SELECT COUNT(id) FROM template') = '0') then
     SQLExecute('INSERT INTO template(name)VALUES("Первое поле"),("Второе поле"),("Третье поле"),("Четвертое поле")');  
end;

СПАСИБО!!!

Добрый день!
Помогите, пожалуйста, с примером. Необходимо при клике на чекбокс в таблице, чтобы строка окрашивалась в любой цвет.
Спасибо!

19

(48 replies, posted in Russian)

sparrow wrote:
Vickus wrote:

как реализовать удаление выделенными чекбоксами строк таблицы


procedure frm_main_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
    for vi := 0 to frm_main.table_main.rowcount -1 do
    begin
      if frm_main.table_main.cell[1,vi].AsBoolean = true then
        begin
          sqlexecute('delete from main where id = "'+inttostr(frm_main.table_main.row[vi].id)+'"');
          frm_main.table_main.cell[1,vi].AsBoolean := false;
        end;
    end;
    frm_main.table_main.dbUpdate;
end;

БЛАГОДАРЮ ЕЩЕ РАЗ!!!!!

20

(48 replies, posted in Russian)

Vickus wrote:
sparrow wrote:

Вот первая версия с устраненной ошибкой.
как видите работат.

ОГРОМНОЕ ВАМ СПАСИБО!!!!

Не сочтите за наглость, но не могли бы Вы подсказать как реализовать удаление выделенными чекбоксами строк таблицы

21

(48 replies, posted in Russian)

sparrow wrote:

Вот первая версия с устраненной ошибкой.
как видите работат.

ОГРОМНОЕ ВАМ СПАСИБО!!!!

22

(48 replies, posted in Russian)

sparrow wrote:

покажите что вы исправили а лучше еще раз программу исправленую

23

(48 replies, posted in Russian)

sparrow wrote:

Дело не в программисте,  а в желании научиться.
Сузим круг подозреваемых.


cell[0,vi]
и 
cell[0,vi]

Найдите здесь http://myvisualdatabase.com/help_ru/scr … egrid.html
свойство Cell[x,y]. Зайдите в подробнее.
Узнайте что такое первый и второй аргумент и сверьтесь с вашей таблицей table_main.
Подсказка: счет колонок и строк в таблице начинается с 0.

Как я понимаю из вашего урока, в таблице колонка с чекбоксами имеет номер 1? Я исправил, но все равно не работает :-( Что-то не так понял снова?

24

(48 replies, posted in Russian)

sparrow wrote:
procedure frm_main_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
  sqlexecute('update main set printflag = 0');
  for vi := 0 to frm_main.table_main.rowcount -1 do
    begin
      if frm_main.table_main.cell[0,vi].AsBoolean = true then
        begin
          sqlexecute('update main set printflag = 1 where id = "'+inttostr(frm_main.table_main.row[vi].id)+'"');
          frm_main.table_main.cell[0,vi].AsBoolean := false;
        end;
    end;
end;

Вот в этом кусочке кода две ошибки. Внимательно проверьте, что и где вы проверяете.
Нельзя просто копировать код.

Простите, я не программист, просто пытаюсь разобраться, поэтому ищу информацию и пытаюсь что-то под свои нужды подстроить. Так и не понял в чем ошибки? Не затруднит ли Вас либо указать мне на них, либо проект исправленный обратно выложить? Спасибо заранее огромное!

25

(48 replies, posted in Russian)

derek wrote:

Привет
Здесь та же логика, что и в существующем скрипте (см. вложение).
Derek.
.
It's the same logic as in the existing script.

Можете посмотреть, что неверно делаю для распечатки в отчете выбранных в таблице позиций. Очень нужно. Спасибо!