Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
1

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

14.09.2009, 09:23. Показов 4687. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день ребята!
Подскажите как можно проверить наличие таблицы с заданным названием в БД Access через ADO
Заранее благодарен за ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2009, 09:23
Ответы с готовыми решениями:

Как проверить наличие запсис с заданным значением?
Хочу проверить, есть ли запись с заданным значением. Использую mysqli. Для проверки наличия записи...

Проверить проигрывается ли анимация с заданным названием
Как сделать условие, если проигрывается анимация с таким-то названием то тогда... ? Заранее...

Как проверить наличие таблицы в БД?
Как проверить существует ли в БД таблица или представление? If () { } в круглых скобках что...

Как выдать посетителю файл с заданным названием?
допустим файл хранится в папке с названием abrakadabra.jpg, как его можно выдать с названием...

17
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
14.09.2009, 09:28 2
TADOConnection::GetTableNames
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.09.2009, 12:09  [ТС] 3
Сделал через эту функцию и вывел в комбик только не понятно почему но оно 3 раза выводит одно и тоже

C++
1
2
3
4
5
6
7
8
9
10
11
try{
ComboBox1->Items->Clear();
ADOConnection1->GetTableNames(SL, false);
for (int index = 0; index < SL->Count; index++)
 {
ComboBox1->Items->AddStrings(SL);
 }
 
}
catch(...){}
delete SL;
3 таблицы и выводятся они три раза, почему 3 раза не понятно.
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.09.2009, 12:14 4
убери цикл и кол-во повторений сразу же уменьшится
1
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
14.09.2009, 12:21  [ТС] 5
А почему 3 раза я же не где не указывал что проходить надо 3 раза или он подумал, что уменя 3 таблицы и это означает, что надо проходить 3 раза.

Добавлено через 2 минуты
Убрал цикл действительно стало показывать один раз три таблицы. Спасибо. А можно как-то сравнить с названием конкретной таблицы и вывести сообщение что такая таблица есть.
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.09.2009, 12:26 6
метод IndexOf есть в TStringList... читай хелп...

а если ты не понял, почему три раза три таблицы добавил, объясню: ты добавляешь целый список таблиц кол-во таблиц раз, было бы таблиц 5 - пять раз дублировались данные... и вообще думаешь ты, а проц просто выполняет команды, которые ты ему указал в коде делать... если бы ты построчно добавлял, тоже было бы нормально...
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2009, 11:38  [ТС] 7
Пишу такой код чтобы названия таблиц в БД попадали в ComboBox

C++
1
2
3
4
5
6
7
8
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
ComboBox1->Items->Clear();
TStringList *SL = new TStringList;
ADOConnection1->GetTableNames(SL, false);
ComboBox1->Items->AddStrings(SL);
delete SL;
}
А он мне выводит в первой строке ComboBoxа кракзяблы
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
02.10.2009, 11:49 8
Sasha,это не кракозяблы, а судя по-всему временная таблица, порожденная запросом, которым вы выводите данные в дбгрид
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2009, 11:50  [ТС] 9
Как-то это исправить можно
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
02.10.2009, 11:54 10
Sasha, ну можно либо изменить твое формирование списка и во время добавления проверять, нет ли ~ перед названием таблицы. либо добавлять по-воему, а потом пробежаться по списку и удалить такие названия, а еще лучше до начала работу с программой в конструкторе создавать список, тогда временных таблиц еще не будет
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2009, 12:21  [ТС] 11
Поставил этот код на кнопку и в конструкторе, не помогло всё равно кракозяблы
Мистика наверно какая-то.
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
02.10.2009, 12:24 12
Sasha, покажи конструктор
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2009, 12:27  [ТС] 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
 DataSource1->OnDataChange = DataSource1DataChange;
 Application->OnMessage = OnApplicationMessage;
 String WayToBase=ExtractFilePath(Application->ExeName)+"Компьютерная база.mdb";
 ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+WayToBase+";Persist Security Info=True";
 DataSource1->OnDataChange = DataSource1DataChange;
 ADOConnection1->Connected = true;
 ADOQuery1->ConnectionString = ADOConnection1->ConnectionString;
 DBGrid1->Options = TDBGridOptions(DBGrid1->Options) >> dgIndicator >> dgTitles >> dgColLines >> dgRowLines >> dgColumnResize >> dgEditing;
 DataSource1->DataSet = ADOQuery1;
 DBGrid1->DataSource = DataSource1;
 DBNavigator1->DataSource = DataSource1;
 ADOQuery2->ConnectionString = ADOConnection1->ConnectionString;
 ADOQuery2->Active = false;
 ADOQuery1->Active = false;
 StatusBar1->Panels->Items[3]->Text="";
 TStringList *SL = new TStringList();
 ADOConnection1->GetTableNames(SL,false);
 ComboBox1->Items->Clear();
 ComboBox1->Items->AddStrings(SL);
 delete SL;     
 
 
}
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
02.10.2009, 12:51 14
Sasha,
C++
1
2
3
4
TStringList *SL = new TStringList(); 
ADOConnection1->GetTableNames(SL,false); 
ComboBox1->Items->Clear(); 
ComboBox1->Items->AddStrings(SL);
для начала перенеси этот код в строку 11, если не поможет, тогда делай вместо него такой скрипт:
C++
1
2
3
for(int i = 0; i < SL->Count; i++)
  if(!SL->Strings[i].Pos("~")) ComboBox1->Items->Add(SL->Strings[i]);
}
1
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2009, 13:02  [ТС] 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
 DataSource1->OnDataChange = DataSource1DataChange;
 Application->OnMessage = OnApplicationMessage;
 String WayToBase=ExtractFilePath(Application->ExeName)+"Компьютерная база.mdb";
 ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+WayToBase+";Persist Security Info=True";
 DataSource1->OnDataChange = DataSource1DataChange;
 ADOConnection1->Connected = true;
 TStringList *SL = new TStringList(); 
 ADOConnection1->GetTableNames(SL,false);
 ComboBox1->Items->Clear();
 for(int i = 0; i < SL->Count; i++)
 {
 if(!SL->Strings[i].Pos("~"))
 {ComboBox1->Items->Add(SL->Strings[i]);}
 }
 delete SL;
 ADOQuery1->ConnectionString = ADOConnection1->ConnectionString;
 DBGrid1->Options = TDBGridOptions(DBGrid1->Options) >> dgIndicator >> dgTitles >> dgColLines >> dgRowLines >> dgColumnResize >> dgEditing;
 DataSource1->DataSet = ADOQuery1;
 DBGrid1->DataSource = DataSource1;
 DBNavigator1->DataSource = DataSource1;
 ADOQuery2->ConnectionString = ADOConnection1->ConnectionString;
 ADOQuery2->Active = false;
 ADOQuery1->Active = false;
 StatusBar1->Panels->Items[3]->Text="";
Вот это помогло.Спасибо.

Так, а в чём причина была, раньше такого не было?
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
02.10.2009, 13:08 16
Sasha, могу разве что предположить, что запрос у тебя открыт еще в object inspector открыт, вот и порождает он временную таблицу, а ты ее и выгребаешь, но это только писанина по воде вилами, надо проект смотреть... я и на счет временной таблицы угадал, наверное...
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.10.2009, 13:45  [ТС] 17
могу разве что предположить, что запрос у тебя открыт еще в object inspector открыт
Запрос был открыт действительно я его закрыл, но ничего не изменилось.
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
02.10.2009, 14:17 18
Sasha, значит еще что-то порождает временную таблицу, сложно сказать, я же не телепат
0
02.10.2009, 14:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2009, 14:17
Помогаю со студенческими работами здесь

Нужно проверить наличие записей (людей) из таблицы Table1 в Table2
Есть таблица Table1(поля - fam, im, ot, ulica, summa, otv) и таблица Table2 (поля - fam, im, ot,...

Проверить наличие таблицы в бд или получить список всех таблиц
Всем привет, нужно проверить содержит ли бд таблицу по ее названию. Как лучше это сделать? через...

Как проверить есть ли в папке файл с особым названием
Как проверить есть ли в папке предположим &quot;C:\Users\user\Desktop\Cm\Logs&quot; файл с особым названием,...

Как проверить существует ли лист Excel c определенным названием
Пишу вторую в жизни программу на VB - макрос для Excel В цикле перебираются по очереди все листы...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru