Название: Связь бд с приложением Отправлено: Виктор от Март 16, 2012, 15:47 Подскажите пожалуйста.есть БД firebird,изменить нельзя.При изменении в БД, выдает сообщение через postevent в триггере.Как поймать корректно и обработать event.никак не пойму.
Название: Re: Связь бд с приложением Отправлено: V1KT0P от Март 16, 2012, 16:09 Подскажите пожалуйста.есть БД firebird,изменить нельзя.При изменении в БД, выдает сообщение через postevent в триггере.Как поймать корректно и обработать event.никак не пойму. Я с Firebird общаюсь через IBPP и никаких проблем. Говорят что БД часть Qt сделана кривовато.Название: Re: Связь бд с приложением Отправлено: QuAzI от Март 16, 2012, 16:43 Случайно не в курсе, в QFirebird дожали что-нить в плане триггерных эвентов, создания БД и прочие вещи доступные через IBPP ? Хочется работать сразу с разными СУБД (через выбор драйвера), но IBPP же не предоставит свой драйвер в список без обвязки.
Название: Re: Связь бд с приложением Отправлено: Igore от Март 16, 2012, 16:55 Я в postgresql в триггере делаю NOTIFY, а в Qt ловлю через
Код: if (database_.open()) Название: Re: Связь бд с приложением Отправлено: Виктор от Март 16, 2012, 18:31 БД трогать не могу,а IBPP на сайте только для сервера.Если есть рабочая ссылка для клиента,то скиньте пожалуйста.
Название: Re: Связь бд с приложением Отправлено: V1KT0P от Март 16, 2012, 18:40 БД трогать не могу,а IBPP на сайте только для сервера.Если есть рабочая ссылка для клиента,то скиньте пожалуйста. В смысле для сервера?Название: Re: Связь бд с приложением Отправлено: Виктор от Март 16, 2012, 18:53 IBPP, a C++ API for Firebird Server Web Site
Название: Re: Связь бд с приложением Отправлено: Виктор от Март 16, 2012, 18:54 не совсем корректно выразился
Название: Re: Связь бд с приложением Отправлено: Виктор от Март 16, 2012, 22:41 какие функции необходимо использовать из ibpp
Название: Re: Связь бд с приложением Отправлено: V1KT0P от Март 17, 2012, 00:40 какие функции необходимо использовать из ibpp Примерно вот так:Код
Название: Re: Связь бд с приложением Отправлено: Виктор от Март 17, 2012, 10:14 рассмотрел tests.cpp(test8) из ibpp:EventsFactory(),Add(),Drop(),Commit()-можете объяснить точное использование этих функций(чтобы не гадать).StatementFactory()-как понимаю работает с триггером бд.
Название: Re: Связь бд с приложением Отправлено: V1KT0P от Март 17, 2012, 16:00 рассмотрел tests.cpp(test8) из ibpp:EventsFactory(),Add(),Drop(),Commit()-можете объяснить точное использование этих функций(чтобы не гадать).StatementFactory()-как понимаю работает с триггером бд. Я использую только чтение и запись в базу. Если нужна справка по функциям то смотри документацию: http://www.ibpp.org/reference (http://www.ibpp.org/reference).Название: Re: Связь бд с приложением Отправлено: Виктор от Март 17, 2012, 16:22 спасибо за ссылку.изучаю.
Название: Re: Связь бд с приложением Отправлено: Виктор от Март 18, 2012, 10:27 набрел на статью http://palien.narod.ru/Documents/DB/IBApiBook/page0083.htm
Название: Re: Связь бд с приложением Отправлено: Виктор от Март 18, 2012, 10:57 решил воспользоваться этой статьей и получилось:
isc_db_handle db_handle = 0L ; ISC_UCHAR *event_buffer, *result_buffer; ISC_STATUS status_vector[20]; short length; ISC_LONG event_id; int i, counter; int event_flag; char * result, updated; short dpb_buf_len=20; char dpb_buf[]={ isc_dpb_version1, //версия буфера isc_dpb_user_name, //начинается кластер параметра имя пользователя 6, //длина этого параметра 6 байт 'S','Y','S','D','B','A', //строка имени пользователя isc_dpb_password, //начинается кластер пароля пользователя 9, //длина его 9 байт 'm','a','s','t','e','r','k','e','y' //сам пароль }; char setDatabaseName[] = "D:/???.gdb"; isc_attach_database(status_vector,strlen(setDatabaseName),setDatabaseName,&db_handle,dpb_buf_len,dpb_buf); if (status_vector[0] == 1 && status_vector[1]) { isc_print_status(status_vector); /* Display error message. */ return(1); }; length = (short)isc_event_block(&event_buffer, &result_buffer, 1,"TRAIN_PLAN_UPDT"); isc_que_events(status_vector,&db_handle,&event_id,length,event_buffer,(ISC_EVENT_CALLBACK)event_function,result_buffer); if (status_vector[0] == 1 && status_vector[1]) { isc_print_status(status_vector); /* Display error message. */ return(1); }; на isc_que_events возникает следующая ошибка : did you forget the '&' ? что делаю не так? |