нужно написать маленькую прожку по работе с мускульной базой.
делов там — сделать выборку, принять поля из первой записи, определённым образом перебрать данные и удалить эту строчку из БД.
начал ковыряться со стандартными библиотеками типа CRecord CDatabase. там упёрся, что он не хочет открывать CRecord в режиме изменения данных (dynaset) :
cr.Open(CRecordset::dynaset, "SELECT * FROM table");
на каком-то форуме почитал и понял, что эта проблема не только у меня и что нужно писать через АПИ. с сайта мускуля скачал библиотеку mysql++, которая для этого и служит. начал разбираться с хелпом и попробовал компилировать один из тамашних примеров по удалению строки. вроде всё написал как положено. указал где хедеры лежат эти от mysql++.. пришлось скачать исходники мускуля, чтоб оттуда достать ещё несколько хедеров, которые изначально не шли в комплекте с базой. тоже указал вроде пути.. нашёл всё.. но как всегда не компилит. мол синтаксическая ошибка..
стал разбираться. оказывается.. как только я прописал
#include "mysql++.h"
то он выдаёт мне
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xdebug(31): error C2059: syntax error : ')'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xdebug(35): error C2059: syntax error : ','
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xdebug(29): error C2078: too many initializers
............
и т.д. и т.п.
пробовал компилировать не в режиме дебагера, а в режиме релиза.. тогда выдавал
Proga error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall mysqlpp::Connection::Connection(bool)" (__imp_??0Connection@mysqlpp@@QAE@_N@Z) referenced in function "public: void __thiscall CDVB_serverDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CDVB_serverDlg@@QAEXXZ)
Proga error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall mysqlpp::Connection::~Connection(void)" (__imp_??1Connection@mysqlpp@@UAE@XZ) referenced in function "public: void __thiscall CDVB_serverDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CDVB_serverDlg@@QAEXXZ)
Proga fatal error LNK1120: 2 unresolved externals
..............
я так чувствую, что где-то что-то не подключил.. но он же не говорит где и что
пишу на вижуал 2003-х
база — mysql 5.0.18.win
в общем не выходит пробиться. сталкивался ли кто с таким и как быть дальше.. есть ли у кого какие-то примеры реализации этих АПИ для работы с мускулем.. буду рад унать любую информацию.. и вообще рад любой моральной поддержке
PS. в с++ не очень силён. новичёк.. а тем более в АПИ...
да.. и вопрос к теме.. а есть ли ещё испытаные методу кроме АПИ, для простой работы с мускулем? может как-то через АДО попробовать, но там тоже не совсем понятны некоторые детали.. скажем как с микрософт адо дата контролом управлять данными без использования грида.. т.е. выбирать записи.. удалять.. извлекать данные.. может так проще? ткните пальцем куда-нибудь.. туда и пойду
зарание спасибо.
но стараюсь.
Re: VC++ 7.0 & mysql++
От:
Аноним
Дата:
05.11.06 19:24
Оценка:
Здравствуйте, sas-koval, Вы писали:
SK>нужно написать маленькую прожку по работе с мускульной базой.
С этой штукой не работал.
SK>делов там — сделать выборку, принять поля из первой записи, определённым образом перебрать данные и удалить эту строчку из БД.
А вам для этого точно CRecordset нужен? Не хватит ли средств SQL + ODBC?
SK>начал ковыряться со стандартными библиотеками типа CRecord CDatabase. там упёрся, что он не хочет открывать CRecord в режиме изменения данных (dynaset) : SK>cr.Open(CRecordset::dynaset, "SELECT * FROM table");
"SELECT * FROM table" — прям так и написано?
Что значит "не хочет открывать"? Как конкретно не хочет?
SK>c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xdebug(31): error C2059: syntax error : ')' SK>c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xdebug(35): error C2059: syntax error : ',' SK>c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xdebug(29): error C2078: too many initializers SK>............ SK>и т.д. и т.п. SK>пробовал компилировать не в режиме дебагера, а в режиме релиза.. тогда выдавал
Похоже, заголовки конфликтуют, какие нибудь debug макросы, изменение порядка включения заголовков ожет помочь (если повезёт). Возможно, надо задать какие-то директивы препроцессора. Судя по последующему тексту — несолько быстрых движений саперной лопаткой в заголовках mysql++ тоже могут исправить дело.
SK>Proga error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall mysqlpp::Connection::Connection(bool)" (__imp_??0Connection@mysqlpp@@QAE@_N@Z) referenced in function "public: void __thiscall CDVB_serverDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CDVB_serverDlg@@QAEXXZ) SK>Proga error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall mysqlpp::Connection::~Connection(void)" (__imp_??1Connection@mysqlpp@@UAE@XZ) referenced in function "public: void __thiscall CDVB_serverDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CDVB_serverDlg@@QAEXXZ) SK>Proga fatal error LNK1120: 2 unresolved externals SK>..............
SK>я так чувствую, что где-то что-то не подключил.. но он же не говорит где и что
Должен быть либо lib файл с реализацией тех самых методов, либо включайте исходники с реализацией тех самых методов в ваш проект.
SK>PS. в с++ не очень силён.
Заметно. И очень. Начинать надо бы с чего попроще.
SK>да.. и вопрос к теме.. а есть ли ещё испытаные методу кроме АПИ, для простой работы с мускулем? может как-то через АДО попробовать
Если есть OLE DB провайдер для mysql — это хороший вариант. Можно пользоватся ADO поверх ODBC, но тогдa унаследуются все проблемы ODBC. SK>но там тоже не совсем понятны некоторые детали.. скажем как с микрософт адо дата контролом управлять данными без использования грида.. т.е. выбирать записи.. удалять.. извлекать данные.. может так проще? ткните пальцем куда-нибудь.. туда и пойду
Для работы с АДО вам не нужны никакие адо дата контролы и гриды: у вас есть и вам нужны Connection и Recordset (Command и пр. — по желанию).
SK>но стараюсь.
Не заметно что-то. Уж про АДО гугль вас точно просветил бы. Например http://www.codersource.net/mfc_ado_select.html
SK>>делов там — сделать выборку, принять поля из первой записи, определённым образом перебрать данные и удалить эту строчку из БД. А>А вам для этого точно CRecordset нужен? Не хватит ли средств SQL + ODBC?
что значит средств? классов? так вроде CRecordset для этого и предназначен..
SK>>начал ковыряться со стандартными библиотеками типа CRecord CDatabase. там упёрся, что он не хочет открывать CRecord в режиме изменения данных (dynaset) : SK>>cr.Open(CRecordset::dynaset, "SELECT * FROM table"); А>"SELECT * FROM table" — прям так и написано?
да. прям так и было написано.. только слово table в моём проекте заменяется на мою таблицу.. это я для примера написал.
А>Что значит "не хочет открывать"? Как конкретно не хочет?
он говорил, что ваш ОДБЦ драйвер не поддерживает открывания в режиме dynaset. качал само собой последний драйвер с сайта мускуля, но всё равно не работало. после этого на форуме каком-то нашёл, что я не первый с этим долбаюсь и там кто-то сказал, что проще с апи разобраться.. только вот я теперь думаю проще ли
А>Должен быть либо lib файл с реализацией тех самых методов, либо включайте исходники с реализацией тех самых методов в ваш проект.
я указал эти папки в tools-options-project-directories
SK>>PS. в с++ не очень силён. А>Заметно. И очень. Начинать надо бы с чего попроще.
начинал с чего-то проще, но что делать если задача встала именно такая.. раньше с делфи больше дело имел.. а си только недавно стал разбирать.. хочу научиться. а задача вот такая встала и что тут поделать
SK>>да.. и вопрос к теме.. а есть ли ещё испытаные методу кроме АПИ, для простой работы с мускулем? может как-то через АДО попробовать А>Если есть OLE DB провайдер для mysql — это хороший вариант. Можно пользоватся ADO поверх ODBC, но тогдa унаследуются все проблемы ODBC.
есть одбц.
А>Для работы с АДО вам не нужны никакие адо дата контролы и гриды: у вас есть и вам нужны Connection и Recordset (Command и пр. — по желанию).
SK>>но стараюсь. А>Не заметно что-то. Уж про АДО гугль вас точно просветил бы. Например http://www.codersource.net/mfc_ado_select.html
Здравствуйте, sas-koval, Вы писали:
SK>>>делов там — сделать выборку, принять поля из первой записи, определённым образом перебрать данные и удалить эту строчку из БД. А>>А вам для этого точно CRecordset нужен? Не хватит ли средств SQL + ODBC?
SK>что значит средств? классов? так вроде CRecordset для этого и предназначен..
Значит написать SQL и вызвать SQLExecute? Или ADO::_Connection->Execute(strSQL) (упрощенно). Зачем Recordset? И вашего описания задачи необходимость его иметь неочевидна.
SK>>>начал ковыряться со стандартными библиотеками типа CRecord CDatabase. там упёрся, что он не хочет открывать CRecord в режиме изменения данных (dynaset) : SK>>>cr.Open(CRecordset::dynaset, "SELECT * FROM table"); А>>"SELECT * FROM table" — прям так и написано?
SK>да. прям так и было написано.. только слово table в моём проекте заменяется на мою таблицу.. это я для примера написал.
А я не телепат. Как можно разобратся где у вас "для примера", а где ошибка?
А>>Что значит "не хочет открывать"? Как конкретно не хочет?
SK>он говорил, что ваш ОДБЦ драйвер не поддерживает открывания в режиме dynaset. качал само собой последний драйвер с сайта мускуля, но всё равно не работало. после этого на форуме каком-то нашёл, что я не первый с этим долбаюсь и там кто-то сказал, что проще с апи разобраться.. только вот я теперь думаю проще ли
А вам обязательно dynaset нужен? Зачем? Он вообще крайне огранниченным число БД (драйверов) поддерживается.
А>>Должен быть либо lib файл с реализацией тех самых методов, либо включайте исходники с реализацией тех самых методов в ваш проект. SK>я указал эти папки в tools-options-project-directories
Включайе библиотеку или файлы с исходниками, а не указывайе папки.
SK>раньше с делфи больше дело имел
Ваши странные представления о методиках работы с базами данных это выдают.
Здравствуйте, Аноним, Вы писали:
SK>>раньше с делфи больше дело имел А>Ваши странные представления о методиках работы с базами данных это выдают.
собственно я этого и не скрываю
SK>>что значит средств? классов? так вроде CRecordset для этого и предназначен.. А>Значит написать SQL и вызвать SQLExecute? Или ADO::_Connection->Execute(strSQL) (упрощенно). Зачем Recordset? И вашего описания задачи необходимость его иметь неочевидна.
хм. воспользовался вашим советом. разобрался что такое SQLExecute и еже с ними (теоретически). однако практически снова выходят какие-то траблы.
в частности..
это я в инете нашёл такой примерчик.
сам тут почти ничё не писал.
дело в том, что он попадает на тот exit, чтоя написал.
после
Retcode=SQLSetEnvAttr(hEnv,SQL_ATTR_OUTPUT_NTS,(void*)SQL_TRUE, 0); //Устанавливает атрибуты управления рабочей среды (окружением) эта строка не обязательна.
в Retcode возвращает ошибку. (SQL_ERROR)
если строку закоментировать, то он так же реагирует на следующую строку
Retcode =SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc); //Выделяет память для среды окружения