851

(11 replies, posted in Russian)

sibprogsistem wrote:

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

Чисто из любопытства: зачем нужен id перед добавлением записи? Замечу, что для многопользовательских БД это может привести к ошибке из-за попытки добавления двух записей с одинаковыми ID.

852

(5 replies, posted in General)

CDB wrote:

This was the article I was thinking of.

https://createmyvisualdatabaseapp.blogs … -post.html

This article is about writing object-oriented code. Forms are not dynamic, they are created in the designer of the application. But the handler code is the same for all forms.

853

(5 replies, posted in General)

Nothing's Impossible (c) DM


However, in practice I have created custom toolbars and menus from the program, including customizing button images. This made sense, since it allows you to abandon the programming of this functionality in each new project.


In some projects, where the number of forms has exceeded a hundred, I thought about creating dynamic forms, which is quite justified if their functionality is the same type, and the appearance is uniform. But in practice, there are many conventions that require writing code and non-standard placement of interface elements.


Also, I am not a supporter of 100% customization of the appearance of the application, as this will make it difficult to write a user manual for the final product. The UX/UI designer should be responsible for the arrangement of the elements.

https://www.imagetext.ru/pics_max/imagetext_ru_30633.jpg

855

(15 replies, posted in General)

sibprogsistem wrote:
Destiny wrote:

My photos are stored in folders by years and I would like a full preview of his photos to have a view of all the saved photos, a kind of viewer like the attached photo.

в MVD нет (DirectoryListBox, FileListBox
пример с картинками из папки  http://myvisualdatabase.com/forum/misc. … download=1

Excellent preparation for the program. I would advise a topicstarter to use it in order to
1. Create thumbnails of images stored on your hard drive and write them to the database
2. To view thumbnails, use the algorithm for creating tiles of image on the form.
3. Add an adaptation of the placement of tiles when resizing the form.


When you use Explorer, the operating system does the same: it creates thumbnails of images and writes them to the local mini-database.

sibprogsistem wrote:

помещаю на форму картинку на кортику с верху ставлю кнопку и кнопка становиться прозрачной..
вопрос:
такой эффект только в windows11 ?

Приложите, пожалуйста, картинку - врага нужно знать в лицо )))


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

sibprogsistem wrote:

он за деньги предлагал, но при первом ознакомлении мне и с деньгами не захотелось ))) теперь сомневаюсь в своем решении

в 90% случаев доработка переходит в разработку с нуля, так вносить какие-либо правки в чужой код - неблагодарное занятие )))  но заказчику это объяснить сложно, проще отказаться, либо продолжать на условиях почасовой оплаты по фактическим затратам времени.

Или выполнить команду:

cmd /c "ftype http" >ans.txt

Результат будет записан в файле ans.txt, например:

http="C:\Program Files\Internet Explorer\iexplore.exe" %1
adiziktdy wrote:

Как выход: сделала bat-файлы для каждого браузера и возможность выбора пользователем.

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


https://ru.stackoverflow.com/questions/ … -умолчанию
https://progi.pro/kak-nayti-brauzer-po- … 10-1311932

Крикнул так крикнул....

Смотри, сейчас как набегут страждущие с неоткомментированным кодом и компонентами с именами по умолчанию )))

This problem can be solved if you add a table with a field of the "Date" type and one record, and then use this field in the SQL-query, Including in calculated fields.


For example:


Table - Config
Field - CurrentDate

ifnull(employee.dateHireMod,0) + 
case when round((julianday( select currentDate from config ) - julianday(employee.dateHire))/(365/12)) > 180 then '20'
when round((julianday( select currentDate from config ) - julianday(employee.dateHire))/(365/12))> 120 then '15'
when round((julianday( select currentDate from config ) - julianday(employee.dateHire))/(365/12))> 60 then '10'
when round((julianday( select currentDate from config ) - julianday(employee.dateHire))/(365/12))> 12 then '5'
else '0'
end

862

(3 replies, posted in General)

Cleanup  - https://vk.com/@createmyvisualdatabaseapp_en-cleanup

Модульное программирование в My Visual Database -  https://createmyvisualdatabaseapp.blogs … abase.html

zenja wrote:

