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

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

31.03.2020, 16:24. Показов 1109. Ответов 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,142
Записей в блоге: 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
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 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
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,353
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru