обновление

Замените данные в таблице базы данных с данными MATLAB

Синтаксис

update(conn,tablename,colnames,data,whereclause)

Описание

пример

update(conn,tablename,colnames,data,whereclause) экспортирует переменную data MATLAB® в ее текущем формате в таблицу базы данных tablename с помощью соединения с базой данных conn. Можно использовать оператор SQL WHERE, чтобы задать который существующие записи в базе данных заменить.

Примеры

свернуть все

Соединитесь с базой данных Microsoft® Access™ и храните данные, которые вы обновляете в массиве ячеек. Затем обновите один столбец данных в таблице базы данных. Закройте соединение с базой данных.

Создайте соединение с базой данных conn к Базе данных Microsoft Access. Этот код принимает, что вы соединяетесь с источником данных под названием dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, которая содержит эти столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импортируйте все данные от inventorytable как массив ячеек при помощи conn и отобразите первые три строки импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery,'DataReturnFormat','cellarray');
results(1:3,:)
ans =

  3×4 cell array

    {[1]}    {[1700]}    {[15]}    {'2014-09-23 09:3…'}
    {[2]}    {[1200]}    {[ 9]}    {'2014-07-08 22:5…'}
    {[3]}    {[ 356]}    {[17]}    {'2014-05-14 07:1…'}

Задайте массив ячеек, содержащий имя столбца, который вы обновляете.

colnames = {'quantity'};

Задайте массив ячеек, содержащий новые данные, 2000.

data = {2000};

Обновите столбец quantity в inventorytable для продукта с productnumber, равным 1.

tablename = 'inventorytable';
whereclause = 'WHERE productnumber = 1';

update(conn,tablename,colnames,data,whereclause)

Импортируйте данные снова и просмотрите обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery,'DataReturnFormat','cellarray');
results(1:3,:)
ans =

  3×4 cell array

    {[1]}    {[2000]}    {[15]}    {'2014-09-23 09:3…'}
    {[2]}    {[1200]}    {[ 9]}    {'2014-07-08 22:5…'}
    {[3]}    {[ 356]}    {[17]}    {'2014-05-14 07:1…'}

В данных inventorytable продукт с номером продуктов, равным 1, имеет обновленное количество модулей 2000.

Закройте соединение с базой данных.

close(conn)

Соединитесь с Базой данных Microsoft Access и храните данные, которые вы обновляете как таблица. Затем обновите несколько столбцов данных в таблице базы данных. Закройте соединение с базой данных.

Создайте соединение с базой данных conn к Базе данных Microsoft Access. Этот код принимает, что вы соединяетесь с источником данных под названием dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, которая содержит эти столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импортируйте все данные от inventorytable при помощи conn и отобразите несколько строк импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-09-23 09:38:34.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Задайте массив ячеек, содержащий имена столбцов, которые вы обновляете в inventorytable.

colnames = {'price','inventorydate'};

Задайте таблицу, которая содержит новые данные. Обновите цену к 15$ и установите метку времени материально-технических ресурсов на '2014-12-01 08:50:15.000'.

data = table(15,{'2014-12-01 08:50:15.000'}, ...
    'VariableNames',{'price','inventorydate'});

Обновите столбцы price и inventorydate в таблице inventorytable для номера продуктов, равного 1.

tablename = 'inventorytable';
whereclause = 'WHERE productnumber = 1';

update(conn,tablename,colnames,data,whereclause)

Импортируйте данные снова и просмотрите обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       15      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Продукт с номером продуктов, равным 1, имеет обновленную цену 15$ и метку времени '2014-12-01 08:50:15.000'.

Закройте соединение с базой данных.

close(conn)

Соединитесь с Базой данных Microsoft Access и храните данные, которые вы обновляете в массиве ячеек. Затем обновите несколько записей данных в таблице при помощи нескольких пунктов WHERE. Закройте соединение с базой данных.

Создайте соединение с базой данных conn к Базе данных Microsoft Access. Этот код принимает, что вы соединяетесь с источником данных под названием dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, которая содержит эти столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импортируйте все данные от inventorytable при помощи conn и отобразите первые несколько строк импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Задайте массив ячеек, содержащий имя столбца, который вы обновляете.

colnames = {'quantity'};

Задайте массив ячеек, содержащий новые данные. Обновите количества для двух продуктов.

A = 10000;    % new quantity for product number 5
B = 5000;     % new quantity for product number 8

data = {A;B}; % cell array with the new quantities

Обновите столбец quantity в inventorytable для продуктов с номерами продуктов, равными 5 и 8. Создайте массив ячеек whereclause, который содержит два пункта WHERE, один для каждого продукта.

tablename = 'inventorytable';
whereclause = {'WHERE productnumber = 5';'WHERE productnumber = 8'};

update(conn,tablename,colnames,data,whereclause)

Импортируйте данные снова и просмотрите обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5           10000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            5000        5      '2011-06-18 11:45:35.000'

Продукт с номером продуктов, равным 5, имеет обновленное количество модулей 10000. Продукт с номером продуктов, равным 8, имеет обновленное количество модулей 5000.

Закройте соединение с базой данных.

close(conn)

