Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Исспользование Interbase API

4.1K
07 декабря 2003 года
_voron
19 / / 07.12.2003
Подскажите, пожалуйста, как можно в Builder-е исспользовать Interbase API?
Я подключаю файл "ibase.h" . При вызове функции isc_attach_database линковщик выдает ошибку
Unresolved external 'isc_attach_database' referenced from D:\WORK\U_MAIN.OBJ
Эта же ошибка появляется при вызове любой функции из этого файла.
Может нужно задать какие-то опции проекте?
2.1K
08 декабря 2003 года
maximaximax
83 / / 05.06.2003
в CPP файле проекта напиши
USELIB("gds32.lib");
4.1K
08 декабря 2003 года
_voron
19 / / 07.12.2003
maximaximax, спасибо. Программа начала нормально запускаться, но теперь возникла другая проблемма: не получается соединиться с базой.
Пишу:

isc_db_handle db;
char *db_path = "d:\work\base.gdb";
ISC_STATUS st_vector[20];
...
db = OL;
isc_attach_database(st_vector, strlen(db_path), db_path, &db, 0, NULL);
if(st_vector[0] == 1 && st_vector[1]) ShowMessage(isc_print_status(st_vector));

Ошибка возникает постоянно.
Сервер запущен, база открыта/закрыта. Ошибка номер 335544344. Текстовое описание найти не смог, может быть плохо искал.
2.1K
08 декабря 2003 года
maximaximax
83 / / 05.06.2003
Цитата:
Originally posted by _voron
maximaximax, спасибо. Программа начала нормально запускаться, но теперь возникла другая проблемма: не получается соединиться с базой.
Пишу:

isc_db_handle db;
char *db_path = "d:\work\base.gdb";
ISC_STATUS st_vector[20];
...
db = OL;
isc_attach_database(st_vector, strlen(db_path), db_path, &db, 0, NULL);
if(st_vector[0] == 1 && st_vector[1]) ShowMessage(isc_print_status(st_vector));

Ошибка возникает постоянно.
Сервер запущен, база открыта/закрыта. Ошибка номер 335544344. Текстовое описание найти не смог, может быть плохо искал.



Я думаю проблема в том что ты не передаёшь login /password. У меня есть функциия IbConnect:

Цитата:

bool __fastcall MvAl::IbConnect(
TISC_DB_HANDLE &hDb,
const AnsiString &strDbPath,
const AnsiString &strUserName,
const AnsiString &strUserPassword)
{
long iaSt[20];

char *cpDpb((char *)malloc(7));
char *p(cpDpb);
char *cpDpbCopy(cpDpb);
*p++ = '\1';
*p++ = isc_dpb_sweep_interval;
*p++ = '\4';
long sweep_interval(16384);
long l(::isc_vax_integer((char *) &sweep_interval, 4));
char *d((char *) &l);
*p++ = *d++;
*p++ = *d++;
*p++ = *d++;
*p = *d;
short dpb_length(7);

isc_expand_dpb(&cpDpb, &dpb_length,
isc_dpb_user_name, strUserName.c_str(),
isc_dpb_password, strUserPassword.c_str(),
isc_dpb_sql_dialect, "1", NULL); // before it was 3

if (isc_attach_database(iaSt, strDbPath.Length(), strDbPath.c_str(),
(void **)&hDb, dpb_length, cpDpb)) {
ERREXIT(iaSt, 1);
}

free(cpDpbCopy);

return true;
}

4.1K
08 декабря 2003 года
_voron
19 / / 07.12.2003
Цитата:
Originally posted by maximaximax

Я думаю проблема в том что ты не передаёшь login /password.


В документации по Interbase приводится пример соединения с базой без исспользовании dpb.

Я заменил в твоей функции ERREXIT(iaSt, 1) на ShowMessage(isc_print_status(iaSt)). При запуске программа выдает всю туже ошибку 335544344. Я нашел в файле "iberror.h" макрос
#define isc_io_error 335544344L.
Как могла возникнуть ошибка ввода/вывода?

2.1K
09 декабря 2003 года
maximaximax
83 / / 05.06.2003
Цитата:
Originally posted by _voron

В документации по Interbase приводится пример соединения с базой без исспользовании dpb.

Я заменил в твоей функции ERREXIT(iaSt, 1) на ShowMessage(isc_print_status(iaSt)). При запуске программа выдает всю туже ошибку 335544344. Я нашел в файле "iberror.h" макрос
#define isc_io_error 335544344L.
Как могла возникнуть ошибка ввода/вывода?



не, ну если ты пишешь

Цитата:
char *db_path = "d:\work\base.gdb";



то конечно возникнет ошибка. Это же С всё-таки, надо писать

Цитата:
char *db_path = "d:\\work\\base.gdb";

4.1K
09 декабря 2003 года
_voron
19 / / 07.12.2003
Действительно глупость. Надо же так лопухнуться:(
Теперь все работает! Спасибо:)
maximaximax, как я понял, ты в Interbase профи. У тебя нет простенького примерчика его исспользования(на уровне выполнения элементарного запроса)? Я только начинаю работать с Interbase и помощь профессионала была бы как нельзя кстати.
2.1K
09 декабря 2003 года
maximaximax
83 / / 05.06.2003
Цитата:
Originally posted by _voron
Действительно глупость. Надо же так лопухнуться:(
Теперь все работает! Спасибо:)
maximaximax, как я понял, ты в Interbase профи. У тебя нет простенького примерчика его исспользования(на уровне выполнения элементарного запроса)? Я только начинаю работать с Interbase и помощь профессионала была бы как нельзя кстати.



Не, я бы себя профи в Interbase API не назвал. Просто использую его, для одной задачки надо было, пришлось разобраться.

Ниже простенькая функция для извлечения из запроса целого поля. Я использую его для получения RecordCount таблицы.

Цитата:

bool __fastcall IbGetIntField(
TISC_DB_HANDLE &hDb,
const AnsiString &strQuery,
int &iResult)
{
void *hSt(NULL);
void *hTr(NULL);
long iaSt[20];
XSQLDA *sqlda(NULL);
long fetch_stat;

static char isc_tbp[] = {
isc_tpb_version3, isc_tpb_write, isc_tpb_concurrency, isc_tpb_wait};

if (isc_start_transaction(iaSt, &hTr, 1, &hDb, sizeof(isc_tbp), isc_tbp)) {
ERREXIT(iaSt, 1);
}

sqlda = (XSQLDA *)malloc(XSQLDA_LENGTH(1));
sqlda->sqln = 1;
sqlda->sqld = 1;
sqlda->version = 1;

if (isc_dsql_allocate_statement(iaSt, (void**)&hDb, &hSt)) {
ERREXIT(iaSt, 1);
}

if (isc_dsql_prepare(iaSt, &hTr, &hSt, 0, strQuery.c_str(), 1, sqlda)) {
ERREXIT(iaSt, 1);
}

short flag0(0);
sqlda->sqlvar[0].sqldata = (char *) &iResult;
sqlda->sqlvar[0].sqltype = SQL_LONG + 1;
sqlda->sqlvar[0].sqlind = &flag0;

if (isc_dsql_execute(iaSt, &hTr, &hSt, 1, NULL)) {
ERREXIT(iaSt, 1);
}

if (isc_dsql_fetch(iaSt, &hSt, 1, sqlda)) {
ERREXIT(iaSt, 1);
}

if (isc_dsql_free_statement(iaSt, &hSt, DSQL_close)) {
ERREXIT(iaSt, 1);
}

free(sqlda);

if (isc_commit_transaction(iaSt, &hTr)) {
ERREXIT(iaSt, 1);
}

return true;
}

4.1K
09 декабря 2003 года
_voron
19 / / 07.12.2003
Спасибо. Буду разбираться.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог