Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++ Builder 2006] Получение структуры БД Access 
V
    Опции темы
CyberBullDog
Дата 11.6.2007, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Доброго времени суток.

Проблема в том, что структура Access-ной БД заранее не известна.
Имена таблиц из БД получаю так:
Код

ADOConnection1->GetTableNames( ComboBox1->Items, false );

Он вместе с таблицами выдает и имена запросов. Можно ли их как-то разграничить?

Заодно еще такой вопрос.
Имена полей таблицы получаю так:
Код

ADOTable1->GetFieldNames( ComboBox2->Items );

уже при работе программы возникает ошибка "Could not convert variant of type (Null) into type (String)", try ... catch ее не ловит, имена полей успешно записываются в ComboBox. С этим можно что-то сделать?

Это сообщение отредактировал(а) CyberBullDog - 12.6.2007, 11:11
PM MAIL   Вверх
Rodman
Дата 11.6.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



вот глянь... какое там продолжение!!!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
CyberBullDog
Дата 12.6.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Это конечно интересно, только вот в Access-е я ничего похожего не нашел.
Да чего там говорить, если в Access оператор select не знает что такое limit.

SELECT Statement (Microsoft Access SQL):
SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, …]]}     FROM tableexpression [, …] [IN externaldatabase]     [WHERE… ]     [GROUP BY… ]     [HAVING… ]     [ORDER BY… ]     [WITH OWNERACCESS OPTION]

(Источник: http://msdn2.microsoft.com/en-us/library/Bb208930.aspx)
PM MAIL   Вверх
Rodman
Дата 12.6.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Цитата(CyberBullDog @  12.6.2007,  10:59 Найти цитируемый пост)
Access оператор select не знает что такое limit.

он знает TOP!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
CyberBullDog
Дата 14.6.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



За TOP спасибо, буду знать.

Кто-нибудь знает как пользоваться ADOX?

Импортировал Microsoft ADO Ext. 2.8 for DDL and Security, прикрутил полученные файлы (ADOX_TLB) к проекту.
Что делать дальше не знаю. Примеры, которые видел, не прокатывают.

Вот один из таких примеров (на Delphi):
http://entwickler-forum.de/archive/index.php/t-10974.html
PM MAIL   Вверх
Rodman
Дата 14.6.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



что конкретно
Цитата(CyberBullDog @  14.6.2007,  14:17 Найти цитируемый пост)
не прокатывают

???

ты компонент нормально поставил?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
CyberBullDog
Дата 14.6.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Ставил так:
Component->Import Component...
Выбираю Import a Type Library,
дальше ADOX (MS ADO Ext. ...),
на след. странице оставляю как есть,
выбираю Add Unit to 'Myproject'

Пытаюсь уже не открыть готовую базу, а создать новую (все примеры почему-то направлены на это).
Последний раз пробовал так:
Код

CatalogPtr Cat;
WideString CS;
Cat = CreateComObject(Sysutils::StringToGUID("ADOX.Catalog"));
Cat->Create(CS.c_bstr());


Может я уже путаю два разных подхода. В итоге вылезает сообщение: "Интерфейс не поддерживается [Да][Нет][Отмена]".

Было бы не плохо увидеть пример, если таковой есть.
PM MAIL   Вверх
CyberBullDog
Дата 18.6.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Строка коннекта из UDL-файла не подходит.
Получилось создать базу с  такой строкой коннекта:
Код

CS = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+DBPath+";Jet OLEDB:Engine Type=4";

А вот как подключиться к уже существующей базе?
PM MAIL   Вверх
CyberBullDog
Дата 20.6.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



В Delphi все получается, а в Builder-е что-то никак.
Буду писать на Delphi. smile 
PM MAIL   Вверх
mutex
Дата 23.6.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



CyberBullDog
Не надо заморачиваться с ADOX. Используйте обычные ADO-компоненты и метод TADOConnection->OpenSchema.

Схематически алгоритм выглядит так:

AdoLoadSchema("TABLE", ListBox1); //таблицы
AdoLoadSchema("VIEW", ListBox2);  //виды (запросы)

void TForm1::AdoLoadSchema(AnsiString FilterValue, TListBox *ListBox)
{
  int Bounds[2] = {0,3};
  OleVariant Filter = VarArrayCreate(Bounds, 1, varVariant);
  ListBox->Clear();
  Filter.PutElement(FilterValue, 3);
  TADODataSet *ADOTmp = new TADODataSet(NULL);
  try
  {
    ADOConnection1->OpenSchema(siTables, Filter, EmptyParam, ADOTmp);
    while (!ADOTmp->Eof)
    {
      if (AnsiSameText(FilterValue, ADOTmp->FieldByName("TABLE_TYPE")->AsString))
        ListBox->Items->Add(ADOTmp->FieldByName("TABLE_NAME")->AsString);
      ADOTmp->Next();
    }
  }
  __finally
  {
    delete ADOTmp;
  }
}

Тестовый проект на 6-м Билдере см. в TestMDB.zip

Это сообщение отредактировал(а) mutex - 23.6.2007, 22:30

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  TestMDB.zip 4,54 Kb
PM MAIL   Вверх
CyberBullDog
Дата 25.6.2007, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



mutex, спасибо!
Обязательно попробую. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.