update

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

Описание

пример

update(conn,tablename,colnames,data,whereclause) экспортирует MATLAB® переменная data в текущем формате в таблицу базы данных 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)

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

свернуть все

Подключение к базе данных, заданное как ODBC connection объект или JDBC 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 не применять к этой функции. Если 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 добавление новых строк вместо замены существующих данных.

  • Чтобы обновить несколько записей, количество WHERE SQL положения в 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