Соединитесь с Базой данных Microsoft Access и храните данные, которые вы обновляете в массиве ячеек. Затем обновите несколько столбцов данных в таблице при помощи нескольких пунктов WHERE. Закройте соединение с базой данных.

Создайте соединение с базой данных conn к Базе данных Microsoft Access. Этот код принимает, что вы соединяетесь с источником данных под названием dbdemo с пустым именем пользователя и паролем.

conn = database('dbdemo','','');

Эта база данных содержит таблицу inventorytable, которая содержит эти столбцы:

  • productnumber

  • quantity

  • price

  • inventorydate

Импортируйте все данные от inventorytable при помощи conn и отобразите первые несколько строк импортированных данных.

sqlquery = 'SELECT * FROM inventorytable';
results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5            9000        3      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            8350        5      '2011-06-18 11:45:35.000'

Задайте массив ячеек, содержащий имена столбцов, которые вы обновляете.

colnames = {'quantity','price'};

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

% new quantities and prices for product numbers 5 and 8 
% are separated by a semicolon in the cell array
data = {10000,5.5;9000,10};

Обновите столбцы quantity и price в inventorytable для продуктов с номерами продуктов, равными 5 и 8. Создайте массив ячеек whereclause, который содержит два пункта WHERE, один для каждого продукта.

tablename = 'inventorytable';
whereclause = {'WHERE productnumber = 5';'WHERE productnumber = 8'};

update(conn,tablename,colnames,data,whereclause)

Импортируйте данные снова и просмотрите обновленное содержимое в inventorytable.

results = fetch(conn,sqlquery);
head(results)
ans =

  8×4 table

    productnumber    quantity    price          inventorydate      
    _____________    ________    _____    _________________________

          1            1700       20      '2014-12-01 08:50:15.000'
          2            1200        9      '2014-07-08 22:50:45.000'
          3             356       17      '2014-05-14 07:14:28.000'
          4            2580       21      '2013-06-08 14:24:33.000'
          5           10000        6      '2012-09-14 15:00:25.000'
          6            4540        8      '2013-12-25 19:45:00.000'
          7            6034       16      '2014-08-06 08:38:00.000'
          8            9000       10      '2011-06-18 11:45:35.000'

Продукт с номером продуктов, равным 5, имеет обновленное количество модулей 10000 и цены, равной 6, округленному к самому близкому номеру. Продукт с номером продуктов, равным 8, имеет обновленное количество модулей 9000 и цены, равной 10.

Закройте соединение с базой данных.

close(conn)

Входные параметры

свернуть все

Соединение с базой данных, заданное как объект connection, создается с функцией database.

Имя таблицы базы данных, заданное как вектор символов или скаляр строки обозначение имени таблицы в базе данных.

Пример: 'employees'

Типы данных: char | string

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

Пример: {'col1','col2','col3'}

Типы данных: cell | string

Обновите данные, заданные как массив ячеек, числовая матрица, таблица, структура или массив набора данных.

Если вы соединяетесь с базой данных с помощью драйвера JDBC, преобразовываете данные об обновлении в поддерживаемый формат прежде, чем запустить update. Если data содержит даты MATLAB, времена или метки времени, используют это форматирование:

  • Даты должны быть векторами символов формы yyyy-mm-dd.

  • Времена должны быть векторами символов формы HH:MM:SS.

  • Метки времени должны быть векторами символов формы yyyy-mm-dd HH:MM:SS.FFF.

Настройки NullNumberWrite и NullStringWrite базы данных preference не применяются к этой функции. Если data содержит записи null и NaN s, преобразуйте эти записи в пустое значение ''.

  • Если data является структурой, то имена полей в структуре должны совпадать с colnames.

  • Если data является таблицей или массивом набора данных, то имена переменных в таблице или массиве набора данных должны совпадать с colnames.

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

Пример: 'WHERE producttable.productnumber = 1'

Типы данных: char | cell | string

Советы

  • Значение свойства AutoCommit в объекте connection определяет, передает ли update автоматически данные базе данных.

    • Чтобы просмотреть значение AutoCommit, получите доступ к нему с помощью объекта connection; например, conn.AutoCommit.

    • Чтобы установить значение AutoCommit, используйте соответствующий аргумент пары "имя-значение" в функции database.

    • Чтобы передать данные базе данных, используйте commit, функционируют или вводят выражение SQL COMMIT с помощью функции exec.

    • Чтобы откатывать данные, используйте rollback или введите выражение SQL ROLLBACK с помощью функции exec.

  • Можно использовать datainsert, чтобы добавить новые строки вместо замены существующих данных.

  • Чтобы обновить несколько записей, количество SQL, пункты WHERE в whereclause должны совпадать с количеством записей в data.

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

  • Если это сообщение об ошибке появляется, когда ваша таблица базы данных открыта в режиме редактирования:

    [Vendor][ODBC Product Driver] The database engine could 
    not lock table 'TableName' because it is already in use 
    by another person or process.
    

    Затем закройте таблицу и повторно выполните функцию update.

  • Выполнение той же операции обновления снова может заставить это сообщение об ошибке появляться.

    ??? Error using ==> database.update
    Error:Commit/Rollback Problems
    

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте