none
Вопрос по ALTER TABLE RRS feed

  • Общие обсуждения

  • мне необходимо в существующую таблицу базы данных MS Access программно добавить новый столбец, содержащий текст и следующие ограничения:
    - не должен быть пустым (не может содержать значения NULL)
    - не должен позволять вводить только пробельные символы
    - для него должна быть включена компрессия уникода.

    Написал вот такую команду:
    "ALTER TABLE Table_Name ADD Column_Name VARCHAR(255) NOT NULL;"

    но так я реализую только первое ограничение, а как реализовать остальные два?

    Нашел в документации такой синтаксис для включения компресии,


    но при компиляции получаю синтаксическую ошибку в следующей команде:

    "ALTER TABLE Table_Name ADD Column_Name VARCHAR(255) NOT NULL WITH COMP;"

    Подскажите, пожалуйста, как реализовать все три ограничения для добавляемого столбца?


    4 апреля 2018 г. 9:18

Все ответы

  • Выполнив еще две команды вроде этой:

    ALTER TABLE dbo.doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK (column_a > 1) ;

    https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql


    This posting is provided "AS IS" with no warranties, and confers no rights.

    5 апреля 2018 г. 0:28
    Модератор
  • Какое отношение эта команда имеет к вопросу, который я задал? Какое  из необходимых мне ограничений она устанавливает?
    • Изменено SergejS 9 апреля 2018 г. 13:59
    5 апреля 2018 г. 6:30
  • если открыть MS Access и создать таблицу, имеющую текстовое поле, то это поле будет иметь свойства о которых я спрашивал. Так вот мне нужно установить программно два свойства для текстового поля, одно которое не позволяет вводить в поле только пробельные символы, а второе включающее копмрессию для уникод символов!
    5 апреля 2018 г. 6:37
  • Нашел вот такой способ, как изменить нужные мне свойства в таблице

    Private Sub PropertyUpdate()
        Dim _conn As ADODB.Connection
        Dim _cat As ADOX.Catalog
        Dim _col As ADOX.Column
        Dim _prop As ADOX.Property
    
        _conn = Nothing
        _cat = Nothing
        _col = Nothing
        _prop = Nothing
    
        Try
            _conn = New ADODB.Connection With {
                .Provider = "Microsoft.Jet.OLEDB.4.0",
                .ConnectionString = "Database.mdb"
            }
            _conn.Open()
    
            _cat = New ADOX.Catalog With {
                .ActiveConnection = _conn
            }
            _col = _cat.Tables("TableName").Columns("ColumnName")
            ' _col.ParentCatalog = cat
            _prop = _col.Properties("Jet OLEDB:Allow Zero Length")
            'Read the property
            Console.WriteLine("{0}: {1}", _prop.Name, _prop.Value)
            'Change the property
            _prop.Value = False
    
            _prop = _col.Properties("Jet OLEDB:Compressed UNICODE Strings")
            'Read the property
            Console.WriteLine("{0}: {1}", _prop.Name, _prop.Value)
            'Change the property
            _prop.Value = True
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            'Clean up
            If (_prop IsNot Nothing) Then _prop = Nothing
            If (_col IsNot Nothing) Then _col = Nothing
            If (_cat IsNot Nothing) Then _cat = Nothing
            If (_conn IsNot Nothing) AndAlso (_conn.State <> 0) Then
                _conn.Close()
                _conn = Nothing
            End If
        End Try
    End Sub

    только изменение свойства "Jet OLEDB:Allow Zero Length" проходит нормально, а вот при попытке изменить свойство "Jet OLEDB:Compressed UNICODE Strings" происходит ошибка: "Не удалось выполнить операцию OLE DB, состоящую из нескольких шагов.  Проверьте каждое значение состояния OLE DB, если оно существует. Данные не были обработаны ."



    • Изменено SergejS 9 апреля 2018 г. 13:53
    9 апреля 2018 г. 13:43
  • Если операция:
    _prop = _col.Properties("Jet OLEDB:Allow Zero Length")
    'Change the property
    _prop.Value = False
    воздействует на все имеющиеся строки в таблице и даже при изменении свойства в самом MS Access требует подтверждения, то как можно обработать это исключение в коде? Ведь операция выздействует на свойства столбца, но реально проверяется каждая строка таблицы на соответствие задаваемому условию.

    17 апреля 2018 г. 7:59