На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное 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_
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> 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 @
      Подскажите, как или чем это победить?

      Видимо, разве что изменением компонента
        Цитата Voice @
        почему в дельфи программа останавливается и поле не добавляется?

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

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

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

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

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

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

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

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

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

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

                      С точки зрения телодвижений админа БД - ДА! Я и не спорю.
                        Цитата Fr0sT @

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

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

                        Что будет в результате? DDL будет в шоке если совсем не упадет в "спячку" пытаясь разобраться с юзьверями которые пытались завершить транзакции в старую структуру и с теми которые хотят новую структуру таблицы..
                        DDL операции надобно проводить без активных пользователей.
                          А что - кто-то на самом деле реально разрешает юзерам менять структуру базы? :whistle:
                            Цитата LMM @
                            А что - кто-то на самом деле реально разрешает юзерам менять структуру базы?

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

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

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

                                Тоже этого не понимаю. Но это можно, можно даже создать БД через
                                Цитата Voice @
                                ExecSQL
                                . Зачем? Это другой вопрос.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0979 ]   [ 17 queries used ]   [ Generated: 28.03.24, 18:44 GMT ]