Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изменение структуры прилинкованной таблицы
 
 автор: Мария   (06.09.2012 в 23:45)   личное сообщение
 
 

Подскажите, пожалуйста, как можно программно изменить структуру таблицы (например, добавить или переименовать поле), которая прилинкована к проекту Access, а физически расположения на MS SQL сервере. Access 2003, MS SQL Server 2005.

  Ответить  
 
 автор: snipe   (07.09.2012 в 04:33)   личное сообщение
 
 

с переименованием просто
создаете запрос в котором прописываете алиасы
Например так
Select t.Data as [Дата], t.Time1 as [Время регистрации]
from имя присоединенной таблицы as t

и потом в своей базе используете уже ссылки не на присоединенную таблицу а на запрос

а вот необходимость программно добавлять поля в таблицу это признак неправильной схемы базы данных (ИМХО)

  Ответить  
 
 автор: Силblч   (07.09.2012 в 07:57)   личное сообщение
 
 

а щяс правильная сехма - єто та, которая работает ;)))

  Ответить  
 
 автор: Мария   (07.09.2012 в 22:04)   личное сообщение
 
 

Согласна с Вами, что если приходится корректировать структуру данных, значит она была неправильна. Теперь я хочу с Вашей помощью ее улучшить.

  Ответить  
 
 автор: Силblч   (07.09.2012 в 07:55)   личное сообщение
 
 

открываете её через TableDef и меняете
точно уже не помню, но возможно ещё можно запросом ALTER TABLE
єто я про таблицы access
а на сервере - только если у вас права есть :) то запросами к серверу

  Ответить  
 
 автор: Дядя Федор   (07.09.2012 в 09:27)   личное сообщение
 
 


Public Function f_NewField()
Dim fld As Field
Dim Tbl As TableDef
Dim dbs As Database
Dim rez As Recordset

Set dbs = CurrentDb

Set rez = dbs.OpenRecordset("SELECT * FROM TblJobAddField WHERE IsDone = False;")

Do While Not rez.EOF
    
    Set Tbl = dbs.TableDefs([rez]![TabName])
    Set fld = Tbl.CreateField([rez]![FieldName])
    'Определение свойств поля
    fld.Type = ([rez]![FieldType])
    If [rez]![FieldSize] & "" <> "" Then fld.Size = ([rez]![FieldSize])
    fld.DefaultValue = Nz([rez]![FieldDefaultValue], "")
    
    'Добавление
    Tbl.Fields.Append fld
    'Заполнение комментария
    
    SetAccessProperty Tbl.Fields([rez]![FieldName]), "Description", dbMemo, [rez]![FieldMemo]
    
    DoCmd.SetWarnings False
    DoCmd.RunSQL ("UPDATE TblJobAddField SET IsDone = True, DateAddDone = Now() WHERE IdJobAddField = " & [rez]![IdJobAddField] & ";")
    DoCmd.SetWarnings True
    rez.MoveNext
Loop

End Function



Структура таблицы TblJobAddField понятна из текста функции.
Необходимость возникает при работающей базе, когда открыть серверную часть для изменения в рабочее время затруднительно, т.к. таблица занята.
Помещаем функцию в ночной запуск и ок!

  Ответить  
 
 автор: Мария   (07.09.2012 в 22:00)   личное сообщение
 
 

Спасибо за помощь! Буду разбираться!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList