Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62

FIREDAC + Access. Ошибка Drop Table

31.03.2020, 16:24. Показов 1130. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Пытаюсь удалить таблицу из БД Access:

C++
1
2
3
4
5
6
7
FDTable1->Close();
FDTable2->Close();
FDTable3->Close();
 
    SQLText = "DROP TABLE "+FDTable1->TableName ;
    CRI_db_editor->FDQuery1->SQL->Text=SQLText;
    CRI_db_editor->FDQuery1->ExecSQL();
Выскакивает ошибка

При попытке выполнить такой же запрос в компоненте FDQuery (не запуская приложение) - он выполняется.
Что может быть не так?
Миниатюры
FIREDAC + Access. Ошибка Drop Table  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2020, 16:24
Ответы с готовыми решениями:

DROP TABLE
Здравствуйте! Как можно прописать в запросе (-управление?) удаление всех созданных таблиц (например: таб1,таб2,таб3...таб15) при этом...

Ошибка с базой данных Access: Свойство Table для DataMember не найдено в DataSource
При загрузке формы появляется ошибка "Свойство Table для DataMember не найдено в DataSource" Table это название таблицы,может кто...

DROOP TABLE и CREATE TABLE в ACCESS
Как использовать конструкции DROOP TABLE и CREATE TABLE в ACCESS? собственно ситуация такова: есть локальная база на аксесе...

13
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
31.03.2020, 16:37
Доброго, с большой вероятностью что таблицу держат компоненты "кверики" что в приложении....они постоянно опрашивают БД
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
31.03.2020, 17:35  [ТС]
У меня есть DBEditы, которые связаны с FDTable1, но когда я делаю Close таблице - связь же теряется? Или в них дело?
Больше зависимых объектов не нашла.

Добавлено через 52 минуты
Методом исключения выяснилось, что таблица не удаляется, если TableName ей присваивается программно. Если имя таблицы задано изначально в свойствах FDTable, то она удаляется.
Имя задаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TStringList *all_tables = new TStringList;
FDConnection1->GetTableNames("","","",all_tables);
 
for(uint8_t i=0; i<all_tables->Count; i++)
{
all_tables->Strings[i]=all_tables->Strings[i].Delete(1,1);
all_tables->Strings[i]=all_tables->Strings[i].Delete(all_tables->Strings[i].Length(),1);
ComboBox_force->Items->Add(all_tables->Strings[i]);
 
}
ComboBox_force->ItemIndex=0;
FDTable1->Close();
FDTable1->TableName = ComboBox_force->Text;
FDTable1->Open();
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
31.03.2020, 17:50
tus1, а что за нужда удалять целиком таблицу? Как правило, это говорит или о неверном проектировании БД или о неверном алгоритме приложения или о том и другом вместе...
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
31.03.2020, 19:23  [ТС]
В моем приложении пользователь создает и удаляет ненужные однотипные таблицы. Имена таблиц - это названия тестируемых девайсов, поля - это названия параметров, записи - это названия тестов. Иного решения, чем создавать отдельные таблицы под каждый девайс не вижу.

Добавлено через 2 минуты
Как все-таки правильно удалить таблицу?

Добавлено через 1 час 11 минут
Решение нашлось.

Перед тем, как выполнить DROP Table, делаю переконнект:
C++
1
2
3
4
FDTable1->Close();
 
 FDConnection1->Connected=false;
 FDConnection1->Connected=true;
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
01.04.2020, 11:12
Цитата Сообщение от tus1 Посмотреть сообщение
Решение нашлось.
А не приходило Вам другое решение, более правильное с точки зрения теории БД?
иметь не одну - а 2 таблицы.
1 таблица "Устройства": состоит из минимум 2-х полей: ID и наименование устройства
2 таблица - то что Вы написали (поля - это названия параметров, записи - это названия тестов) но с добавленным полем ID_Device, которое будет однозначно идентифицировать тестируемое устройство... Таблицы связаны между собой отношением "один-ко-многим". Можно добавить поле типа дата/время - тогда эту таблицу можно будет использовать в качестве журнала, когда какое устройство проходило тестирование...
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
01.04.2020, 13:12  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
А не приходило Вам другое решение, более правильное с точки зрения теории БД?
иметь не одну - а 2 таблицы.
1 таблица "Устройства": состоит из минимум 2-х полей: ID и наименование устройства
2 таблица - то что Вы написали (поля - это названия параметров, записи - это названия тестов) но с добавленным полем ID_Device, которое будет однозначно идентифицировать тестируемое устройство... Таблицы связаны между собой отношением "один-ко-многим". Можно добавить поле типа дата/время - тогда эту таблицу можно будет использовать в качестве журнала, когда какое устройство проходило тестирование...
Тогда получается, что мне нужно ID устройства проставить во всех строках (записях) тестов? Мне кажется, это тоже не совсем корректно...
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
01.04.2020, 13:15
Цитата Сообщение от tus1 Посмотреть сообщение
Мне кажется, это тоже не совсем корректно
Тебе это кажется, поскольку ты плохо знаком/совсем незнаком с теорией БД
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
01.04.2020, 13:27  [ТС]
Цитата Сообщение от Grossmeister Посмотреть сообщение
Тебе это кажется, поскольку ты плохо знаком/совсем незнаком с теорией БД
Возможно...

Добавлено через 10 минут
Цитата Сообщение от D1973 Посмотреть сообщение
А не приходило Вам другое решение, более правильное с точки зрения теории БД?
иметь не одну - а 2 таблицы.
1 таблица "Устройства": состоит из минимум 2-х полей: ID и наименование устройства
2 таблица - то что Вы написали (поля - это названия параметров, записи - это названия тестов) но с добавленным полем ID_Device, которое будет однозначно идентифицировать тестируемое устройство... Таблицы связаны между собой отношением "один-ко-многим". Можно добавить поле типа дата/время - тогда эту таблицу можно будет использовать в качестве журнала, когда какое устройство проходило тестирование...
Все равно, не совсем поняла, в чем правильность такого решения? Мне все равно придется заводить много таблиц с параметрами для каждого устройства. Только идентификация будет по ID. Так почему же просто не назвать таблицу названием устройства?
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
01.04.2020, 13:34
Цитата Сообщение от tus1 Посмотреть сообщение
Мне все равно придется заводить много таблиц с параметрами для каждого устройства
Отнюдь
Тем более, что если тебе приходится писать SQL, заранее не зная наименование таблиц, то это возможно только при использовании динамического SQL, что просаживает производительность работы БД. Советую таки что-то почитать из теории БД, иначе это подход сильно дилетантский.
0
01.04.2020, 13:48

Не по теме:


У меня так бывший коллега, делал систему анкетирования...И решил с чего то под каждый опрос создавать группу таблиц....когда он ушел, смотрим а БД занимает почти терабайт.

0
01.04.2020, 15:05

Не по теме:

Цитата Сообщение от tus1 Посмотреть сообщение
не совсем поняла, в чем правильность такого решения?
Ну что я могу сказать... Если Ваши костыли Ваших работодателей устраивают... Ну и нехай...

0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
01.04.2020, 17:11  [ТС]
Ладно, уговорили. Буду пересматривать систему
0
Заблокирован
09.04.2020, 14:04
Цитата Сообщение от tus1 Посмотреть сообщение
Возможно...

Добавлено через 10 минут


Все равно, не совсем поняла, в чем правильность такого решения? Мне все равно придется заводить много таблиц с параметрами для каждого устройства. Только идентификация будет по ID. Так почему же просто не назвать таблицу названием устройства?
Правильно подсказывают, что много таблиц это не есть хорошо))) Зачем плодить кучу лишних операций? Создание и удаление таблиц в базе - это отдельный тип операций обновления, не возвращающий набор данных. Не нужен этот лишний тип операций. А нужно всего две таблицы. Это будет проще по любому.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2020, 14:04
Помогаю со студенческими работами здесь

Drop table и Close existing connections
Добрый день. Как мне удалить скриптом БД так чтобы с начало были закрыты все соединения, а и потом только удаление БД. В интернете...

Необходимо ли очищать удаляемую таблицу перед использованием оператора drop table?
1) В учебнике Граббера по SQL говорится, что перед исопльзованием оператора DROP TABLE необходимо очистить удаляемую таблицу (DELETE...

Ошибка FireDac или драйвер ODBC?
Здравствуйте! Вот второй день бьюсь с проблемой драйвера Microsoft ODBC. Работает все через FireDac Компоненты: FDConnection + FDQuery +...

Ошибка в коде программы RedBean: Base table or view already exists: 1050 Table 'users' already exists
Я пишу регистрацию на сайте через программу &quot;Red Bean&quot; Выдаёт такую ошибку: Fatal error: Uncaught - SQLSTATE: Base table or view...

Cannot drop or replace a type with type or table dependents
Привет . Борюсь с ошибкой CREATE OR REPLACE TYPE person_typ AS OBJECT ( name VARCHAR2(30) ) NOT FINAL / CREATE TYPE...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru