update

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

Описание

пример

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 базы данных preference и NullStringWrite не обращайтесь к этой функции. Если data содержит null записи и NaNs, преобразуйте эти записи в пустое значение ''.

  • Если 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