На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
  
> alter table дает warning, который в Delphi возвращается как raise
    на Дельфи7 через АДО пытаюсь добавить поле в таблицу базы MSSQL2000:
    ExpandedWrap disabled
      with ADOQuery do
         begin
         SQL.Text := 'alter table Table1';
         SQL.Add('add Field123 varchar(255) NULL');
         ExecSQL;
         end;

    Полей в таблице уже много и СКЛ выдает варнинг:
    ExpandedWrap disabled
      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.

    Т.е. если выполнить этот запрос на самом СКЛе, то поле добавится. Ну и появится это сообщение с предупреждением о превышении кол-ва байт на запись.

    Но почему в дельфи программа останавливается и поле не добавляется?
    Подскажите, как или чем это победить?
    Сообщение отредактировано: Bas -
    Идея пришла в его голову и теперь упорно ищет мозг
      Цитата Voice @
      Но почему в дельфи программа останавливается и поле не добавляется?

      Видимо, потому что компонент так реагирует на warning
      Цитата Voice @
      Подскажите, как или чем это победить?

      Видимо, разве что изменением компонента
      Codero ergo sum
      // Программирую — значит, существую
        Цитата Voice @
        почему в дельфи программа останавливается и поле не добавляется?

        Потомy что Management Studio использует Native SQL а не ADODB..

        Цитата Voice @
        Подскажите, как или чем это победить?

        Из своей программы создай хранимую процедуру, которая добавляет нужное поле.
        Выполни хранимую процедуру из своей программы.
        Мои религиозные убеждения не позволяют мне комментировать код.
        Моё мировоззренье таково: в программе комментария ни одного!
          Цитата MIF @
          Потомy что Management Studio использует Native SQL а не ADODB..

          Точно? Если взять другого провайдера ?
          Цитата MIF @
          Выполни хранимую процедуру из своей программы.

          И это будет правильно. Модификацию параметров таблиц лучше проводить на сервере а не на клиенте, и желательно "выкинуть" ВСЕХ активных пользователей...., а то проблем может быть гораздо больше...
          Сообщение отредактировано: Bas -
          Цель - ничто , процесс - все.
            Цитата Bas @
            И это будет правильно. Модификацию параметров таблиц лучше проводить на сервере а не на клиенте, и желательно "выкинуть" ВСЕХ активных пользователей...., а то проблем может быть гораздо больше...

            Что значит "проводить на сервере"? Залезть на сервер по удаленке? И чем это лучше?

            Может, у ТС что-то типа админской софтины. А она должна уметь манипулировать метаданными без всяких костылей типа хранимок и прочего.
            Сообщение отредактировано: Fr0sT -
            Codero ergo sum
            // Программирую — значит, существую
              Тогда софтину нвдо переписать на .NET языке. SqlConnection также использует NativeSql
              Мои религиозные убеждения не позволяют мне комментировать код.
              Моё мировоззренье таково: в программе комментария ни одного!
                Цитата Fr0sT @
                Что значит "проводить на сервере"? Залезть на сервер по удаленке? И чем это лучше?

                Вообще-то при любых манипуляциях по изменению структуры данных реально работающей БД необходимо отключить всех её юзеров. А то можно и до дедлайна доиграцца.
                Цитата Fr0sT @
                Может, у ТС что-то типа админской софтины. А она должна уметь манипулировать метаданными без всяких костылей типа хранимок и прочего.
                Ага, голимый код на клиентах, а на сервере - ни строчки бизнес-правил и админ парится из...как он там на MS SQL... Даррагая редакция...етс...
                Цитата MIF @
                Тогда софтину нвдо переписать на .NET языке
                Радиус кривизны рук надо постараться к бесконечности приблизить, а не с бубном скакать. Независимо от языка и способа коннекта к БД.
                ...one shot at glory in the crossfire overhead...© JP
                  C бубном можно долго скакать...

                  Думаю что проблема не в "бубне" а в структуре таблиц.
                  Сообщение отредактировано: Bas -
                  Цель - ничто , процесс - все.
                    Цитата LMM @
                    Вообще-то при любых манипуляциях по изменению структуры данных реально работающей БД необходимо отключить всех её юзеров.

                    "Отключить юзеров" и "проводить на сервере" это таки две большие разницы
                    Codero ergo sum
                    // Программирую — значит, существую
                      Цитата Fr0sT @
                      "Отключить юзеров" и "проводить на сервере" это таки две большие разницы

                      С точки зрения телодвижений админа БД - ДА! Я и не спорю.
                      ...one shot at glory in the crossfire overhead...© JP
                        Цитата Fr0sT @

                        "Отключить юзеров" и "проводить на сервере" это таки две большие разницы

                        Таки Да.
                        Ex. Два(3,4,5...) пользователя пытаются проделать
                        Цитата Voice @
                        SQL.Add('add Field123 varchar(255) NULL');
                        ExecSQL;

                        Что будет в результате? DDL будет в шоке если совсем не упадет в "спячку" пытаясь разобраться с юзьверями которые пытались завершить транзакции в старую структуру и с теми которые хотят новую структуру таблицы..
                        DDL операции надобно проводить без активных пользователей.
                        Цель - ничто , процесс - все.
                          А что - кто-то на самом деле реально разрешает юзерам менять структуру базы? :whistle:
                          ...one shot at glory in the crossfire overhead...© JP
                            Цитата LMM @
                            А что - кто-то на самом деле реально разрешает юзерам менять структуру базы?

                            На темплате таблицах можно, но используется ОЧЕНЬ даже очень РЕДКО , почти НИКОГДА. Это - чесать правой рукой левое ухо.

                            Добавлено
                            Хотя... это возможно но надо соблюдать определенные правила.
                            Цель - ничто , процесс - все.
                              Цитата Bas @
                              Это - чесать правой рукой левое ухо
                              Это очень мягко сказано! :D

                              Цитата LMM @
                              Хотя... это возможно но надо соблюдать определенные правила
                              Не-а, я на такое не пойду никогда. Потом гемору не оберёшься.
                              Сообщение отредактировано: LMM -
                              ...one shot at glory in the crossfire overhead...© JP
                                Цитата LMM @
                                Цитата LMM @ Сегодня, 21:20
                                Хотя... это возможно но надо соблюдать определенные правила
                                Не-а, я на такое не пойду никогда. Потом гемору не оберёшься.

                                Тоже этого не понимаю. Но это можно, можно даже создать БД через
                                Цитата Voice @
                                ExecSQL
                                . Зачем? Это другой вопрос.
                                Цель - ничто , процесс - все.
                                  Цитата Bas @
                                  Зачем? Это другой вопрос.
                                  Разве что - в учебных целях. Попробовать что ли создать оракловую базу скриптом? :D Со всеми причиндалами...
                                  ...one shot at glory in the crossfire overhead...© JP
                                    Цитата LMM @
                                    Разве что - в учебных целях.


                                    Мир огромен и разнообразен. Ни oдин человек не может об’ять и понять все детали мира.

                                    ЗЫ: MS распространяет апгрейты своего продукта Great Planes не путем передачи скриттов администраторам баз даннных клиентов, а путем рассылки экзешника, который выполняет DDL скрипты.

                                    ЗЫЫ: Ето - как черный лебедь. Никто ме мог и подумать, что черные лебеди существуют, пока не открылы Австралию.
                                    Сообщение отредактировано: MIF -
                                    Мои религиозные убеждения не позволяют мне комментировать код.
                                    Моё мировоззренье таково: в программе комментария ни одного!
                                      Мож в холивары переберёмся? :popcorn:
                                      ...one shot at glory in the crossfire overhead...© JP
                                        Да уж, давайте без специфики отечественных форумов - человек спрашивает, как сделать X, а ему многословно доказывают, что он дурак :)
                                        Codero ergo sum
                                        // Программирую — значит, существую
                                          Цитата Fr0sT @
                                          Да уж, давайте без специфики отечественных форумов - человек спрашивает, как сделать X

                                          Х это мало, возьмем Z. Мы предложили варианты.

                                          Добавлено
                                          Цитата Fr0sT @
                                          что он дура

                                          Это Форум, тут нет дураков ,тут есть общение ....
                                          Цель - ничто , процесс - все.
                                            уххх, понаписали :)

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

                                            так вот. В этих xml-файлах иногда появляются лишние поля (атрибуты). На всякий случай (для будущих реализаций) эти поля добавляются в т.фактов.
                                            И при попытке добавить поле, появляется варнинг от СКЛя, который вызывает исключение в приложении. Об этом и была создана эта тема.
                                            Идея пришла в его голову и теперь упорно ищет мозг
                                              Цитата Voice @
                                              Об этом и была создана эта тема.


                                              Цитата Voice @
                                              на Дельфи7 через АДО пытаюсь добавить поле в таблицу базы MSSQL2000:

                                              Где внешний источник? Даже намека нет на xml источника ADO(ActiveX Data Objects).
                                              Вот и ответы.
                                              Цель - ничто , процесс - все.
                                                Цитата Bas @
                                                Где внешний источник? Даже намека нет на xml источника ADO(ActiveX Data Objects).

                                                Я так понял, у него нет именно источника xml, просто читает. Потому и не упоминал
                                                Codero ergo sum
                                                // Программирую — значит, существую
                                                  Voice
                                                  Я в базе от MS в Business Contact Manager видел такой пример:
                                                  Они сделали заранее лишних 50 полей, в другой таблице названия этих полей и кол-во используемых. И если нужно новое поле,они физически не изменяет базу.
                                                  "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                                                    Цитата ^D^ima @
                                                    Они сделали заранее
                                                    Всё лучше, чем по живому менять структуру!
                                                    ...one shot at glory in the crossfire overhead...© JP
                                                      Добавь таблицу с тремя полями: айди записи в первой таблице, имя тега, содержание тега. Все неоые теги можно туда записывать без необходимости изменять структуру на ходу.
                                                      А новые поля можно добавлять по результатам анализа содержания таблицы. Если тегипоявился один раз, то его можно проигнорировать, а если часто, то включить в основную таблицу.
                                                      Мои религиозные убеждения не позволяют мне комментировать код.
                                                      Моё мировоззренье таково: в программе комментария ни одного!
                                                        Цитата LMM @
                                                        Всё лучше, чем по живому менять структуру!

                                                        +++++

                                                        Цитата ^D^ima @
                                                        Они сделали заранее лишних 50 полей

                                                        Зачем??? Вы не помните когда 256М это было "счастье"
                                                        Цитата ^D^ima @
                                                        И если нужно новое поле,они физически не изменяет базу.

                                                        Если надо больше параметров , чем Выше изложеннон?
                                                        Цель - ничто , процесс - все.
                                                          Больше 50 кастомных полей не разрешается
                                                          "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                                                            Цитата Bas @
                                                            Где внешний источник? Даже намека нет на xml источника ADO(ActiveX Data Objects).
                                                            Вот и ответы.


                                                            Цитата Fr0sT @
                                                            Я так понял, у него нет именно источника xml, просто читает. Потому и не упоминал

                                                            правильно. Xml я обрабатываю сам.
                                                            Потом формирую запрос вида:
                                                            ExpandedWrap disabled
                                                              insert into (...)
                                                              select 'qwe', 'rty'...

                                                            этот запрос уходит через ADO. Если я вижу лишнее поле, то пытаюсь его добавить (ессно ПЕРЕД вставкой данных). Ну и там вываливается вышеописанная ошибка.

                                                            Цитата MIF @
                                                            Добавь таблицу с тремя полями: айди записи в первой таблице, имя тега, содержание тега. Все неоые теги можно туда записывать без необходимости изменять структуру на ходу.

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

                                                            LkpFields:
                                                            idFieldName
                                                            1Field1
                                                            2Field2
                                                            ......


                                                            MainTbl
                                                            RowIdFieldIdAValue
                                                            11aaa
                                                            12bbb
                                                            21ccc


                                                            Да, я думал так сделать. Но тогда имеем гемор с получением плоских данных (таблица фактов) для олап-куба.
                                                            Т.е. преобразовать можно, но получим вышеописанные проблемы с добавлением кучи новых полей.

                                                            Т.е. на выходе мы все равно должны получить плоскую таблицу. Так проще это делать сразу.
                                                            Идея пришла в его голову и теперь упорно ищет мозг
                                                              Цитата Voice @
                                                              на выходе мы все равно должны получить плоскую таблицу
                                                              Или результат запроса из мастер-таблицы и связанных с ней данных в ещё каких-то таблицах.
                                                              ...one shot at glory in the crossfire overhead...© JP
                                                                Цитата LMM @
                                                                Или результат запроса из мастер-таблицы и связанных с ней данных в ещё каких-то таблицах.

                                                                че? вообще не понял
                                                                Сообщение отредактировано: Voice -
                                                                Идея пришла в его голову и теперь упорно ищет мозг
                                                                  Voice,а чем подход с хранимой процедурой не устроил?
                                                                  Мои религиозные убеждения не позволяют мне комментировать код.
                                                                  Моё мировоззренье таково: в программе комментария ни одного!
                                                                    В свете задачи вариант с заранее зарезервированными полями кажется более разумным, хотя и потребует некоторых дополнительных действий по сопоставлению безликих полей конкретным атрибутам. Если же говорить о сабже, то совет прежний - либо изменить исходники компонента, либо попробовать другой компонент.
                                                                    Сообщение отредактировано: Fr0sT -
                                                                    Codero ergo sum
                                                                    // Программирую — значит, существую
                                                                      Цитата ^D^ima @
                                                                      Они сделали заранее лишних 50 полей, в другой таблице названия этих полей и кол-во используемых.

                                                                      Скромный вопрос. Зачем???
                                                                      Цель - ничто , процесс - все.
                                                                        В программе есть настраиваемые поля пользователя. Мы можем на разные формы добавить до 50 кастомных полей. Очень удобно между прочем
                                                                        "Воля - это то, что заставляет тебя побеждать, когда твой рассудок говорит тебе, что ты повержен" Карлос Кастанеда
                                                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                        0 пользователей:


                                                                        Рейтинг@Mail.ru
                                                                        [ Script Execution time: 0,2754 ]   [ 18 queries used ]   [ Generated: 26.08.19, 00:31 GMT ]