2. План занятия
• Как устроены таблицы
• Поддерживаемые источники данных
• Использование данных в текстовых файлах
• Интерфейс доступа к данным ODBC
• Использование таблиц данных в ODBC-источниках
• Создание источника данных ODBC
• Особенности работы с данными в Excel
• Особенности работы с данными в Access
2
3. Работа с источниками данных
Модель.mod
Данные.dat
GLPK / AMPL +
решатель
Отчеты по
решению
Вывод в консоль
Модель.mod
GLPK / AMPL +
решатель
Таблица данных
Таблица данных
Визуализация,
анализ
3
4. Как устроены таблицы данных
• В строках таблицы находятся записи о некоторых объектах (товары, заказы, …)
• Столбцы таблицы – это характеристики (параметры) объекта
• В таблице есть уникальный столбец (один или несколько) – первичный ключ
• Первичный ключ используются для ссылки на конкретный объект
• Множества в GLPK – то же самое, что ключевые столбцы в таблицах
• Параметры в GLPK считываются из столбцов таблицы
Код Название Цена
1 Хлеб 30
2 Молоко 50
3 Масло 80
Код
периода
Код
товара
Количество
1 1 1000
1 2 500
1 3 200
2 1 1200
2 2 600
2 3 300
3 1 1500
3 2 700
3 3 400
Код Период
1 Январь
2 Февраль
3 Март
Периоды
Товары
Продажи
4
5. Описание таблицы данных в GLPK
• Для чтения данных:
table <имя> IN ‘<драйвер>’ ‘<строка подключения>’
‘имя таблицы в источнике данных’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
• Для записи данных:
table <имя> {<индексирующее выражение>} OUT
‘<драйвер>’ ‘<строка подключения>’
‘команды для очистки старых данных’
‘имя таблицы в источнике данных’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
5
6. Поддерживаемые GLPK источники данных
• Прямая поддержка (требуется только GLPK):
– Text/CSV
– MySQL
• Поддержка через ODBC:
– Excel
– Access
– dBase
– sqlite
– любая промышленная СУБД
• ODBC – это стандарт для windows-систем.
• Для unix-like систем (Linux, MacOS X) нужен iODBC, unixODBC
• см. http://en.wikibooks.org/wiki/GLPK/ODBC
6
7. Текстовый формат
• Формат данных (файл orfc.csv)
csv = Comma Separated Values; GLPK поддерживает только американский формат
разделителей
• Загрузка данных в модель:
"Код","code","name","cal","prota","protv","fata","fatv","carb"
1,2,"Баранки, сушки",272,0.00,8.60,0.00,0.50,56.80
2,194,"Батоны",240,0.00,7.50,0.00,1.00,49.50
3,193,"Булки городские",270,0.00,7.90,0.00,1.90,53.00
7
8. Особенности текстового формата
• Простой, человеко-читаемый
• Напрямую поддерживается
• Excel создает CSV-файлы «русского формата», которые не поддерживаются GLPK
8
9. Стандартные программные
интерфейсы доступа к данным
• ODBC – Open Database Connectivity (X/Open, 1990)
• JDBC – часть Java Development Kit (Sun, 1997)
Клиент (front-end)
ODBC-клиент
(приложение)
ODBC-
драйвер
SQL
Данные
CSV, DBF,
XLS
MS Access,
FoxPro,
Btrieve
ODBC API
ODBC SDK
SQL Server, Oracle,
DB2, MySQL…
Сервер
(Back-End)
GLPK, Access,
Excel…
Команды
ODBC API
CSV, DBF,
XLS
MS Access,
FoxPro,
Btrieve
9
10. Чтение данных из источника (GLPK)
• Описание таблицы для чтения данных:
table <имя> IN ‘<драйвер>’ ‘<строка подключения>’
‘имя таблицы’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
set I dimen 2;
param st{I};
table t IN 'ODBC' 'FILEDSN=supply.dsn'
'stock' :
I <- [product, period],
st ~ quantity;
столбцы, определяющие индексы
элементов множества (первичный ключ)product period quantity
A 1 10
A 2 12
B 1 100
B 2 101
Первичный ключ (Primary Key) – столбец,
или несколько столбцов, уникальным
образом идентифицирующих каждую
запись в таблице данных 10
11. Чтение данных из источника (GLPK)
• Вместо имени таблицы можно указывать SQL-запрос на выборку данных:
table <имя> IN ‘<драйвер>’ ‘<строка подключения>’
‘SQL-запрос на выборку’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
set I dimen 2;
param st{I};
table t IN 'ODBC' 'FILEDSN=supply.dsn'
'SELECT product, period, quantity'
' FROM stock' :
I <- [product, period], st ~ quantity;
столбцы, определяющие индексы
элементов множества (первичный ключ)
product period quantity
A 1 10
A 2 12
B 1 100
B 2 101
11
12. Запись данных в таблицу (GLPK)
table <имя> {<индексирующее выражение>} OUT
‘<драйвер>’ ‘<строка подключения>’
‘SQL-запрос для очистки данных’
‘имя таблицы’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
table t {p in P, t in T} OUT 'ODBC'
'FILEDSN=supply.dsn'
'DELETE FROM stock;'
'stock' :
p ~ product, t ~ period,
st[p, t] ~ quantity;
http://en.wikibooks.org/wiki/GLPK/Table_Statement
product period quantity
A 1 10
A 2 12
B 1 100
B 2 101
set P := A B;
set T := 1..2;
param st := A 1 10, A 2 12, B 1 100, B 2 101;
Ключевые столбцы определяются
индексирующим выражением
Иногда требуются другие способы обновления данных, они описаны здесь: 12
13. Создание источника данных ODBC
• Источник данных (Data Source Name) – описание подключения к данным
• В Windows программу настройки источников можно запустить командой:
odbcad32.exe
• Если вы используете 32-битную версию Office с 64-битной версией
Windows x64, то программу настройки надо запускать из каталога
%windir%SysWOW64
• Создавайте файловые DSN
13
14. Содержимое файла DSN
• Рекомендуем использовать относительные пути к файлам Excel и Access
• Если собираетесь писать в файл Excel - убедитесь, что он не read only
14
15. Особенности Excel
• Не поддерживает DELETE FROM
• Не поддерживает DROP TABLE IF EXISTS
• Автоматически определяет типы данных при чтении (может определять
неправильно)
• Не работает при открытой книге
• Рекомендуем использовать формат файла Excel 2003 (xls)
Типы данных при описании столбцов новой таблице
CURRENCY
DATETIME
LOGICAL
NUMBER
TEXT
http://msdn.microsoft.com/en-us/library/ms712640(v=vs.85).aspx
15
16. Чтение данных из таблицы Excel (GLPK)
• Описание таблицы для чтения данных:
table <имя> IN ‘<драйвер>’ ‘<строка подключения>’
‘[имя таблицы]’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
• Правила описания имени таблицы:
– Если таблица содержится на отдельном листе с именем Data, то имя таблицы в GLPK
надо указывать так: [Data$]
– Если таблица содержится в именованном диапазоне Data (имя задано в диспетчере
имен), то имя таблицы в GLPK надо указывать так: [Data], т.е. без '$' в конце
– Можно использовать адреса диапазонов. Например, таблица, находящаяся в диапазоне
A1:F10 листа MyData, должна быть указана так: [MyData$A1:F10]
– Имена, заданные для таблиц (Ctrl-T) в Excel не поддерживаются
set I dimen 2;
param st{I};
table t IN 'ODBC' 'FILEDSN=supply.dsn'
'[stock$]' :
I <- [product, period], st ~ quantity;
Пример чтения данных из таблицы на отдельном листе stock
product period quantity
A 1 10
A 2 12
B 1 100
B 2 101
16
17. Запись данных в таблицу Excel (GLPK)
table <имя> {<индексирующее выражение>} OUT
‘<драйвер>’ ‘<строка подключения>’
‘SQL-запрос для удаления и создания таблицы’
‘[имя таблицы$]’ :
<имя объекта GLPK> ~ <имя столбца таблицы>;
table t {p in P, t in T} OUT 'ODBC' 'FILEDSN=supply.dsn'
'DROP TABLE stock;'
'CREATE TABLE [stock]'
'(product TEXT, period NUMBER, quantity NUMBER);'
'[stock$]' :
p ~ product, t ~ period, st[p, t] ~ quantity;
product period quantity
A 1 10
A 2 12
B 1 100
B 2 101
set P := A B;
set T := 1..2;
param st := A 1 10, A 2 12, B 1 100, B 2 101;
таблица будет создана на отдельном листе
17
18. Особенности Access
Microsoft Access data type
Data type
(CREATETABLE)
BIT BIT
COUNTER COUNTER
CURRENCY CURRENCY
DATE/TIME DATETIME
LONG TEXT LONGTEXT
MEMO LONGTEXT
NUMBER (FieldSize= SINGLE) SINGLE
NUMBER (FieldSize= DOUBLE) DOUBLE
NUMBER (FieldSize= BYTE) UNSIGNED BYTE
NUMBER (FieldSize= INTEGER) SHORT
NUMBER (FieldSize= LONG INTEGER) LONG
NUMERIC NUMERIC
TEXT VARCHAR
http://msdn.microsoft.com/en-us/library/ms714540(v=vs.85).aspx
• Access поддерживает DELETE FROM,
поэтому можно просто создавать
таблицы в графическом конструкторе
Access
• При необходимости программного
создания, используйте типы данных,
указанные в таблице
18