Я встречал очень даже жизнеспособный проект использующий такую схему работы, причем количество членов данного сообщества имеет строго ограниченное число. Попасть новенькому туда можно только если кто-то из стареньких выйдет из клуба, что случается весьма редко.

Проект называется MI6?  smile

zenja wrote:

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

Интересный вариант, я видел подобные предложения от разных стартапов, но ни разу не видел, чтобы это работало в реальной жизни.

vovka3003 wrote:

сотка...

информация с сайта https://theins.ru/ ?  )))

866

(3 replies, posted in Russian)

Exnout wrote:

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

А что вас ещё печалит? Можно в стихах )))

867

(3 replies, posted in Russian)

abgroup-artur wrote:

ПРосматривал предыдущие темы, раньше была сортировка как в GRID. Теперь пропала, куда?

Это как? Дерево - это дерево, оно не сортируется. Оно строится по уровням вложенности. Ссылочку на "предыдущие темы с сортировкой" дайте, плиз.

868

(5 replies, posted in General)

Rahan57 wrote:

Hello, I would like to calculate the difference between two mileage, one starting km and one arrival km.
What's the best way to go.

Rahan57

look for a solution on this forum or at least create a separate topic for a new question...

869

(5 replies, posted in General)

madbit71 wrote:

Hi, thanks for the quick reply.
When I open the edit form, the fields are not filled in with the data of the record chosen in the tabelgrid.
I enclose a rudimentary example.
Thanks

First, you need to determine the ID of the edited post, in your case like this:

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
  tmpID : integer;
begin
  tmpID := SQLExecute('SELECT id FROM employees WHERE uniqueid = '+ IntToStr( form1.TableGrid1.cell[ 1, form1.TableGrid1.SelectedRow ].asInteger) );
  editemployees.ShowRecord( 'employees', tmpID );
end;

P.S. In fact, the record ID is ALWAYS present in the table, which is created through the Settings property or the "Search" button. But when the table is displayed, this field is hidden from the user and is available through the property dbItemID.  Of course, if you are using an SQL query, then the ID fields may not be in results.

870

(5 replies, posted in General)

No scripts are required for the buttons for adding, editing and deleting records. You just need to configure the Action property

871

(5 replies, posted in General)

If by unique identification code you mean the ID of the record, then use the method ShowRecord( <table name>, <ID> ) to display the edit form:

frmEditForm.ShowRecord( 'payment', frmForm.TableGrid.cell[ 3, frmForm.TableGrid.SelectedRow ].asInteger )

872

(23 replies, posted in Russian)

senseyesenseye1983 wrote:

Подскажите пожалуйста есть ли возможность сделать заставку вначале когда щелкаешь на exe. так как до момента подключения к базам данных примерно сек 10-15 - и эти 10-15 сек можно сделать так чтоб пользователь знал что при нажатии на ярлык запуска программы через 2-3 сек появлялось окно которое информирует о загрузке - когда происходит загрузка формы frmlogin окно приветствия загружается ?

Какую СУБД вы используете? Если SQLite, то подключение к ней и инициализация компонентов произойдет до отображения главной формы приложения (из которой и делают заставку). Если MySQL, то можно отключить автоматическое подключение в БД и тем самым уменьшить время до отображения формы (заставки).

То есть заставку можно добавить и отображать её до подключения к БД MySQL, но после того, как в память загрузится EXE + DLL с картинками + создадутся ВСЕ формы приложения. То есть для начала нужно выяснить, что в вашем проекте происходит за эти 10-15 секунд:


1. Время загрузки  exe-файла сократить сложно, разве что утилитой, которая сжимает exe, а затем распаковывает его прямо в памяти. Но даст ли это существенное ускорение во времени загрузки сказать не могу.

2. DLL с картинками (это те картинки, которые вы добавляете при создании проекта) можно исключить, выполняя загрузку изображений из файлов или базы после запуска приложения.

3. С формами сложней, но оптимизация тоже возможна: например, создание форм с помощью программного кода после запуска приложения. Правда, при этом теряется вся прелесть визуального программирования при разработке приложения.

4. При подключении к базе данных происходит открытие датасетов и инициализация всех компонентов Combobox и TableGrid. Если СУБД MySQL, то подключение можно выполнить программно после отображения заставки. C SQLite тоже можно извратиться, если база по умолчанию будет пустая, затем программно подключиться к рабочей базе, а все запросы писать через SQL, но это ад.

Alexandr wrote:

Спасибо! Но в этом примере создаются новые файлы резервной копии, а не обновляется уже созданный. Не знаете,как это можно сделать?

Это делается намеренно, так как сбой может быть обнаружен не сразу. Несколько копий позволят вам найти и восстановить рабочую базу, а если резервная копия будет каждый раз перетираться, то она также может оказаться испорченной.

senseyesenseye1983 wrote:
DriveSoft wrote:

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


Либо рабочий файл базы данных модифицировать вручную, чтобы его структура соотвествовала структуре новой версии проекта, это можно сделать например программой SQLite Studio.


Еще один вариант, это записать в базу данных номер ее версии, а в проекте написать скрипт, который будет обновлять структуру БД до необходимой версии, удаляя или добавляя таблицы и поля.

А как выглядит этот скрипт? Пример для MySQL

Выглядеть скрипт может по разному. Тут все от ваших желаний и потребностей зависит.. Суть его в том, чтобы последовательно выполнить определенные SQL-команды, которые приведут структуру базы к нужному виду, например:

-- добавление поля
-- ALTER TABLE <имя таблицы> ADD <имя поля> <тип> DEFAULT <значение по умолчанию>;
ALTER TABLE car ADD door INT DEFAULT NULL;
-- удаление поля
-- ALTER TABLE <имя таблицы> DROP COLUMN <имя поля>;
ALTER TABLE car DROP COLUMN door;

Задумал в очередную документацию по MVDB внести сведения об иерархии классов визуальных компонентов. Что-то я знаю, но что-то осталось за пределами моего понимания или вызывает сомнения, потому что в Delphi имеются стандартные классы с такими же названиями. Так как разработчик пока тут не появляется, буду благодарен за любую информацию, включая предположения и догадки ))))


TObject
+ TPersistent
| + TComponent
| | + TControl
| | | + TWinControl
| | | | + TCommonCalendar
| | | | | + TDateTimePicker
| | | | |   + TdbDateTimePicker (*)
| | | | + TCustomControl
| | | | | + TCustomGroupBox
| | | | | | + TGroupBox
| | | | | |   + TdbGroupBox (*)
| | | | | + TCustomPanel
| | | | | | + TPanel
| | | | | |   + TdbPanel (*)
| | | | | + TCustomGrid
| | | | |   + TCalendar
| | | | |   | + TdbCalendar (*)
| | | | |   + TCustomDrawGrid
| | | | |     + TDrawGrid
| | | | |       + TStringGrid
| | | | |         +TStringGridEx
| | | | |           + TdbStringGridEx (*)
| | | | |             + TdbTreeView (*)
| | | | + TCustomListControl
| | | | | + TCustomListControl
| | | | |   + TCustomCombo
| | | | |     + TComboBox
| | | | |       + TdbComboBox (?)
| | | | + TCustomEdit
| | | | | + TEdit
| | | | | | + TdbEdit (?)
| | | | | |   + TdbEditCount (?)
| | | | | + TCustomMemo
| | | | |   + TMemo
| | | | |   | + TdbMemo (?)
| | | | |   + TCustomRichEdit
| | | | |     + TRichEdit
| | | | |       + TRichEditEx
| | | | |         + TdbRichEdit (*)
| | | | + TButtonControl
| | | | | + TCustomCheckBox
| | | | | | + TCheckBox
| | | | | |   + TdbCheckBox (?)
| | | | | + TCustomButton
| | | | |   + TButton
| | | | |     + TdbButton (*)
| | | | + TTabSheet
| | | | | + TdbTabSheet (*)
| | | | + TCustomTabControl
| | | | | + TPageControl
| | | | |   + TdbPageControl (*)
| | | | + TScrollingWinControl
| | | | | + TCustomForm
| | | | | | + TForm
| | | | | |   + TAForm (*)
| | | + TGraphicControl
| | | | + TImage
| | | |   + TdbImage (*)
| | | |   + TdbImageDataBase (?)
| | | | + TCustomLabel
| | | |   + TLabel
| | | |     + TdbLabel (*)


- TdbFileToDataBase (?!)
- TdbMap (?!)

(*) - уверен
(?) - не уверен
(?!) - не знаю