Мои вкусняхи

Сводный список записей блога

--->>>> Сводный список записей блога <<<<---

18 января 2026

База данных для деталек

Когда у меня деталек стало достаточно много, возникло несколько вопросов.
Например, как хранить?
И как учитывать то, что есть?

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

А вот вопрос с учетом несколько сложнее. 

Я вел учет в большой эксельке. Это было просто и почти удобно. но не хватало внятной автоматизации. Которая за собой тянет написание макросов, возможно, рисование формочек. и все это на Visual Basic-е.

Я попробовал сделать базу в MS Accees. Саму базу сделать легко. Но вот интерфейс нормальный точно так же нужно рисовать на Visual Basic-е. Мне было влом. 

Оказалось, что проще (на самом деле нет) сделать что то на коленке самодельное. У меня была заготовка движка файловой базы данных, вот я ее и использовал, доведя до ума. Да, весь интерфейс точно так же нужно писать руками, но не на бейсике с приколами MS, а на старом добром Delphi...

И эти мысли крутились в голове несколько лет. И прошлым летом-осенью, пока я жил вне дома, по вечерам получилось что то нарисовать.

Соответственно, кому интересно мое творение - можно читать дальше.

Обозвал я программку просто - Electronic components database - ECDB.


Создание базы. 

В меню программы необходимо выбрать команду создания базы


Программа предложит ввести имя основного файла базы данных. Желательно базу создавать в отдельном каталоге, поскольку это многофайловая БД и там будет порядка 80 файлов.

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

Категории деталей.

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


Группы и категории можно в некоторых пределах перемещать по дереву:


Для каждой категории можно задать набор присущих этой категории параметров:

  • Название категории детальки - оно будет отображаться в дереве
  • Тип и подтип детальки - это словари (например, тип: транзистор полевой, подтип: N-MOS)
  • Числовой номинал* детали и его базовая единица измерения
  • Точность номинала в процентах или ppm
  • Текстовое наименование* детали
  • Действующее напряжение для детали
  • Рабочий ток детали
  • Рабочая мощность детали
  • Тип монтажа детали
  • Тип (типоразмер) корпуса детали
  • Размеры детали (ширина х высота х глубина)
  • Текстовое описание
  • Примечание
  • Производитель
  • Продавец
  • Место хранения детали
  • URL - ссылка на деталь в интернете
  • ссылка на Datasheet (web или локальная на диске)
  • признак паянной (б/у) детали
  • Возможность прикреплять до трех изображений** к каждой записи
* Можно выбрать отображение или числового номинала, или текстового названия
** Изображения должны быть сохранены на локальном диске, в БД сохраняется только путь к изображению


Единицы измерения, Типы монтажа, Типы корпусов, Типы деталей, Подтипы деталей, Места хранения, Уточнения мест хранения, Продавцы, Производители - сохраняются в отдельных словарях и доступны для выбора при добавлении/редактировании информации о детали.


При выборе необходимой категории в правой части окна появляется список деталей этой категории, а в нижней - более подробная информация по выбранной записи:


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

Размеры колонок можно менять, колонки перетаскивать в нужную позицию.

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


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


Так же во всех опциях фильтрации есть пункт меню "Без фильтрации/Сбросить фильтр", который отключает фильтрацию только по этой колонке, если она была включена, и пункт "Сбросить все фильтры", который, соответственно, сбрасывает фильтры по всем колонкам.

Фильтр по значениям словаря дополнительно имеет кнопки "Выделить все" и "Инвертировать выбор". Применение фильтрации по выбранным значениям словаря происходит при нажатии кнопки "Применить".


Фильтр по логическим значениям срабатывает сразу, при выборе соответствующего пункта.

Фильтры по числовым и текстовым значениям, после выбора соответствующего пункта меню, открывают дополнительную панель для ввода значений:


Применение фильтрации происходит при нажатии кнопки "Применить".

Для полей, у которых есть единица измерения, можно выбрать приставку (множитель) для значения:


Если нажать Esc или щелкнуть мышкой в любом месте программы вне панельки фильтра - панелька закроется, фильтрация не изменится.

Добавление/исправление/удаление записей.

Команды доступны как из основного меню, так и из контекстного:


При добавлении новой записи открывается форма добавления/редактирования записи:


Набор полей на форме зависит от настроек категории.

Всего полей существует 5 видов:

  • Текстовые одно- и многострочные
  • Числовые (с единицей измерения)
  • Словарные
  • Логические
  • Изображения

Словарные значения вручную ввести нельзя, необходимо по кнопке [...] перейти в соответствующий словарь и выбрать (или добавить, а потом выбрать)  нужное значение.

Числовые значения (номиналы) вводятся в соответствующие форматные поля, диапазон числового значения - от 0,001 до 1 000 000,000. Плюс в выпадающем списке множители единицы измерения для введенного значения

Текстовые поля - самые простые - информация туда вносится непосредственно с клавиатуры или вставляется из буфера.

Поле URL - подразумевает, что туда вносится интернет-ссылка.

Поле Datasheet - подразумевает, что туда вносится интернет-ссылка либо локальный путь* на ПК.

Логические (на самом деле такое поле одно - признак б/у-детали) - просто стандартный переключатель Да/Нет.

Изображения. 

Изображения не хранятся в базе данных, сохраняются лишь ссылки* на файлы изображений на ПК. В каждую запись можно добавить до трех ссылок на изображения. 

Каждое поле для изображения содержит две кнопки - "Открыть" и "Вставить", если изображения нету, или кнопку "Удалить", если в это поле изображение загружено


Кнопка "Открыть" позволяет выбрать файл на локальном диске ПК и сохранить ссылку* на этот файл. Поддерживаются файлы следующих типов: BMP, JPEG, PNG, GIF(без анимации).

Кнопка "Вставить" позволяет вставить изображение из буфера обмена. При этом изображение будет сохранено на локальном диске, в каталоге с базой данных, в подкаталоге Images.

Кнопка "Удалить" - удаляет ссылку на изображение. Если это было изображение, сохраненное в подкаталоге Images базы данных, то это изображение будет удалено с локального диска, если на него не будет ссылок в других записях базы данных.

*Все ссылки на файлы на диске ПК по возможности сохраняются в базе данных относительно расположения самой базы данных (при условии, что это ссылки на файлы, расположенные на том же логическом диске, что и сама БД). Это было сделано для того, что бы можно было легко перемещать базу данных с сопутствующими файлами в любое другое место.

Просмотр изображений

Клик по изображению открывает его в отдельном окошке. Колесиком мыши (или кнопками +/- на доп. клавиатуре) можно менять масштаб изображения, левой кнопкой мыши или стрелками на клавиатуре - перемещать большое изображение в окне.

Словари.

Заполнение и использование словарей - целиком на усмотрении пользователя.

В базе данных используется три типа словарей:

  • Простые словари
  • Двухуровневые словари
  • Трехуровневые словари

Простые словари - просто список каких-либо данных.

Это следующие словари:

  • Продавцы 
  • Производители
  • Единицы измерения
  • Места хранения


Так, выше приведен пример словаря мест хранения.

Двухуровневые словари - значения в этих словарях привязываются к родительскому набору данных.

Это следующие словари:

  • Уточнение мест хранения - родительский набор данных: словарь "Места хранения"
  • Типы деталей - родительский набор данных: перечень категорий деталей
  • Типы монтажа - родительский набор данных: перечень категорий деталей

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

В примере мест хранения и уточнений мест  - можно указать, что часть коробок хранится в шкафу, а часть в ящике стола....


В левой части добавляется запись словаря, а в правой эту запись нужно "привязать" хотя бы к одной позиции родительского набора. Кнопка "Сохранить" будет доступна, если каждая подчиненная запись будет привязана хотя бы к одной родительской.

Одна запись подчиненного словаря может быть привязана и к нескольким родительским записям... Так, в примере выше видно, что Red small box может использоваться как с Cabinet, так и с Desk drawer. 

И тогда при выборе для конкретной детали места хранения "Маленькая красная коробка" можно уточнить, какая это из маленьких красных коробок - та, что в шкафу или та, что в ящике стола.

Трехуровневые словари. Значения в этих словарях являются подчиненными для второго уровня, а второй уровень - первому. 

Это два словаря :

  • Корпуса деталей - подчинен двухуровневому словарю Типы монтажа
  • Подтипы деталей - подчинен двухуровневому словарю Типы деталей.

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

Для чего так сделано? Например:
Для транзисторов тип монтажа SMD - будут свои корпуса - SOT23, D-PACK и т.д., для монтажа в отверстия - свои - TO-92 и т.д.
А для резисторов с типом монтажа SMD - корпуса 0805, 1206 и т.д.

Так же и для подтипов деталей.

Пример для транзисторов:


К категории транзисторов "привязано" 2 типа - биполярные и полевые.
Подкатегорию - тип проводимости нужно выбрать для каждой категории.

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

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



Импорт данных из CSV.

В базе предусмотрена возможность импорта данных из электронных таблиц (Excel и т.д), сохраненных в CSV-формате. 


Для импорта в меню компонента необходимо выбрать пункт "Импорт из CSV"



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

Ширину колонок можно менять для удобства просмотра значений.


Щелчок по заголовку колонки позволяет выбрать тип данных в этой колонки


Строки и колонки, которые не импортируются - затенены и недоступны для исправления. 

Если в CSV-файле в первой строке (заголовки) указать ключевые слова - программа распознает тип данных в колонке автоматически:

  • QUANTITY - количество
  • KIND - тип
  • SUBKIND - подтип
  • VALUE - номинал
  • TOLERANCE - точность
  • SVALUE - значение
  • VOLTAGE - напряжение
  • CURRENT - ток
  • POWER - мощность
  • MOUNTTYPE - тип монтажа
  • PACKAGE - корпус детали
  • DESCRIPTION - описание
  • DIM_WIDTH - размер (ширина)
  • DIM_HEIGHT - размер (высота)
  • DIM_DEPTH - размер (глубина)
  • MANUFACTURER - производитель
  • SELLER - продавец
  • PLACE - место хранения
  • SUBPLACE - под-место хранения
  • URL - URL
  • NOTE - примечание
  • DATASHEET - ссылка на datasheet
  • USEDSTATE - признак б/у

При необходимости можно отредактировать значения прямо в этой промежуточной табличке.

Числовые значения, номиналы распознаются и, если корректны - выводятся рядом с исходными данными синим цветом. Те, которые не распознались - отмечаются красным.

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

Если импортируются номиналы деталей, то дополнительно к числовому значению программа пытается распознать приставку к единице измерения. Приставки - регистрозависимы!

Допустимые приставки:

  • f - фемто
  • p - пико
  • n - нано
  • u - микро
  • m - милли
  • c - санти (только для размеров)
  • k - кило
  • M - мега
  • G - гига
  • T - тера

Если языковый пакет предусматривает локализацию приставок, то допустимо использовать и локализованные версии приставок:

  • ф - фемто
  • п - пико
  • н - нано
  • мк - микро
  • м - милли
  • с - санти (только для размеров)
  • к - кило
  • М - мега
  • Г - гига
  • Т - тера

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

Единица измерения в файле игнорируется (как и любой другой текст). В качестве единицы измерения будет взята ЕИ из настроек категории детали.

Пример распознавания номиналов резисторов:


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

Если данные во всех импортируемых строках и колонках распознаны, будет доступна кнопка "Начать импорт". По ее нажатию в базу запишутся все отмеченные строки из промежуточной таблицы.

Настройки программы

Их немного.


Язык интерфейса - пока есть 4, но если кто то переведет еще на какой то язык - я добавлю и скажу спасибо.

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

Загружать последнюю открытую базу данных при запуске программы - если включена эта опция, при запуске будет автоматически открываться последняя открытая в прошлом сеансе работы база.

Раскрывать дерево компонентов при загрузке базы - если дерево большое, развесистое и многоуровневое - кому то будет удобно видеть его свернутым, а кому то наоборот, развернутым. Вот за поведение дерева и отвечает эта настройка. Если она выключена, то раскрыт только первый уровень элементов дерева.

__________________________________


Скачать программу можно вот по этой ссылочке. Инсталляция не нужна, права администратора - тоже.

Программа поставляется "как есть", функционал, скорее всего, будет дорабатываться, существующие глюки - исправляться, новые - добавляться :).

Замечания - приветствуются.

PS. Немецкий перевод сделан нейронкой, если в нем будут неточности - сообщите, я поправлю.

1 комментарий:

  1. Анонимный19 января, 2026 02:02

    Все в вашем стиле!
    С интересом жду практического применения этих систематизированных деталей.

    ОтветитьУдалить

======= !!! ВНИМАНИЕ !!! ======================================================================
Гугл умный и боится спама. Поэтому иногда ваши комментарии Гугл отправляет мне на премодерацию. Отправлять или нет - решаю не я, а алгоритмы Гугла. Если ваш комментарий не появился сразу, значит я получу уведомление и опубликую ваш комментарий через некоторое время. Я стараюсь это делать достаточно оперативно.