Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.14.141.228] |
|
Сообщ.
#1
,
|
|
|
на Дельфи7 через АДО пытаюсь добавить поле в таблицу базы MSSQL2000:
with ADOQuery do begin SQL.Text := 'alter table Table1'; SQL.Add('add Field123 varchar(255) NULL'); ExecSQL; end; Полей в таблице уже много и СКЛ выдает варнинг: Warning: The table 'Table1' has been created but its maximum row size (54548) exceeds the maximum number of bytes per row (8060). INSERT or UPDATE of a row in this table will fail if the resulting row length exceeds 8060 bytes. Но в дельфи на строке AdoQuery.ExecSQL вылезает RAISE. Т.е. если выполнить этот запрос на самом СКЛе, то поле добавится. Ну и появится это сообщение с предупреждением о превышении кол-ва байт на запись. Но почему в дельфи программа останавливается и поле не добавляется? Подскажите, как или чем это победить? |
Сообщ.
#2
,
|
|
|
Цитата Voice @ Но почему в дельфи программа останавливается и поле не добавляется? Видимо, потому что компонент так реагирует на warning Цитата Voice @ Подскажите, как или чем это победить? Видимо, разве что изменением компонента |
Сообщ.
#3
,
|
|
|
Цитата Voice @ почему в дельфи программа останавливается и поле не добавляется? Потомy что Management Studio использует Native SQL а не ADODB.. Цитата Voice @ Подскажите, как или чем это победить? Из своей программы создай хранимую процедуру, которая добавляет нужное поле. Выполни хранимую процедуру из своей программы. |
Сообщ.
#4
,
|
|
|
Цитата MIF @ Потомy что Management Studio использует Native SQL а не ADODB.. Точно? Если взять другого провайдера ? Цитата MIF @ Выполни хранимую процедуру из своей программы. И это будет правильно. Модификацию параметров таблиц лучше проводить на сервере а не на клиенте, и желательно "выкинуть" ВСЕХ активных пользователей...., а то проблем может быть гораздо больше... |
Сообщ.
#5
,
|
|
|
Цитата Bas @ И это будет правильно. Модификацию параметров таблиц лучше проводить на сервере а не на клиенте, и желательно "выкинуть" ВСЕХ активных пользователей...., а то проблем может быть гораздо больше... Что значит "проводить на сервере"? Залезть на сервер по удаленке? И чем это лучше? Может, у ТС что-то типа админской софтины. А она должна уметь манипулировать метаданными без всяких костылей типа хранимок и прочего. |
Сообщ.
#6
,
|
|
|
Тогда софтину нвдо переписать на .NET языке. SqlConnection также использует NativeSql
|
Сообщ.
#7
,
|
|
|
Цитата Fr0sT @ Что значит "проводить на сервере"? Залезть на сервер по удаленке? И чем это лучше? Вообще-то при любых манипуляциях по изменению структуры данных реально работающей БД необходимо отключить всех её юзеров. А то можно и до дедлайна доиграцца. Цитата Fr0sT @ Ага, голимый код на клиентах, а на сервере - ни строчки бизнес-правил и админ парится из...как он там на MS SQL... Даррагая редакция...етс...Может, у ТС что-то типа админской софтины. А она должна уметь манипулировать метаданными без всяких костылей типа хранимок и прочего. Цитата MIF @ Радиус кривизны рук надо постараться к бесконечности приблизить, а не с бубном скакать. Независимо от языка и способа коннекта к БД. Тогда софтину нвдо переписать на .NET языке |
Сообщ.
#8
,
|
|
|
C бубном можно долго скакать...
Думаю что проблема не в "бубне" а в структуре таблиц. |
Сообщ.
#9
,
|
|
|
Цитата LMM @ Вообще-то при любых манипуляциях по изменению структуры данных реально работающей БД необходимо отключить всех её юзеров. "Отключить юзеров" и "проводить на сервере" это таки две большие разницы |
Сообщ.
#10
,
|
|
|
Цитата Fr0sT @ "Отключить юзеров" и "проводить на сервере" это таки две большие разницы С точки зрения телодвижений админа БД - ДА! Я и не спорю. |
Сообщ.
#11
,
|
|
|
Цитата Fr0sT @ "Отключить юзеров" и "проводить на сервере" это таки две большие разницы Таки Да. Ex. Два(3,4,5...) пользователя пытаются проделать Цитата Voice @ SQL.Add('add Field123 varchar(255) NULL'); ExecSQL; Что будет в результате? DDL будет в шоке если совсем не упадет в "спячку" пытаясь разобраться с юзьверями которые пытались завершить транзакции в старую структуру и с теми которые хотят новую структуру таблицы.. DDL операции надобно проводить без активных пользователей. |
Сообщ.
#12
,
|
|
|
А что - кто-то на самом деле реально разрешает юзерам менять структуру базы?
|
Сообщ.
#13
,
|
|
|
Цитата LMM @ А что - кто-то на самом деле реально разрешает юзерам менять структуру базы? На темплате таблицах можно, но используется ОЧЕНЬ даже очень РЕДКО , почти НИКОГДА. Это - чесать правой рукой левое ухо. Добавлено Хотя... это возможно но надо соблюдать определенные правила. |
Сообщ.
#14
,
|
|
|
Цитата Bas @ Это очень мягко сказано! Это - чесать правой рукой левое ухо Цитата LMM @ Не-а, я на такое не пойду никогда. Потом гемору не оберёшься. Хотя... это возможно но надо соблюдать определенные правила |
Сообщ.
#15
,
|
|
|
Цитата LMM @ Цитата LMM @ Сегодня, 21:20 Хотя... это возможно но надо соблюдать определенные правила Не-а, я на такое не пойду никогда. Потом гемору не оберёшься. Тоже этого не понимаю. Но это можно, можно даже создать БД через Цитата Voice @ . Зачем? Это другой вопрос. ExecSQL |
Сообщ.
#16
,
|
|
|
Цитата Bas @ Разве что - в учебных целях. Попробовать что ли создать оракловую базу скриптом? Со всеми причиндалами... Зачем? Это другой вопрос. |
Сообщ.
#17
,
|
|
|
Цитата LMM @ Разве что - в учебных целях. Мир огромен и разнообразен. Ни oдин человек не может об’ять и понять все детали мира. ЗЫ: MS распространяет апгрейты своего продукта Great Planes не путем передачи скриттов администраторам баз даннных клиентов, а путем рассылки экзешника, который выполняет DDL скрипты. ЗЫЫ: Ето - как черный лебедь. Никто ме мог и подумать, что черные лебеди существуют, пока не открылы Австралию. |
Сообщ.
#18
,
|
|
|
Мож в холивары переберёмся?
|
Сообщ.
#19
,
|
|
|
Да уж, давайте без специфики отечественных форумов - человек спрашивает, как сделать X, а ему многословно доказывают, что он дурак
|
Сообщ.
#20
,
|
|
|
Цитата Fr0sT @ Да уж, давайте без специфики отечественных форумов - человек спрашивает, как сделать X Х это мало, возьмем Z. Мы предложили варианты. Добавлено Цитата Fr0sT @ что он дура Это Форум, тут нет дураков ,тут есть общение .... |
Сообщ.
#21
,
|
|
|
уххх, понаписали
объясняю: есть некий сервис, в котором появляются данные в xml-файлах. моя софтина должна выкачивать новые файлы, формировать из них плоскую таблицу и заливать эти данные в одну большую таблицу фактов для олап-куба. так вот. В этих xml-файлах иногда появляются лишние поля (атрибуты). На всякий случай (для будущих реализаций) эти поля добавляются в т.фактов. И при попытке добавить поле, появляется варнинг от СКЛя, который вызывает исключение в приложении. Об этом и была создана эта тема. |
Сообщ.
#22
,
|
|
|
Цитата Voice @ Об этом и была создана эта тема. Цитата Voice @ на Дельфи7 через АДО пытаюсь добавить поле в таблицу базы MSSQL2000: Где внешний источник? Даже намека нет на xml источника ADO(ActiveX Data Objects). Вот и ответы. |
Сообщ.
#23
,
|
|
|
Цитата Bas @ Где внешний источник? Даже намека нет на xml источника ADO(ActiveX Data Objects). Я так понял, у него нет именно источника xml, просто читает. Потому и не упоминал |
Сообщ.
#24
,
|
|
|
Voice
Я в базе от MS в Business Contact Manager видел такой пример: Они сделали заранее лишних 50 полей, в другой таблице названия этих полей и кол-во используемых. И если нужно новое поле,они физически не изменяет базу. |
Сообщ.
#25
,
|
|
|
Цитата ^D^ima @ Всё лучше, чем по живому менять структуру! Они сделали заранее |
Сообщ.
#26
,
|
|
|
Добавь таблицу с тремя полями: айди записи в первой таблице, имя тега, содержание тега. Все неоые теги можно туда записывать без необходимости изменять структуру на ходу.
А новые поля можно добавлять по результатам анализа содержания таблицы. Если тегипоявился один раз, то его можно проигнорировать, а если часто, то включить в основную таблицу. |
Сообщ.
#27
,
|
|
|
Цитата LMM @ Всё лучше, чем по живому менять структуру! +++++ Цитата ^D^ima @ Они сделали заранее лишних 50 полей Зачем??? Вы не помните когда 256М это было "счастье" Цитата ^D^ima @ И если нужно новое поле,они физически не изменяет базу. Если надо больше параметров , чем Выше изложеннон? |
Сообщ.
#28
,
|
|
|
Больше 50 кастомных полей не разрешается
|
Сообщ.
#29
,
|
|||||||||||||||||||||
|
Цитата Bas @ Где внешний источник? Даже намека нет на xml источника ADO(ActiveX Data Objects). Вот и ответы. Цитата Fr0sT @ Я так понял, у него нет именно источника xml, просто читает. Потому и не упоминал правильно. Xml я обрабатываю сам. Потом формирую запрос вида: insert into (...) select 'qwe', 'rty'... этот запрос уходит через ADO. Если я вижу лишнее поле, то пытаюсь его добавить (ессно ПЕРЕД вставкой данных). Ну и там вываливается вышеописанная ошибка. Цитата MIF @ Добавь таблицу с тремя полями: айди записи в первой таблице, имя тега, содержание тега. Все неоые теги можно туда записывать без необходимости изменять структуру на ходу. в смысле, держать не плоскую таблицу, а ... длинную? (хз, как оно по-научному называется) т.е. будет справочник полей и таблица с данными? LkpFields:
MainTbl
Да, я думал так сделать. Но тогда имеем гемор с получением плоских данных (таблица фактов) для олап-куба. Т.е. преобразовать можно, но получим вышеописанные проблемы с добавлением кучи новых полей. Т.е. на выходе мы все равно должны получить плоскую таблицу. Так проще это делать сразу. |
Сообщ.
#30
,
|
|
|
Цитата Voice @ Или результат запроса из мастер-таблицы и связанных с ней данных в ещё каких-то таблицах. на выходе мы все равно должны получить плоскую таблицу |
Сообщ.
#31
,
|
|
|
Цитата LMM @ Или результат запроса из мастер-таблицы и связанных с ней данных в ещё каких-то таблицах. че? вообще не понял |
Сообщ.
#32
,
|
|
|
Voice,а чем подход с хранимой процедурой не устроил?
|
Сообщ.
#33
,
|
|
|
В свете задачи вариант с заранее зарезервированными полями кажется более разумным, хотя и потребует некоторых дополнительных действий по сопоставлению безликих полей конкретным атрибутам. Если же говорить о сабже, то совет прежний - либо изменить исходники компонента, либо попробовать другой компонент.
|
Сообщ.
#34
,
|
|
|
Цитата ^D^ima @ Они сделали заранее лишних 50 полей, в другой таблице названия этих полей и кол-во используемых. Скромный вопрос. Зачем??? |
Сообщ.
#35
,
|
|
|
В программе есть настраиваемые поля пользователя. Мы можем на разные формы добавить до 50 кастомных полей. Очень удобно между прочем
|