Поиск:

Ответ в темуСоздание новой темы Создание опроса
> msaccess и c++, вывод информации из базы msaccess  
:(
    Опции темы
Bugmaker
Дата 27.6.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Проблема в слудующем:
Допустим есть база 1.mdb, в ней есть таблица users.
Как отобразить это в программе на с++ ?
1) как подключиться к базе
2) как создать форму с нужным для отображения элементом
3) как вытащить данные из access в приложение.
Делал аналогичное на делфи билдере там все просто ADOconnection-AdoQuery-DBgrid если мне не изменяет память, сейчас понадобилось сделать на c++ аналогично, но есть только Dev c++. 
Был бы очень признателен за ссылку на пример, либо литературу конкретно про access и с++(не визуал и не борланд билдер). Заранее спасибо всем кто отзовется, и извините если уже была такая тема, поиском пользовался всего что нужно не нашёл.
PM MAIL   Вверх
Palladin
Дата 27.6.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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





--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Bugmaker
Дата 30.6.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вопрос по сортировке. Хочу сделтаь сортировку по клику на заголовке dbgrida.

На событие OnTitleClick пишу
ADOTable1->IndexFieldNames=Column->FieldName;

Сделать чтобы при повторном клике сортировалось по убванию не получается
Пробовал так

int i=0;
i++;
if (i/2==abs(i/2))  ADOTable1->IndexFieldNames=Column->FieldName;

 else  ADOTable1->IndexFieldNames=Column->FieldName+"DESC";

Подскажите в чем ошибка и как реализовать?? по моим наблюдениям повторный клик просто не обрабатывается..
PM MAIL   Вверх
Bugmaker
Дата 30.6.2008, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Перешёл на ADOQuery, но ответ все равно был бы интересен.
PM MAIL   Вверх
ama_kid
Дата 30.6.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Bugmaker @  27.6.2008,  13:54 Найти цитируемый пост)
1) как подключиться к базе
Цитата(Bugmaker @  27.6.2008,  13:54 Найти цитируемый пост)
3) как вытащить данные из access в приложение.
Библиотека msado15.dll (обычно лежит по пути c:\Program Files\Common Files\System\ADO) предоставляет достаточно удобный интерфейс IADORecordBinding. Пример его использования можно посмотреть в разделе MSDN VC++ Extensions

Цитата(Bugmaker @  27.6.2008,  13:54 Найти цитируемый пост)
2) как создать форму с нужным для отображения элементом
Ввиду того, что
Цитата(Bugmaker @  27.6.2008,  13:54 Найти цитируемый пост)
есть только Dev c++
придется изучать WinAPI, работать с CreateWindow и полностью создавать GUI на нём  smile 



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Bugmaker
Дата 30.6.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо ama_kid, но ввиду того, что долго никто не отвечал а сам я ниасилил, было принято решение скачать bcb и делать на нем.. думаю не прогадал, насколько я понимаю GUI на winapi я бы просекал очень долго.. 
Интересует вопрос с сортировкой, описаный выше.
PM MAIL   Вверх
ama_kid
Дата 30.6.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Bugmaker @  30.6.2008,  18:39 Найти цитируемый пост)
Сделать чтобы при повторном клике сортировалось по убванию не получается
Пробовал так
Не с тем свойством пробовал. Смотри в сторону ADOTable->Sort. примерно так:
Код
 if (AdoTable1.Tag==0) {
   ADOTable1->Sort = Column->FieldName+" ASC";
   AdoTable1->Tag = 1;
  } else
  {
   ADOTable1->Sort = Column->FieldName+" DESC";
   AdoTable1.Tag = 0;
  }

Цитата(Bugmaker @  30.6.2008,  20:46 Найти цитируемый пост)
Перешёл на ADOQuery
Код
... ORDER BY... DESC




--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Bugmaker
Дата 30.6.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Сортировку в ADOQuery сделал.. есть небольшой опыт, правда пришлось вспоминать..
Есть проблема, при первом нажатии сортирует как надо, при втором вылетает с ошибкой
код на OnTitleClick такой
ADOQuery1->Active=false;
ADOQuery1->SQL->Add("Order by");
ADOQuery1->SQL->Add(Column->FieldName);
ADOQuery1->Active=true;

Насколько я понимаю вылетает из-за того, что второй раз прибавляет Order by к запросу.. Как этого избежать? а еще лучше вместо этого заставить осртироваться по убыванию.
PM MAIL   Вверх
ama_kid
Дата 1.7.2008, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Bugmaker @  30.6.2008,  22:13 Найти цитируемый пост)
Как этого избежать?
Надо формировать запрос заново, а не добавлять к нему строку...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Palladin
Дата 1.7.2008, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

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



Что-то мне подсказывает, что здесь:
Код

int i=0;
i++;
if (i/2==abs(i/2))  ADOTable1->IndexFieldNames=Column->FieldName;

 else  ADOTable1->IndexFieldNames=Column->FieldName+"DESC";


int i=0; не глобальная, тогда конечно работать не будет
Измени и поидее все заработает, или сделай как ama_kid, сказал smile 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Bugmaker
Дата 1.7.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Сори за тупой вопрос но он прозвучит =)
Как обьявить глобальную переменную.
И есть ли аналог ADOQuery->SQL->ADD(); только на удаление некоторого выражения.

И еще можно ли сохранить текст запроса ADOQuery->SQL->Text чтобы потом его снова присвоить запросу?? Вернее я знаю что можно, подскажите как.. вчера пытался, получилось с трудом и как-то коряво..  smile  


И еще 1 вопрос.. даже не знаю как сформулировать...
допустим есть 2 таблицы в базе

table1               table2                       
id   name           id  age
1    ivan             1      22
2    jora              2     25
3    sasha           3      26

Можно ли через ADOQuery к таблице 2 получить возраст ivan'a ?? ну типа ADOQuery->SQL->ADD(Select * from table 2 where id=(id ivana iz table1). Вобщем сделать выборку на основе условия из другой таблицы?

З.Ы. Спасибо что помогаете сам бы ковырялся наверн оеще неделю )



Это сообщение отредактировал(а) Bugmaker - 1.7.2008, 10:16
PM MAIL   Вверх
ama_kid
Дата 1.7.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Bugmaker @  1.7.2008,  09:59 Найти цитируемый пост)
можно ли сохранить текст запроса ADOQuery->SQL->Text чтобы потом его снова присвоить запросу??
Можно сохранять в файл
Код
ADOQuery1->SQL->SaveToFile("123.txt");
...
 ADOQuery1->SQL->LoadFromFile("123.txt");
можно сохранять в переменную
Код
 String s = ADOQuery1->SQL->Text;
Но имхо ты придумываешь себе геморрой на одно место... smile 
Цитата(Bugmaker @  1.7.2008,  09:59 Найти цитируемый пост)
Можно ли через ADOQuery к таблице 2 получить возраст ivan'a ??
Вполне:
Код
ADOQuery->SQL->Text = "SELECT [age] FROM table2 WHERE id=(SELECT [id] FROM Table1 WHERE name='ivan')"



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Bugmaker
Дата 1.7.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ухты.. не думал что можно использовать Select в Selecte =) спасибо огромное сегодня попробую. 
 String s = ADOQuery1->SQL->Text; так помоему пробовал.. полуил ошибку чтото-типа не могу запихнуть объект Tstring в String? но попробую еще раз.

Все еще жду ответа на тупой вопрос, где объявить глобальную переменную-)

З.Ы. ama_kid подпись козырная у тебя =)

Это сообщение отредактировал(а) Bugmaker - 1.7.2008, 11:49
PM MAIL   Вверх
ama_kid
Дата 1.7.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(Bugmaker @  1.7.2008,  11:48 Найти цитируемый пост)
Все еще жду ответа на тупой вопрос, где объявить глобальную переменную-)
хм... даже и не знаю как ответить smile В том месте, которое видно отовсюду в твоем проекте!  smile Этот вопрос освещается вроде как в любых книжках по программированию  smile 



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Bugmaker
Дата 1.7.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Еще вопрос
есть запрос:
ADOQuery1->SQL->Text = "SELECT * FROM table1 WHERE [sid]=(Select id from table2 where [name]='kakoetoimya')";  Как сделать чтобы вместо kakoetoimya подставить значение ComboBox1

Решил примерно так

ADOQuery1->SQL->Add ("SELECT * FROM table1 WHERE [sid]=(Select id from table2 where [name]='"+ComboBox2->Text+"')");

Но вопросы думаю еще появятся =)


Это сообщение отредактировал(а) Bugmaker - 1.7.2008, 21:18
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

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

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


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

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


 




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


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

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