powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Переименование таблицы базы данных Access
4 сообщений из 4, страница 1 из 1
Переименование таблицы базы данных Access
    #32554771
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал переводить для рассылки, потом оказалось что не то, но уж раз начал, то закончил - м.б. кому интересно будет.

Переименование таблицы базы данных Access

By Justin Macklin
http://www.4guysfromrolla.com/

Вступление

Я несколько дней пытался переименовать таблицу Microsoft Access из ASP. Очевидно, что переименовать таблицу на SQL Server легко с помощью хранимой процедуры (exec sp_rename oldtable, newtable), но в Access нет такого эквивалента. Казалось, что единственным выходом может быть создание новой таблицы, затем использование SELECT INTO для переноса данных с последующим вызовом DROP для удаления оригинальной таблицы. Вряд ли это эффективный способ и уж наверняка некрасивый.
Затем я прочёл интересную статью от Ramesh Balaji и Scott Mitchell - Working with ADOX. Если вы её не читали, я настоятельно её вам рекомендую. По существу, ADOX, т.е. ADO Extensions, это дополнительный объектный слой ADO, предоставляющий информацию к схеме БД. Используя ADOX вы можете выполнять такие задачи как получение списка таблиц БД, полей таблицы, их типов и т.д. Прочитав статью об ADOX, я сообразил, что ADOX может быть использована в качестве фундамента для построения процедуры переименования таблицы в MS Access.
Поиск в MSDN показал, что свойство Name объекта Table является свойством для чтения и записи! Это значит, что я мог бы переименовать таблицу в БД Access просто установив свойство Name объекта Table в соответствующее значение.

Код

Следующий код приводит текст функции RenameTable, которая принимает в качестве параметра строку соединения (conStr), текущее (старое) имя таблицы (oldName) и новое имя (newName).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub RenameTable (conStr, oldName, newName)
  ‘Создаем объект для подсоединения к БД...
  Dim objADOXDatabase
  Set objADOXDatabase = Server.CreateObject("ADOX.Catalog")
  objADOXDatabase.ActiveConnection = conStr

  'Меняем имя...
  objADOXDatabase.Tables(oldName).Name = newName

  'Завершаем операцию...
  Set objADOXDatabase = Nothing
End Sub

Код ясен. Создаётся объект Catalog и устанавливается его свойство ActiveConnection в строку соединения. Это позволяет получить доступ к объектам из схемы БД (в т.ч. к таблицам). Свойство Name таблицы из oldName меняется на newName. Затем очищаем переменные, установив объект каталога в Nothing.
Также можно переименовать и другие объекты БД. Библиотека MSDN ( http://msdn.microsoft.com/library/en-us/ado270/htm/adproname.asp) утверждает, что свойство Name является свойством для чтения и записи для объектов Column, Group, Key, Index, Table, и User, но только для чтения для объектов Catalog, Procedure и View.

Полный пример

В следующем примере переименовывается таблица test в changed в БД, расположенной в c:\example.mdb.
<%
Call RenameTable("Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=c:\example.mdb", "test", "changed")

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub RenameTable (conStr, oldName, newName)
  'Должно быть соединение OLE DB 
  'Создадим объект и подсоединимся к БД...
  Dim objADOXDatabase
  Set objADOXDatabase = Server.CreateObject("ADOX.Catalog")
  objADOXDatabase.ActiveConnection = conStr
 
  'Изменим имя...
  objADOXDatabase.Tables(oldName).Name = newName
  
  'Очистка...
  Set objADOXDatabase = Nothing
End Sub
%>

Ограничения

Код работает только с соединениями OLEDB, так как показано в примере. Кроме того, для систем NT/2000/XP должны быть установлены соответствующие права на файл БД Access. Код обработки ошибок в примере опущен для ясности. Он может быть легко добавлен.
...
Рейтинг: 0 / 0
Переименование таблицы базы данных Access
    #32555104
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hDrummer Ограничения

Код работает только с соединениями OLEDB.

Думается не только oledb, но и odbc.
Там только провайдеры разные, и всё.
...
Рейтинг: 0 / 0
Переименование таблицы базы данных Access
    #32555429
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал переводить для рассылки, потом оказалось что не то...

;)
...
Рейтинг: 0 / 0
Переименование таблицы базы данных Access
    #32555540
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max ProТам только провайдеры разные, и всё.
Не проверял, эта тема мне мало интересна.

snake;)
Ага, второй раз уже нарываюсь :) Вроде б в тему, а потом смотришь - нет :)
А уже половина переведена :)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Переименование таблицы базы данных Access
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]