Microsoft SQL Server, Qt, Базы данных

Подключение к базе данных MS SQL Server в Qt

В записи Подключение к базе данных в Qt на примере СУБД PostgreSQL я показала, как произвести подключение к базе данных. С MS SQL Server немного запутанней получается (не привыкать).

MS SQL Server может использовать 2 вида аутентификации: аутентификация windows и аутентификация  SQL Server. Ниже рассмотрим оба способа подключения. Продолжить чтение «Подключение к базе данных MS SQL Server в Qt»

"Нет" выгоранию, Фотография

«Нет» выгоранию: прогулки на свежем воздухе

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

Прогулка по лесу дает невероятно большой заряд энергии природы, свежий воздух дает сил, а пение птиц хорошо расслабляет.

Вот небольшой кусочек нашей такой недавней прогулки.

 

Возможно, вам понравится: Time management, или Как все успеть женщине, работающей из дома

Microsoft SQL Server

Microsoft SQL Server: Удалить MS_Description для всех колонок таблиц

Потребовалось мигрировать с PostgreSQL в Microsoft SQL Server. И я, доверчивая душа, воспользовалась программой ESF Migration tool kit. Полную версию покупать не стала — мне же на один раз только надо. А эта чудо-программа добавила в описании ко всем полям всех таблиц описание «TRIAL». Не смертельно, но и неприятно. К тому же все триггеры и функции все равно пришлось самостоятельно писать. Так вот. Программисты — люди ленивые, поэтому написала процедуру, которая сама уберет все описания к полям. Использует она системную процедуру sp_dropextendedproperty:

[pastacode lang=»sql» manual=»declare%20%40table%20nvarchar(100)%2C%20%40column%20nvarchar(100)%3B%0Adeclare%20cur%20cursor%20local%20scroll%0Afor%20select%20A.table_name%2C%20A.column_name%0Afrom%20information_schema.columns%20A%0Ainner%20join%20information_schema.tables%20B%20%0Aon(A.table_name%20%3D%20B.table_name)%0Awhere%20A.table_schema%20%3D%20’dbo’%20and%20%0AA.table_catalog%20%3D%20’database_name’%20and%20%0A—%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B4%D0%BB%D1%8F%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%2C%20%D0%BD%D0%B5%20%D1%82%D1%80%D0%BE%D0%B3%D0%B0%D1%8F%20%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%0AB.table_type%3D’base%20table’%3B%0A%0Aopen%20cur%3B%0Afetch%20first%20from%20cur%20into%20%40table%2C%20%40column%3B%0Awhile(%40%40fetch_status%20%3D%200)%20begin%0A%09EXEC%20sp_dropextendedproperty%20’MS_Description’%2C%20%0A%09%09N’schema’%2C%20N’dbo’%2C%20N’table’%2C%20%40table%2C%20%0A%09%09N’column’%2C%20%40column%3B%0A%20%20%20%20fetch%20next%20from%20cur%20into%20%40table%2C%20%40column%3B%0A%20%20%20%20end%3B%0Aclose%20cur%3B%0Adeallocate%20cur%3B%0AEND» message=»Курсор для удаления описания к полям таблиц» highlight=»15″ provider=»manual»/]

Пример, приведенный на странице форума MSDN, почему-то не сработал — все описания остались на прежних местах.

Microsoft SQL Server, PostgreSQL

Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server

Хочу сегодня привести примеры создания функций для СУБД Microsoft SQL Server и PostgreSQL. Функция возвращает таблицу с 3-мя полями.

Как это пишется в MS SQL Server:

CREATE FUNCTION dbo.myFunction (--variables list--)
RETURNS result_table TABLE(field1 integer, field2 integer, field3 integer) 
AS
BEGIN
	insert into result_table 
	select val1, val2, val3 from another_table;
	return;
END;

А вот так в PostgreSQL:

CREATE OR REPLACE FUNCTION public.get_count_in_batch(--variables list--)
    RETURNS TABLE(field1 integer, field2 integer, field3 integer) 
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$
begin
	return query select val1, val2, val3 from another_table;
end;
$BODY$;

Конечно, здесь примеры сокращены до минимума, только лишь с целью показать механизм возврата результата. Продолжить чтение «Функция, возвращающая таблицу returns table — в PostgreSQL и MS SQL Server»

Будни, О том о сём

Time management, или Как все успеть женщине, работающей из дома

Сейчас в различных соц. сетях и где ни попадя предлагают посещать различные курсы, будь то курсы по увеличению продуктивности, или по улучшению понимания детского поведения, или по управлению своим временем (time management). Вокруг появилось очень много специалистов в стольких областях, о которых раньше люди и не задумывались, и все спешат заработать деньги на всякой ерунде. Мне кажется, что, имея голову на плечах и умея читать и анализировать материал, большинством навыков можно овладеть самостоятельно. Я не говорю о каких-то сугубо профильных знаниях.

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

Пока в режиме совмещения полноценной работы из дома и ведения домашних дел и заботы о родных я живу около полугода (что не очень-то много), но хотелось бы поделиться некоторыми tricks, да и будет с чем сравнить потом. Продолжить чтение «Time management, или Как все успеть женщине, работающей из дома»

C++, Qt, Портфолио

Эмулятор работы инспектора машинного зрения (формирование выходных файлов)

При написании одного проекта мне необходимо обрабатывать файлы, формируемые на основании полученных данных от инспектора машинного зрения. Содержимое файла — список штрих-кодов определенного количества, наименование файла — <год месяц день>_<штрих-код короба>. Эти файлы сохраняются в определенном каталоге,  а формируются с периодичность N миллисекунд. Для тестирования приложения мне необходимо написать эмулятор такого «инспектора». Приложение будет формировать файлы со списком штрих-кодов и сохранять в заданный каталог.

главное окно эмулятора

Основной класс, отвечающий за работу эмулятора выглядит таким образом: Продолжить чтение «Эмулятор работы инспектора машинного зрения (формирование выходных файлов)»

Qt

QTableWidget: добавить список QComboBox  в ячейку

Допустим, в объекте values типа QMap<QString, QString> хранятся некоторые пары значений, которыми необходимо заполнить выпадающие списки QComboBox в таблице типа QTableWidget. Таким образом, для каждой строки будет существовать поле, допустимые значения для которого будут браться из заранее определенного и сформированного списка. Самый простой способ установки некоторого объекта в качестве ячейки таблицы — воспользоваться функцией setCellWidget.

[pastacode lang=»cpp» manual=»ui-%3EtableWidget-%3EsetRowCount(ui-%3EtableWidget-%3ErowCount()%2B1)%3B%0AQComboBox%20*box%20%3D%20new%20QComboBox%3B%0A%2F%2F%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D0%BC%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9%20%D0%BA%D0%B0%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%2C%0A%2F%2F%D0%B0%20%D1%81%D0%B0%D0%BC%D0%B8%20%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%20-%20%D0%BA%D0%B0%D0%BA%20userData%0Aforeach(QString%20index%2C%20values.keys())%0A%09box-%3EaddItem(values.value(index)%2C%20index)%3B%0A%2F%2F%D0%BF%D0%BE%20%D0%B3%D0%BE%D1%80%D0%B8%D0%B7%D0%BE%D0%BD%D1%82%D0%B0%D0%BB%D0%B8%20%D1%80%D0%B0%D1%81%D1%82%D1%8F%D0%BD%D0%B5%D0%BC%2C%20%D0%BF%D0%BE%20%D0%B2%D0%B5%D1%80%D1%82%D0%B8%D0%BA%D0%B0%D0%BB%D0%B8%20-%20%D0%BA%D0%B0%D0%BA%20%D1%80%D0%B5%D1%88%D0%B8%D1%82%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%20%3A)%0Abox-%3EsetSizePolicy(QSizePolicy%3A%3AExpanding%2C%20QSizePolicy%3A%3APreferred)%3B%0A%2F%2F%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%20%D0%B2%20%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%83%20QTableWidget%20%D0%B2%20%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D1%83%20%E2%84%965%0Aui-%3EtableWidget-%3EsetCellWidget(ui-%3EtableWidget-%3ErowCount()%20-%201%2C%205%2C%20box)%3B» message=»» highlight=»» provider=»manual»/]

Теперь выведем все ключи и их значения списков таблицы в дебаг: Продолжить чтение «QTableWidget: добавить список QComboBox  в ячейку»

C++, Qt, Портфолио

DBRecordWidget — Библиотека-виджет для работы с данными (Qt)

Сегодня вашему вниманию предстанет моя библиотека DBRecordWidget, которую я написала на Qt для удобства разработки пользовательского интерфейса приложения, требующего работу с моделями данных. Это могут быть и SQL модели, и другие. Библиотека не зависит от разновидности.

Открыта для общего доступа на BitBucket:

https://secretsilent@bitbucket.org/slalimited/dbrecordwidget.git

Поподробнее о DBRecordWidget…

Библиотека представляет собой виджет, где можно добавить кнопки Добавить, Изменить, Удалить, Экспорт, Импорт и пр. — в перечислении:

[pastacode lang=»cpp» manual=»namespace%20operationButtons%20%7B%0AQ_NAMESPACE%0Aenum%20buttons%20%7Binsert%3D0%2C%20update%2C%20remove%2C%20import_%2C%20export_%2C%20report%2C%20refresh%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20save%2C%20print%7D%3B%0AQ_ENUM_NS(buttons)%0A%7D» message=»» highlight=»» provider=»manual»/]

Продолжить чтение «DBRecordWidget — Библиотека-виджет для работы с данными (Qt)»

PostgreSQL, Базы данных

PostgreSQL: Узнать данные о колонках таблицы

Из таблицы information_schema.columns можно узнать много чего полезного о колонках той или иной таблицы или всех таблиц сразу. А также и представлений.

Узнаем все данные о колонках таблиц и представлений схемы ‘public’ базы данных ‘my_database’:

select * from information_schema.columns
where table_catalog = 'my_database' and table_schema = 'public'

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

Чтобы получить перечень колонок и присвоенные им номера по порядку таблицы products, надо написать

select column_name, ordinal_position
from information_schema.columns
where table_catalog = 'products' and 
table_schema = 'public' and 
table_name = 'products'