![]() |
|
|
![]()
|
|
| grh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 26.11.2010 Репутация: нет Всего: нет |
Всем привет. У меня такая проблема. Программа, написанная на Delphi, работает с mdb-файлом. В программе предусмотрена возможность добавлять и удалять колонки в таблицы mdb-файла. При попытке добавить очередную колонку в таблицу иногда появляется сообщение: "Определено слишком много полей.", хотя на самом деле полей в таблице не так уж и много. Как избавиться от этой ошибки?
|
|||
|
||||
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Не так уж много это сколько?
И как добавляете удаляете колонки? Добавлено через 45 секунд И под колонкой подразумевается все-таки столбец или запись в таблице? -------------------- Фсё будет хорошо!!! |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Ну, вряд ли под колонкой можно иметь в виду запись в таблице. Удалить лишние поля. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| rdama |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
На другом форуме вам уже ответил.
|
|||
|
||||
| chip_and_dayl |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Вот в этом и проблема, у меня есть сомнения по
Не знаю как у вас, но мои приложения в базу добавляют/удаляют записи, А не колонки. Есть иногда случаи когда нужно программно добавить колонку, но ..... -------------------- Фсё будет хорошо!!! |
||||
|
|||||
| rdama |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Да нет. Тут именно про колонки и человеку на другом форуме я уже отписал ответ. Это просто дубль в надежде что кто-нибудь напишет решение по проще. Или просто человек постил на несколько форумов.
Хотя там пост уже сутки. Если интересно, то вот ссылка на топик. ADO: добавление и удаление полей в таблицу Это сообщение отредактировал(а) rdama - 21.10.2011, 10:54 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Сжать базу просто надо программно, что ли? Учтём, хотя не факт, что подобное пригодится в реале. Но сообщение об ошибке-то явно с полями не связано. Да и число строк в таблице MDB вроде не ограничено. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| rdama |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Причем здесь сжатие. Там приведен ссыль на статью от мелкомягких о том что это бага в Access.
С тем что существует внутренний счетчик на количество полей в таблице. И что при добавлении поля он увеличивается на 1. А при удалении не уменьшается. И приведено их решение данной проблемы. Также методы воспроизведения. Я предложил немного иное решение проблемы. Т.к. смысл всех этих манипуляций в том, что надо почистить меты для данной таблицы. Вот и все. Сжатие ничего не даст. Меты не изменятся. |
|||
|
||||
| grh |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 26.11.2010 Репутация: нет Всего: нет |
ATPokasateli: TADOTable;
ADOQuery1: TADOQuery; Добавляю 10 столбцов процедурой: procedure TForm1.BtnAddClick(Sender: TObject); var i:integer; begin for i:=1 to 10 do begin ADOQuery1.SQL.Text:='ALTER TABLE Показатели ADD COLUMN [П'+inttostr(i)+'] FLOAT'; ADOQuery1.ExecSQL end; ATPokasateli.Active:=false; ATPokasateli.Active:=true end; Удаляю все столбцы, кроме первого, процедурой: procedure TForm1.BtnClearClick(Sender: TObject); var i:integer; begin ATPokasateli.Active:=false; ATPokasateli.Active:=true; for i:=1 to ATPokasateli.FieldCount-1 do begin ADOQuery1.SQL.Text:='ALTER TABLE Показатели DROP COLUMN ['+ATPokasateli.Fields[i].FieldName+']'; ADOQuery1.ExecSQL end; ATPokasateli.Active:=false; ATPokasateli.Active:=true end; Ошибка возникает даже когда в таблице ATPokasateli всего один столбец rdama. Ваш ответ я прочитал. Спасибо. Хотелось бы узнать более простой способ, если он есть. |
|||
|
||||
| rdama |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Ну проще только пересозданием. Ибо то что в статье. С экспортом без Access не обойтись.
|
|||
|
||||
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
grh
А зачем вообще добавление и удаление столбцов? -------------------- Фсё будет хорошо!!! |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
А зачем столбцы постоянно добавлять? Может быть, тут изначально неправильное проектирование БД?
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| rdama |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 24.7.2009 Репутация: нет Всего: нет |
Данкинг, это уже другой вопрос.
Вопрос проектирования БД системы. Ясно что скорее всего здесь ошибки проектирования, раз возникла необходимость добавлять поля и удалять их. Но человек не просит помощи в проектировании. И самое главное не предоставляет информации о проекте который делает. Он задал конкретный вопрос и получил ответ. Если он захочет спросить, все ли он делает правильно. И опишет задачу. То конечно мы ему все дружно поможем. Ну а так абсолютно солидарен с вами. 100% ошибки проектирования и недостатки при постановке задачи. Раз возникла такая необходимость |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |