Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Вниз

SQL запрос на создание Indexed поля с Yes (No Duplicates)   Найти похожие ветки 

 
sniknik ©   (2008-12-25 17:35) [0]

восстановление ветки от:

mda   (25.12.08 14:56)

Народ подскажите. Как мне ДОБАВИТЬ новое поле в таблицу (использую ACCESS БД файлы *.MDB через ADO) что бы поле  получилось проиндексированным как
Indexed = Yes (No Duplicates) если его, затем, открыть в ACCESS в режиме Design View.

Я запрос пишу так:  ALTER TABLE имятаблицы ADD имяПоля INT INDEXED
Поле новое появляется тип как надо НО! значение Indexed в Accesse так и остается No. А мне надо что бы оно было неповторяемым. Напишите мне плиз, правильный SQL запрос.
Заранее благодарю..


 
Johnmen ©   (2008-12-25 20:09) [1]

Интересно, в какой документации описана такая конструкция?
Думается, что надо читать про CREATE INDEX.


 
sniknik ©   (2008-12-25 21:00) [2]

> Интересно, в какой документации описана такая конструкция?
если бы документация читалась... хоть какая то...
подозреваю что запрос работает только потому, что последнюю часть jet игнорирует (он вообще много чего себе лишнего позволяет).


 
Правильный$Вася   (2008-12-25 21:26) [3]


> Думается, что надо читать про CREATE INDEX.

даже CREATE UNIQUE INDEX, раз уж

> мне надо что бы оно было неповторяемым


 
Johnmen ©   (2008-12-25 21:49) [4]


> даже CREATE UNIQUE INDEX, раз уж
>> мне надо что бы оно было неповторяемым

Я думаю нет поводов отказывать автору в умении читать хелп.


 
mda   (2008-12-26 01:00) [5]

Народ. Я писал и так: ALTER TABLE имятаблицы ADD имяПоля INT, и так как в начале указано^, поле создается. Но если открыть его в Accesse в Design View и посмотреть в его свойстве строку Indexed - оно получается No. А мне надо что бы оно было бы как - Yes (No Duplicates). Т.е. значение его не повторялось бы никогда. Обьясните мне а еще лучше дайте готовый SQL запрос (для ADO) КАК ЭТО ЗДЕЛАТЬ. Конечно можно сделать ручками в томже эксесе, но БД у заказчиков уже есть свои, у каждого разная, и там точно нет такого поля, и прога должна проверить наличие этого поля и создать, если его нет. Но с вот таким свойством. В новой инсталяшке естественно я сам это сделаю, там все просто...
Я не специалист по БД, я программист вообще, по однокристалкам, поэтому сами понимаете что ВСЁ ЗНАТЬ НЕ ВОЗМОЖНО! БД не мой профиль. Так уж получилось, что приходится писать и на комп прогу. Ваши дисскусии, это хорошо, но Вы можете мне помочь, или нет. Дайте мне готовый SQL или может, если надо последовательность SQL запросов, или процедуру, которая бы делала проверку, создала поле с таким не повторяющимся индексом. НУ что вы в самом деле. ... Думается, что надо читать про CREATE INDEX. Я же не специалист по БД еще раз говорю. Я понятия имею минимальные про эти SQL ... не понятно чтоли.. Поэтому же и обратился к вам. А вы давай дискусии... а толку никакого... Плиз :(


 
Германн ©   (2008-12-26 01:08) [6]


> Я не специалист по БД, я программист вообще, по однокристалкам,
>  поэтому сами понимаете что ВСЁ ЗНАТЬ НЕ ВОЗМОЖНО! БД не
> мой профиль. Так уж получилось, что приходится писать и
> на комп прогу.

Я тоже соответствую этому описанию. Но хелп всегда читаю. И на форуме прошу помощи только в крайнем случае. (Когда не знаю что или где читать).


 
mda   (2008-12-26 01:13) [7]

:)) ну вы блин даете :)) как в том фильме...
Я тоже читаю НЕЛП. Я не могу вьехать как создать такой запрос.
Поле то я добавил, без помощи "специалистов" но индекс - блин, не получается, никак. Не могу вьехать как его написать, и можно ли все это в одном запросе сделать?


 
Германн ©   (2008-12-26 01:28) [8]


> mda   (26.12.08 01:13) [7]
>
> :)) ну вы блин даете :)) как в том фильме...
> Я тоже читаю НЕЛП. Я не могу вьехать как создать такой запрос.
>

Ну раз "ты и я одной крови", то скажу только, что в LocalSQL "ALTER TABLE " не умеет "добавлять поля с индексом". Можно сначала добавить поле, а затем нужно его "проиндексировать". Мои слова (как "неспециалиста" по БД) относятся к Парадоксу и BDE.
Что там в ACCESS"е я не знаю. Хелп по ACCESS я не читал. (надобности не было).


 
mda   (2008-12-26 01:45) [9]

Я тоже думаю что одним запросом не обойтись. Но как его написать?


 
Servy ©   (2008-12-26 02:07) [10]

> Я тоже думаю что одним запросом не обойтись. Но как его
> написать?


Я тоже неспециалист по БД, и тем более по Access, однако:

http://www.google.ru/search?q=добавление+индексированного+поля+ACCESS

по первой же ссылкой, с примером рассказывается о том, как создать индекс с помощью SQL. Если вы по каким-то причинам не можете или не хотите этого читать, то, возможно, вам следует найти профессионала, который за достойную плату решит все ваши проблемы, а вы будете продолжать работать в области, в которой разбираетесь.


 
mda   (2008-12-26 02:29) [11]

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

Я попробовал так, и у еня получилось:

try
ADOCommand.CommandText := "CREATE UNIQUE INDEX FMID ON Seans (FMID)";
ADOCommand.Execute;
except
.....
end;

Sleep(5000);

В Accesse я вижу то что мне надо. Но почему то если не дать задержку, то загибается БД. Сам эксесс предлагает ее РЕСТАВРИРОВАТЬ. Если же после
команды ADOCommand.Execute; дать задержку, то все работает. Появился новый запрос.
 Можно ли как то избавится от требуемой задержки? и
 Как программно выполнить действия Accessa "Сжать и восстановить БД"


 
Servy ©   (2008-12-26 02:49) [12]

> Servy по вашей ссылке я почему то не нашол как создать ...
> через SQL.

Прошу прощения, мой запрос выглядел вот так, я ошибся при копировании:

http://www.google.ru/search?q=добавление+индексированного+поля+ACCESS+SQL

Добавления слова SQL к ключевым словам позволяет найти, как это сделать с помощью SQL. Впрочем, судя по всему вы и так нашли, как сделать желаемое.


> В Accesse я вижу то что мне надо. Но почему то если не дать
> задержку, то загибается БД.

Как загибается, какие симптомы? Выдает ли ADO какую-нибудь ошибку? Почему между except и end многоточие? Можно ли создать маленький проект, демонстрирующий проблему, и привести его код полностью?


> Как программно выполнить действия Accessa "Сжать и восстановить
> БД"

И этот вопрос не нов, на первой же странице поисковика можно найти уйму результатов, с примерами и объяснениями, в том числе и для Delphi:
http://www.google.ru/search?q=программно+сжать+и+восстановить+БД+Access+Delphi

Рекомендуется пользоваться поисковиком перед тем, как задавать вопрос здесь ;).


 
mda   (2008-12-26 03:10) [13]

проэкт это проблемотично для меня будет. весит около 50метров. Он большой..
А троеточие между Except end; там просто восстанавливается старый SQL запрос который был у ADO,  и вываливается из функции. И ничего больше Короче вот..

 try
   ADOCommand.CommandText := S; // запрос на создание нового поля
   ADOCommand.Execute;

.. запрос на индексирование поля, то что не получалось
   S := "CREATE UNIQUE INDEX FMID ON Seans (FMID)";
   ADOCommand.CommandText := S;
   ADOCommand.Execute;
   ADOCommand.Free;
 except
   ADOCommand.Free;
   _ADO.SQL.Clear;
   if SavedSQL <> "" then
     _ADO.SQL.Add(SavedSQL); {старый SQL который был SELECT * FROM Seans}
   _ADO.Active := Opened;
   Exit;
 end;

А Загибается в смысле, что прога моя, когда успешно все создала, между Try Except - она не ругается, потому как все выполняется, идет себе работать дальше, и открывает таблицу, где буквально, только что было добавлено новое поле, и получает окно, где написано: Unrecognized database format F:\... Все последующие запуски приложения тоже самое. Беру Access выполняю функцию: Сжать и восстановить БД Access ругаетсе тем же именем+еще что то свое в три строки... Он все таки восстанавливает БД и все потом работает. Это если не ввести SLEEP(5000). Если SLEEP ввести, то все ОК.
Почему так, непонятно. Пользователь же не должен делать такие действия. надо мне позаботится. А причина мне не понятна. Но если вывести некий прогрессбар секунд на 10, может и прокатит. Хотелось бы знать все таки почему? такое происходит. Понятно лишь одно, что после создания - надо какое то время, пока ADO чегото там себе намутит с БД.


 
Servy ©   (2008-12-26 03:43) [14]

> проэкт это проблемотично для меня будет. весит около 50метров.
> Он большой..

Поэтому и была просьба сделать маленький, с такой же ошибкой :). Если ошибка в маленьком не проявляется, проблема где-то в дебрях большого.

Для начала, проверьте, что в ADOCommand.ExecuteOptions не стоит чего-нибудь вроде eoAsyncExecute, или, для уверенности, перед запуском запроса на котором все падает, принудительно сделайте
ADOCommand.ExecuteOptions := [];


 
mda   (2008-12-26 03:55) [15]

Servy - спасибо Вам за помощь. Попробовал я то что вы сказали, Не помогла. кроме того, в ADOCommand.ExecuteOptions и так нет ничего.
Меня вполне устроит даже та задержка на 5 - 10сек, что необходимо для ADO. Я выведу окно с прогрессом, пользователь один раз подождет при обновлении проги. А все остальные запуски - будут все равно происходить быстро, тка как нужное поле там уже будет. Один раз это не проблема!
Спасибо Вам за содействие... :) и на последок стишок про....

В рождество вернулся муж,
пьян, укуренный, как уж.
Грусть, усталость на лице,
и помада на яйце.
Нет ключа от иномарки,
портмоне и зажигалки,
а жена: "Ходил к блядям?"
"Нет, колядки пел людям!"
В рождество жена вернулась,
словно солнце улыбнулась.
Вся румяная с лица,
в новой шубе из песца,
крутит ключ от иномарки
и в багажнике подарки.
Муж:"Откуда? Блядовала!?"
"Нет, родной. КОЛЯДОВАЛА"

Удачи всем :)))))))))))


 
sniknik ©   (2008-12-26 08:13) [16]

mda   (26.12.08 03:55) [15]
> Меня вполне устроит даже та задержка на 5 - 10сек, что необходимо для ADO.
ошибаешься, задержка необходима не ADO, а логике/"особенностям" твоей (и только твоей) программы.
чего ты там намутил как "не специалист по бд" не знаю, но эта задержка это не нормальное поведение ADO.
у тебя там вообще общий "ADO коннект" используется? или прямо в компонентах строки подключения "вляпаны"?


 
Правильный$Вася   (2008-12-26 11:21) [17]


> Я думаю нет поводов отказывать автору в умении читать хелп.

да ты оптимист, как видно из последующего обсуждения

> или прямо в компонентах строки подключения "вляпаны"?

весьма вероятно
поэтому похоже, что индекс еще создается, а уже идет обращение к таблице из другого соединения (вернее, попытка его создания...)


 
mda   (2008-12-26 12:07) [18]

sniknik  - у меня прямо в компонентах строки подключения вписываются. В ConnectionString. Общего АDO конеста нет вообще, кроме случая, когда надо поля добавить. Он прямо в функции создается и там же уничтожается. И все. Все остальные соединения работают отдельными ADOQury компонентами. Наверное не правильно?


 
Правильный$Вася   (2008-12-26 12:26) [19]


> Наверное не правильно?

совсем неправильно
мало того, что постоянно нагружаешь сервер соединениями - отцепляниями, так еще и каждый компонент работает в своем соединении, не зная об изменениях, сделанных другими, а зачастую это и невыгодно, и неправильно


 
sniknik ©   (2008-12-26 12:30) [20]

> Наверное не правильно?
ну а сам то как думаешь?
один под машиной лежит, пятое колесо добавляет, другой в тоже время ездить пытается... и никто действия друг друга координировать и не пытается, к чему приведет?
при том что у тебя их не двое, а по количеству компонентов, и каждый с "машиной" пытается что то своё делать.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.006 c
15-1230064090
Anatoly Podgoretsky
2008-12-23 23:28
2009.02.22
ГЛЮК


2-1231761180
pavelkq
2009-01-12 14:53
2009.02.22
Соединить 2 картинки.


2-1231843476
vegarulez
2009-01-13 13:44
2009.02.22
вопрос про корректную остановку потока


15-1230264209
Slider007
2008-12-26 07:03
2009.02.22
С днем рождения ! 26 декабря 2008 пятница


13-1122929437
Кузя
2005-08-02 00:50
2009.02.22
CAD-систему реально писать под .Net?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский