Работа с FDB файлом.

Описание, назначение, скриншоты, видео, часто задаваемые вопросы и т.п.

Работа с FDB файлом.

Сообщение vodan37 » 25 фев 2016, 00:23

Пишу программу по автоматическому распознаванию радиодеталей, базу данных выбрал вашу.

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

Проблема заключается в том, что я плохо знаю SQL и никогда не работал с FDB.
Где находятся все названия деталей ? как потом найти её характеристики ?

Мой код:

Код: выделить все
Console.WriteLine("Open connection.");
myConnection1.Open();

var aList = new ArrayList();
var fbCommand = new FbCommand("SELECT S_TYPENAME FROM T_ELEMENT_TYPE", myConnection1);
                FbDataReader fbDataReader = fbCommand.ExecuteReader();
                Console.WriteLine("Field count {0}, Visible field count {1}", fbDataReader.FieldCount, fbDataReader.VisibleFieldCount);
                Console.WriteLine();
                while (fbDataReader.Read())
                {
                    //Console.WriteLine("{0} FieldData : {1}", i + 1, fbDataReader["S_TYPENAME"]);
                     for (int i = 0; i < fbDataReader.FieldCount; i++)
                     {
                         Console.Write(fbDataReader[i] + " | ");
                     }
                }
                Console.WriteLine("Return both of the connections to the pool.");
                myConnection1.Close();
            }



как я понял он выдаёт все названия деталей из таблицы T_ELEMENT_TYPE.

Буду очень благодарен за помощь
vodan37
 
Сообщений: 4
Зарегистрирован: 25 фев 2016, 00:11

Re: Работа с FDB файлом.

Сообщение tretyakovmax » 26 фев 2016, 10:29

Да, названия находятся в таблице T_ELEMENT_TYPE в поле S_TYPENAME.

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

Примеры запросов:

Общая инфа по конкретному элементу (по его айдишникам):
Код: выделить все
SELECT TET.S_TYPENAME AS "Название", TC.S_TYPENAME AS "Корпус",
    CASE TC.V_MOUNTTYPE
    WHEN 1 then 'в отверстия'
    WHEN 2 then 'поверхностный'
    WHEN 3 then 'на шасси'
    WHEN 4 then 'в разъем'
    ELSE ''
    END AS "Тип монтажа",
TC.V_PINCOUNT AS "Выводов"
FROM T_ELEMENT_TYPE TET
LEFT JOIN T_CASE TC ON TC.DBID = TET.CASEDBID AND TC.ID = TET.CASEID
WHERE TET.DBID = 30 AND TET.ID = 3


Общая инфа по элементам (по названию):
Код: выделить все
SELECT TET.S_TYPENAME AS "Название", TC.S_TYPENAME AS "Корпус",
    CASE TC.V_MOUNTTYPE
    WHEN 1 then 'в отверстия'
    WHEN 2 then 'поверхностный'
    WHEN 3 then 'на шасси'
    WHEN 4 then 'в разъем'
    ELSE ''
    END AS "Тип монтажа",
TC.V_PINCOUNT AS "Выводов"
FROM T_ELEMENT_TYPE TET
LEFT JOIN T_CASE TC ON TC.DBID = TET.CASEDBID AND TC.ID = TET.CASEID
WHERE TET.S_TYPENAME LIKE '%1N4148%'


Параметры конкретного элемента:
Код: выделить все
SELECT TP.S_NAME AS "Обозначение",
TP.v_minval AS "Минимальное значение",
TP.v_typeval AS "Типовое значение",
TP.v_maxval AS "Максимальное значение",
TP.s_strval AS "Текстовое значение",
TP.v_boolval AS "Булево значение",
TP.s_testcond AS "Условия измерения",
TU.s_prefix AS "Единица измерения",
TP.s_description AS "Описание"
FROM T_PARAM TP
LEFT JOIN t_base_param TBP ON TBP.dbid = TP.baseparamdbid AND TBP.id = TP.baseparamid
LEFT JOIN T_UNIT TU ON TU.DBID = TBP.unitdbid AND TU.ID = TBP.unitid
WHERE TP.ELEMENTTYPEDBID = 30 AND TP.ELEMENTTYPEID = 3
tretyakovmax
Администратор
 
Сообщений: 178
Зарегистрирован: 03 июн 2013, 06:52

Re: Работа с FDB файлом.

Сообщение vodan37 » 26 фев 2016, 12:11

Огромное спасибо.
vodan37
 
Сообщений: 4
Зарегистрирован: 25 фев 2016, 00:11

Re: Работа с FDB файлом.

Сообщение tretyakovmax » 26 фев 2016, 12:42

vodan37 писал(а):Огромное спасибо.


Пожалуйста. Не рекомендую добавлять или изменять данные в БД сторонними программами во избежание различных сюрпризов. Читать - без проблем.
tretyakovmax
Администратор
 
Сообщений: 178
Зарегистрирован: 03 июн 2013, 06:52

Re: Работа с FDB файлом.

Сообщение tretyakovmax » 26 фев 2016, 12:51

Покажете хоть потом программу, мож и мне такая пригодится :D
tretyakovmax
Администратор
 
Сообщений: 178
Зарегистрирован: 03 июн 2013, 06:52

Re: Работа с FDB файлом.

Сообщение vodan37 » 28 фев 2016, 02:15

Ну в flamerobin'е у меня всё работает, осталось только разобраться и заставить это работать на шарпе.

Прога пока в сыром варианте, как доделаю - выложу на гитхаб и отпишусь сюда.
vodan37
 
Сообщений: 4
Зарегистрирован: 25 фев 2016, 00:11

Re: Работа с FDB файлом.

Сообщение vodan37 » 28 фев 2016, 15:03

SELECT TP.S_NAME AS "Обозначение",
TP.v_minval AS "Минимальное значение",
TP.v_typeval AS "Типовое значение",
TP.v_maxval AS "Максимальное значение",
TP.s_strval AS "Текстовое значение",
TP.v_boolval AS "Булево значение",
TP.s_testcond AS "Условия измерения",
TU.s_prefix AS "Единица измерения",
TP.s_description AS "Описание"
FROM T_PARAM TP
LEFT JOIN t_base_param TBP ON TBP.dbid = TP.baseparamdbid AND TBP.id = TP.baseparamid
LEFT JOIN T_UNIT TU ON TU.DBID = TBP.unitdbid AND TU.ID = TBP.unitid
WHERE TP.ELEMENTTYPEDBID = 30 AND TP.ELEMENTTYPEID = 3

WHERE TP.ELEMENTTYPEDBID = 30 AND TP.ELEMENTTYPEID = 3 - интересует эта строчка. Какие это из айдишников в таблице T_ELEMENT_TYPE ?

К примеру я создаю запрос:
SELECT DBID, ID, CLASSDBID, CLASSID, CASEDBID, CASEDBID, MAKERDBID, MAKERID
FROM T_ELEMENT_TYPE WHERE S_TYPENAME = 'моя_маркировка'

и мне вывалились все эти айдишники. Какой из них TP.ELEMENTTYPEDBID? И какой TP.ELEMENTTYPEID?
vodan37
 
Сообщений: 4
Зарегистрирован: 25 фев 2016, 00:11

Re: Работа с FDB файлом.

Сообщение tretyakovmax » 28 фев 2016, 20:05

vodan37 писал(а):SELECT TP.S_NAME AS "Обозначение",
TP.v_minval AS "Минимальное значение",
TP.v_typeval AS "Типовое значение",
TP.v_maxval AS "Максимальное значение",
TP.s_strval AS "Текстовое значение",
TP.v_boolval AS "Булево значение",
TP.s_testcond AS "Условия измерения",
TU.s_prefix AS "Единица измерения",
TP.s_description AS "Описание"
FROM T_PARAM TP
LEFT JOIN t_base_param TBP ON TBP.dbid = TP.baseparamdbid AND TBP.id = TP.baseparamid
LEFT JOIN T_UNIT TU ON TU.DBID = TBP.unitdbid AND TU.ID = TBP.unitid
WHERE TP.ELEMENTTYPEDBID = 30 AND TP.ELEMENTTYPEID = 3

WHERE TP.ELEMENTTYPEDBID = 30 AND TP.ELEMENTTYPEID = 3 - интересует эта строчка. Какие это из айдишников в таблице T_ELEMENT_TYPE ?

К примеру я создаю запрос:
SELECT DBID, ID, CLASSDBID, CLASSID, CASEDBID, CASEDBID, MAKERDBID, MAKERID
FROM T_ELEMENT_TYPE WHERE S_TYPENAME = 'моя_маркировка'

и мне вывалились все эти айдишники. Какой из них TP.ELEMENTTYPEDBID? И какой TP.ELEMENTTYPEID?


В этом запросе выбираются параметры (из T_PARAM) для конкретного типа элемента (T_ELEMENT_TYPE) с DBID = 30 и ID = 3.
Если надо по названию, то:

Код: выделить все
SELECT TET.s_typename as "ТИП ЭЛЕМЕНТА",
TP.S_NAME AS "Обозначение",
TP.v_minval AS "Минимальное значение",
TP.v_typeval AS "Типовое значение",
TP.v_maxval AS "Максимальное значение",
TP.s_strval AS "Текстовое значение",
TP.v_boolval AS "Булево значение",
TP.s_testcond AS "Условия измерения",
TU.s_prefix AS "Единица измерения",
TP.s_description AS "Описание"
FROM T_PARAM TP
LEFT JOIN t_base_param TBP ON TBP.dbid = TP.baseparamdbid AND TBP.id = TP.baseparamid
LEFT JOIN T_UNIT TU ON TU.DBID = TBP.unitdbid AND TU.ID = TBP.unitid
LEFT JOIN T_ELEMENT_TYPE TET ON TET.DBID = TP.elementtypedbid AND TET.id = tp.elementtypeid
WHERE TET.s_typename like '%1N4148%'

параметры по всем типам элементов, где в названии есть 1N4148
tretyakovmax
Администратор
 
Сообщений: 178
Зарегистрирован: 03 июн 2013, 06:52


Вернуться в Общие вопросы

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


cron