не работает isc_expand_dpb

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
debug
Сообщения: 10
Зарегистрирован: 17 май 2006, 12:46

не работает isc_expand_dpb

Сообщение 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 и т.п.- и работает. Но обидно - почему так то работать не хочет?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 17 май 2006, 13:10

Брось ты эту isc_expand_dpb(). Она изначально глючная потому и не рекомендуется к использованию.

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?

Ответить