Страница 1 из 1

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

СообщениеДобавлено: 25 фев 2016, 00:23
vodan37
Пишу программу по автоматическому распознаванию радиодеталей, базу данных выбрал вашу.

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

Проблема заключается в том, что я плохо знаю 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.

Буду очень благодарен за помощь

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

СообщениеДобавлено: 26 фев 2016, 10:29
tretyakovmax
Да, названия находятся в таблице 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

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

СообщениеДобавлено: 26 фев 2016, 12:11
vodan37
Огромное спасибо.

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

СообщениеДобавлено: 26 фев 2016, 12:42
tretyakovmax
vodan37 писал(а):Огромное спасибо.


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

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

СообщениеДобавлено: 26 фев 2016, 12:51
tretyakovmax
Покажете хоть потом программу, мож и мне такая пригодится :D

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

СообщениеДобавлено: 28 фев 2016, 02:15
vodan37
Ну в flamerobin'е у меня всё работает, осталось только разобраться и заставить это работать на шарпе.

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

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

СообщениеДобавлено: 28 фев 2016, 15:03
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?

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

СообщениеДобавлено: 28 фев 2016, 20:05
tretyakovmax
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