Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
ВнизКак в Access с помощью SQL-запроса сделать поле необязательным? Найти похожие ветки
← →
Nikolai_S (2002-07-25 11:33) [0]Как в MS Access с помощью SQL-запроса сделать поле необязательным? Когда я выполняю запрос, который делает поле обязательным, то все работает:
ALTER TABLE [таблица] ALTER COLUMN [поле] <тип данных> NOT NULL
А если я хочу наоборот сделать поле НЕобязательным, то запрос не срабатывает:
ALTER TABLE [таблица] ALTER COLUMN [поле] <тип данных> NULL
Причем в MS SQL-Server все работает исправно.
← →
Johnmen (2002-07-25 12:11) [1]Делая необязательным, не указывай NULL - нет такой конструкции в описании полей...
← →
Nikolai_S (2002-07-29 13:34) [2]Если не указывать NULL, то ничего не меняется. NULL - является опцией по умолчанию, то есть его можно указать, а можно и не указать. Я все же попробовал сделать как ты сказал - результат прежний - запром не работает (запрос выполняется и не выдает никаких ошибок, но поле все равно остается обязательным).
Хотя в MS SQL Server этот запрос выполняется
← →
sniknik (2002-07-29 14:14) [3]работает!
ALTER TABLE tr ADD COLUMN i3 int NULL
NULL необязательна
ALTER TABLE tr ADD COLUMN i3 int
анологична первому запросу
а у смены типа (ALTER COLUMN) конструкции NULL/NOT NULL нет обрати внимание на описание команды:
ALTER TABLE таблица {ADD {COLUMN тип поля[(размер)] [NOT NULL]
[CONSTRAINT индекс] |
ALTER COLUMN тип поля[(размер)] |
CONSTRAINT составнойИндекс} |
DROP {COLUMN поле I CONSTRAINT имяИндекса} }
соответственно не работает!
← →
Nikolai_S (2002-07-30 13:49) [4]to sniknik ©.
Если тот кусок SQL-кода, который ты выложил для Access, то странно. Почему тогда работает обратный запрос, который из необязательного поля делает обязательное. У меня к сожалению нет справки по SQL для Access. Зато в MSDN я нашел такое описанию иструкции ALTER TABLE. Там есть конструкция NULL/NOT NULL для ALTER COLUMN:
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}
Весь вопрос в том, как составить такой запрос по стандарту SQL 92 и поддерживает ли Access целиком этот стандарт?
← →
sniknik (2002-07-30 15:16) [5]я взял хелп по SQL Access отсюда
D:\Program Files\Common Files\Microsoft Shared\Office10\1033\JETSQL40.CHM
если у тебя МсОфис стоит то и у тебя должен быть.
Насчет стандарта SQL в Access то гдето я видел в Access-е галочку типа "поддерживать сооответствие" или чтото вроде. Посмотрю(проверю) если не ошибаюсь напишу еще.
← →
Nikolai_S (2002-07-31 09:51) [6]Насчет настройки по поддержки стандарта SQL-92 я сильно сомневаюсь. Вель если здраво рассудить, то тогда получиться полная ерунда. На одном компе один синтаксис SQL, на другом компе - другой. А программы, работающие с Access везде должны работать одинаково.
А справку я не установил, к сожалению, потому и брожу теперь по интернету в поисках информации.
Вообще странно что Microsoft в своих продуктах не может к более или менее какому-то единству прийти. SQL Server вроде поддерживает стандарт SQL 92, Access вроде не везде. И наименования типов данных различаются...
← →
sniknik (2002-07-31 10:23) [7]SQL Server Compatible Syntax (ANSI 92) - вот что я на самом деле видел (SQL волшебное слово :-), но это не помогает в данном случае. (Tools->Options->Tables\Queries->...)
Вообще стопроцентно рабочий вариант пересоздать поле. Ну сделал Bak поле скопировал туда информацию потом удалил/создал рабочее и назад из бэка инфу. Геморно но везде работать будет.
И непонятно почему это тебе нужно, чисто академический интерес или у тебя таблици на лету формируются? Структуру базы обычно раз и надолго продумывают (1С в пример приводить не нодо pls. :-). А уж обязательно поле для ввода или нет лутше в программе контролировать хоть ошибки отсечеш при неправильном вводе.
← →
Nikolai_S (2002-07-31 15:17) [8]Дело в том, что разрабатывается сложная система для хранения большого количества статистических данных. Данные могут по-разному храниться (долго объяснять как), поэтому и есть необходимость создания для них новых таблиц, а также изменения типов данных полей и изменения первичного ключа. А как известно в первичном ключе все поля необходимо делать обязательными. Ну а еще одно требование к системе - это возможность работы под разными СУБД, т.е. чтобы СУБД можно было менять как перчатки и программа работала и не замечала перемен. Вот такие пироги.
← →
Nikolai_S (2002-07-31 15:21) [9]Ну а с созданием и удалением полей - это то, что мне в первую очередь пришло в голову, однако я до последнего не использую такое извращение, так как таблица может содержать до 100 тыс. записей и процесс копирования, удаления полей может знять долгое время. А если работать с Access, то неизбежно приведет к очень быстрому физическому росту файла.
← →
Johnmen (2002-07-31 15:25) [10]При разработке любых систем учитывается тип используемой СУБД
(или нескольких, наперед известных).
← →
Nikolai_S (2002-08-01 09:44) [11]Ну я в основном ориентируюсь на SQL-Server и Access - это основа как бы. Но и надо держать в уме Oracle. Поэтому я стараюсь придерживаться стандарта SQL 92 и не использовать примочки отдельных СУБД. А там, где есть различия, то система в зависимости от типа СУБД генерит немного отличный SQL-запрос. (Например в формате представления даты в SQL-запросе, в наименованиях типов данных и т.д.)
← →
ППавел (2002-08-01 09:46) [12]круто
← →
Johnmen (2002-08-01 09:56) [13]>Nikolai_S © (01.08.02 09:44)
Придерживаться, конечно можно, но дело в том, что реализация SQL для конкретной СУБД может отличаться от SQL92 !
Ты хорошо знаешь SQL92 ? Хорошо знаешь отличия и нюансы SQL для MSSQL, Oracle ? К тому же не используя специфических расширений SQL под указанные СУБД, ты никогда не построишь оптимально работающее приложение !
← →
Nikolai_S (2002-08-01 15:22) [14]Может быть где-то приложение будет чуть медленнее работать, но это не такие серьезные издержки. В моем случае нет необходимости использовать какие-то расширения конкретных СУБД. Точнее без них вполне можно обойтись.
Какие расширения, например, в SQL Server дают особое быстродействие по сравнению со стандартными методами? Хранимые процедуры, триггеры, представления - это например есть и в Access, и в MS SAL-Server и в Oracle.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.08.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c