IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
debug
- Сообщения: 10
- Зарегистрирован: 17 май 2006, 12:46
Сообщение
debug » 17 май 2006, 12:56
стало нужно написать небольшое приложение для работы с FireBird_1_5. Ну изучил api, здесь на ыоруме примеры посмотрел - всё просто. Только вот не так работает isc_expand_dpb как ожидал.
Вот код
Код: Выделить всё
int main(int argc, char* argv[])
{
static char dpb_buff[128], *dpb;
static char user_name[128], password[128];
string database_name="D:\\home\\alex\\AgropromProject\\DB\\agro.gdb";
printf("base: %s\n", database_name.c_str());
isc_db_handle h_db_agroprom=NULL;
isc_tr_handle h_tr_agroprom=NULL;
ISC_STATUS_ARRAY status;
dpb=dpb_buff;
*dpb++=isc_dpb_version1;
*dpb++=isc_dpb_num_buffers;
*dpb++=1;
*dpb++=90;
short dpb_len=dpb-dpb_buff;
strcpy(user_name, "sysdba");
strcpy(password, "masterkey");
dpb=dpb_buff;
isc_expand_dpb(&dpb, &dpb_len, isc_dpb_user_name, user_name, isc_dpb_password, password, NULL);
if (isc_attach_database(status, /*database_name.length()*/0, (char*)database_name.c_str(), &h_db_agroprom, dpb_len, dpb_buff)) {
printf("SQLCODE: %d\n", isc_sqlcode(status));
isc_print_status(status);
return 1;
}
printf("the base Agroprom is attached!\n");
isc_detach_database(status, &h_db_agroprom);
out.close();
return 0;
}
Пример простейший - но видимо чего то я не вижу в нём ошибочного.
Компилил в Visual Studio 6
Результат - буффер dpb_buff заполняется только 4-мя первыми байтами - остальное - нули. Ну и соотв не аттачит базу.
Я конечно могу этот буффер и ручками заполнить - как обычный массив с помощью fprintf и т.п.- и работает. Но обидно - почему так то работать не хочет?
-
debug
- Сообщения: 10
- Зарегистрирован: 17 май 2006, 12:46
Сообщение
debug » 17 май 2006, 14:38
Причину просто изначально в себе ищу

И потом, что значит изначально глючная, по моему убеждению глючить может "железо", а код как может глючить? Он либо работает, либо нет. Вот я и хочу понять - почему у одних работает эта ф-я как надо, а у меня нет

Что не так?
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 17 май 2006, 15:04
1. isc_expand_dpb не рекомендуется к использованию
2. она возвращает новый dpb, котороый кто-то должен потом освободить
3. в FB вместо неё есть isc_modify_dpb
-
debug
- Сообщения: 10
- Зарегистрирован: 17 май 2006, 12:46
Сообщение
debug » 17 май 2006, 18:58
hvlad писал(а):
3. в FB вместо неё есть isc_modify_dpb
Спасибо, а где можно найти описание новых ф-й api, кроме как в ibase.h?