powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / БД и C++
16 сообщений из 16, страница 1 из 1
БД и C++
    #33992749
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться, как работать с БД в C++ (и где про это можно подробно почитать?). Пытаюсь открыть (CRecordset::Open) многотабличную таблицу с выборкой по таблицам, а он мне пишет про какой-то Error Retrieving Record. Никак не могу понять, что я делаю не так: когда я пытаюсь, к примеру, получить два поля из разных таблиц, то все ОК, а когда таких полей уже три - то он ни в какую.
...
Рейтинг: 0 / 0
БД и C++
    #33992907
Тынц.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
БД и C++
    #33995321
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо вам за ссылки – нечто подобное мне и требовалось. Но я так и не понял, как корректно выполнять многотабличные запросы (т.е. если мне нужно получить данные из нескольких таблиц - я пока даже этого толком не могу). Так что, тема все еще актуальна.
...
Рейтинг: 0 / 0
БД и C++
    #33995346
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. White, как корректно выполнять многотабличные запросы (т.е. если мне нужно получить данные из нескольких таблиц - я пока даже этого толком не могу). Так что, тема все еще актуальна.

сначала вы должны обьяснить что вы под этим понимаете ?
Если
Код: plaintext
SELECT a.id, b.id FROM tb1 a, tbl2 b WHERE a.id=b.id
то работают с ними так как и с боле простыми
...
Рейтинг: 0 / 0
БД и C++
    #33995356
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. WhiteСпасибо вам за ссылки – нечто подобное мне и требовалось. Но я так и не понял, как корректно выполнять многотабличные запросы (т.е. если мне нужно получить данные из нескольких таблиц - я пока даже этого толком не могу). Так что, тема все еще актуальна.

Может для начала вот это почитать: ;)
http://www.sql.ru/docs/sql/u_sql/index.shtml

+MSDN
http://msdn2.microsoft.com/en-us/library/cce4z4fk.aspx

Впрочем, с VC/MFC не работал, может там свои подводные камни на этот счёт, хотя маловероятно.
...
Рейтинг: 0 / 0
БД и C++
    #33997505
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня не получается это:
m_rsBooks.Open(CRecordset::dynaset, _T("SELECT Books.Name, Autors.Name, Izd.Name, Clerk.Name FROM BOOKS, AUTORS, IZD, CLERK"));

Т.е. имеются четыре таблицы, и мне нужно получить из каждой по одному полю. Выдает ошибку Error Retrieving Record.
...
Рейтинг: 0 / 0
БД и C++
    #33997528
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_rsBooks - это класс, наследующий CRecordset.
...
Рейтинг: 0 / 0
БД и C++
    #33998224
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БД какая? Не Access случайно?

Вот: (правда, Last Review : December 10, 2003), но может и оно
http://support.microsoft.com/default.aspx?scid=kb;en-us;155850
.....
One reason for this error is that a developer has specified a SQL statement as the second argument for the CRecordset::Open() function. In this case, the columns listed in the SQL SELECT statement must match the order by which the RFX functions are called in the CRecordset's DoFieldExchange(). The first RFX function maps to the first column returned in the recordset, the second RFX function maps to the second column, and so on. The exception is thrown when the RFX functions are out of order. Paying attention to the exception can save developers a lot of debugging time.
.....

Попоробуй переставить местами поля в запросе.

Кроме того, сам запрос - полное декартово произведение :)
Ясно, что тестирование в разгаре, но может, всё-таки добавить where какой-нибудь...
...
Рейтинг: 0 / 0
БД и C++
    #34001366
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Была Access, но я от нее отказалась. Сейчас создал простенькую базу в Firebird с двумя таблицами и с несколькими полями (все заполнил).
Я могу, например, открыть просто БД, не указывая дополнительно никакого запроса, но при попытки получить значение функцией GetFieldValue он мне резонно в этом отказывает.
Но я никак не могу открыть базу, указав какой-нибудь запрос:

m_rsBooks.Open(CRecordset::snapshot, _T("SELECT Books.Name, Authors.Name FROM Books, Authors WHERE Authors.Id=Books.A_Ref"));

Выскакивает окошко с ошибкой: not yet implemented.
...
Рейтинг: 0 / 0
БД и C++
    #34001396
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. Whitenot yet implemented.
Ну так это FireBird ещё в процессе разработки.
А вот что именно у него not yet implemented - это лучше в соответствующей ветке форума спросить, указав версию.

Можно попробовать, например, snapshot поменять на что-нибудь другое, но это так... пальцем в небо. А вообще документацию надо читать по используемым продуктам.
...
Рейтинг: 0 / 0
БД и C++
    #34001458
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я читаю, но безуспешно – я не совсем понимаю, что я делаю не так.
Кстати, ваш ответ меня еще больше запутал.
Я не понимаю почему я не могу получить выборку из нескольких таблиц – что тут противозаконного?
...
Рейтинг: 0 / 0
БД и C++
    #34001609
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. WhiteЯ читаю, но безуспешно – я не совсем понимаю, что я делаю не так.
Кстати, ваш ответ меня еще больше запутал.
Я не понимаю почему я не могу получить выборку из нескольких таблиц – что тут противозаконного?
Какой ответ запутал? Что именно?
Если с этой ссылкой (предпоследний):
http://support.microsoft.com/default.aspx?scid=kb;en-us;155850

то ничего странного, там не указывается невозможность выборки из нескольких таблиц, это не противозконно ). Просто драйвер к Акцесу имеет "фичу" в таких случаях. Вроде бы достаточно расположить в одинаковом порядке описание выбираемых полей в запросе и в DoFieldExchange и всё будет ОК. Пробовали?

И, раз уж выбран FireBird, то может тут http://www.sql.ru/forum/actualtopics.aspx?bid=2 описать проблему? Может там кто поможет...

Сам я ни с VC, ни с указанными БД не работал, но раз уж взялся отвечать, то продолжаю чем могу. Просто с временем сейчас напряг, иначе бы уже поставил студию и ... )

Попробуйте для начала простейший запрос - по одному полю из 2-х таблиц, покажите полный код, что именно получается, что не получается и т.д. ...

Удачи.
...
Рейтинг: 0 / 0
БД и C++
    #34001623
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. WhiteУ меня не получается это:
m_rsBooks.Open(CRecordset::dynaset, _T("SELECT Books.Name, Autors.Name, Izd.Name, Clerk.Name FROM BOOKS, AUTORS, IZD, CLERK"));

Т.е. имеются четыре таблицы, и мне нужно получить из каждой по одному полю. Выдает ошибку Error Retrieving Record.

попробуйте сделать
Код: plaintext
CREATE VIEW vZapros AS SELECT Books.Name bn, Autors.Name an, Izd.Name in , Clerk.Name cn FROM BOOKS, AUTORS, IZD, CLERK

а потом
Код: plaintext
SELECT bn, an, in, cn FROM vZapros 
...
Рейтинг: 0 / 0
БД и C++
    #34007797
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitrii K.Просто драйвер к Акцесу имеет "фичу" в таких случаях. Вроде бы достаточно расположить в одинаковом порядке описание выбираемых полей в запросе и в DoFieldExchange и всё будет ОК.
Да, оно действительно так. Спасибо вам =) Правда, с проблемой Firebird я так и не разобрался, но это уже как-нибудь в другой раз – сейчас главное, что хоть Access заработал :)
...
Рейтинг: 0 / 0
БД и C++
    #34007803
Mr. White
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lepsik Mr. WhiteУ меня не получается это:
m_rsBooks.Open(CRecordset::dynaset, _T("SELECT Books.Name, Autors.Name, Izd.Name, Clerk.Name FROM BOOKS, AUTORS, IZD, CLERK"));

Т.е. имеются четыре таблицы, и мне нужно получить из каждой по одному полю. Выдает ошибку Error Retrieving Record.

попробуйте сделать
Код: plaintext
CREATE VIEW vZapros AS SELECT Books.Name bn, Autors.Name an, Izd.Name in , Clerk.Name cn FROM BOOKS, AUTORS, IZD, CLERK

а потом
Код: plaintext
SELECT bn, an, in, cn FROM vZapros 

А где мне выполнить запрос VIEW? Т.е. VIEW нужно в самой БД создать или при открытии ее в VC?
...
Рейтинг: 0 / 0
БД и C++
    #34008038
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создать нужно в базе - -это как таблица - обычный обьект базы.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / БД и C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]