Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [wx] ODBC DatabaseLayer - как это работает?


Автор: Static 19.11.2008, 10:56
Дано: 
БД SQL Anywhere
WxWidgets 2.8.9
Code::Blocks 8.02
DatabaseLayer 1.7.5


Код

class ODBCObj
{
public:
DatabaseLayer *m_DB;
bool Connect();
DatabaseLayer *GetDB();
};

//---------------------некий код-------------
ODBCObj *MyDB;
((OdbcDatabaseLayer*)MyDB->m_DB)->Open(_("DSN=DsnName; UID=userid; PWD=pass"));


Приложение крашится :(
Читал http://wxwidgets.info/wx_accessing_sqlite - немного не то, пытался сделать по аналогии. 
В чем может быть проблема?

собрал libdatabaselayer_databaselayer_odbc.a - указываю ее линкеру...

Автор: t_rex 19.11.2008, 18:36
В дистрибутиве DatabaseLayer есть тестовая прилога, посмотри как там сделано, а вобще ODBC в wx немного мм.. печальный, я не уверен что он так строковый DSN схавает, надо сидеть дебажить. В принципе если крашится, то лучше в пошаговом режиме посмотреть на какой строке и поправить сорец OdbcDatabaseLayer, думаю править все равно прийдется, там бывает на некоторых СУБД проблемы со строками

Автор: Static 20.11.2008, 09:31
ох, обрадовали вы мну....
ладно, поглядим.

P.S. Самое смешное, сделал почти все что хотел в итоге через wxDb. Потестил-повертел, удалил комментарии - перестало работать. Мистика...

P.P.S. функция Open() DatabaseLayer'a не работала никак:
ни через connection string;
ни через Open(путь к файлу базы); - ну тут ладно, пароль все-таки нужен, учетка...
ни в какой-либо другой форме :(

Автор: t_rex 21.11.2008, 01:34
Ненене, ты wxDb не трогай, его скоро не будет. wxODBC упраздняют поэтому потом сапортить свой софт ты не сможешь. Лучше все-таки попробуй с DatabaseLayer добиться желаемого результата. Это не так сложно на самом деле. Пол-часа дебага и все решается.
По поводу OdbcDatabaseLayer, создай пользовательский DSN и указывай его название при конекте. Должно отлично работать. С файловыми DSN не помню, надо пробовать. В Панель управления - Администрирование - Источники данных ODBC

Автор: Static 21.11.2008, 10:13
про "скоро не будет" - в курсе. Я уже по долгу службы наверно все русское прочел по wx и за английское принялся  smile
Просто саппортить сей софт не надо будет, критичны сроки.
А за Layer в следующем проекте примусь.

Автор: Static 3.9.2009, 11:09
вернемся к DatabaseLayer'у
1. Пересобирая ODBCDatabaseLayer с новым компилятором, обнаружил, что не могу собрать версию для debug :-\
Т.е. либа-то собирается, но в проекте при попытке линковки оказывается куча undefined referenc'ов на wxLogDebug/wxOnAssert. Это очень неприятно. Причем в прошлый раз у меня такой проблемы не возникало. Что-то явно упустил, не могу понять - что... Нигде не могу найти более подробной инструкции по сборке, чем в его собственном хелпе. А там кроме mingw32-make -f makefile.gcc ничего не написано. Подскажите что-нибудь, пожалуйста.

2. Учитывая, что release сборка работает, я написал тестовое приложение (юникод). Оно должно работать в том числе и под вин98. Линкую libunicows.a к проекту - как обычно. Под 98 программа просто молча не запускается. Под ХР - работает нормально. Вопрос: при сборке самого DatabaseLayer'а тоже нужно подсунуть libunicows.a? Или проблема скорее всего не в этом?..

Автор: t_rex 4.9.2009, 12:33
проблема не в этом.
мейкфайл надо править. если не находит всякое то надо убедиться что в мейкфайле правильно прописан путь к wxWidgets.
А еще проще собрать статическую библиотеку в Code::Blocks - сделать там проект и настроить все самостоятельно

Автор: Static 4.9.2009, 17:07
да смотрел я мейкфайл... Там не густо-то и места для копания в нем. В любом случае  - спасибо, в понедельник буду думать дальше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)