Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-71121
maxim2
2002-08-13 09:17
2002.08.22
Каким образом загрузить курсоры и картинки из res файла


1-71246
Kuljok
2002-08-12 03:13
2002.08.22
Обработка сообщений


3-71000
Дмитрий Калугин
2002-07-31 16:22
2002.08.22
Обнуление генератора


14-71351
vads
2002-07-27 11:44
2002.08.22
Купил книгу Ч.Калверт, К.Рейсдорф - Borland C++Builder 5. Энцикл


14-71385
Psoryi
2002-07-25 06:18
2002.08.22
народ, хочу научится





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский