Использование API (C++/Linux)

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

Модератор: kdv

Ответить
Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Использование API (C++/Linux)

Сообщение Toadcop » 12 фев 2008, 02:26

Вот в чём бида у меня я немогу нормально заинклудить библеотеки (это одно из проблем т.к. их как таковых нету) для того что бы мог использовать нужные функции для манипуляции БД через Firebird. (2.0)

т.е. вопрос.
КАК ПРАВИЛЬНО подключить нужные библеотеки что бы мочь использовать Firebird (InterBase) API.
я использую Dev-Cpp редактор и MinGW компилятор (он в нём) среда разработки Windows XP SP2.

коротко и ясно я немогу подключить/исользовать API мой компилятор ругаетьса (пишет функция ...referense@xxx (число напр 25) ну и всё... во время линкования) что он не может найти функцию которая спрятана за хиддером (ibase.h)

плиз кто знает в чём дело плиз подскажите ибо задолбало искать уже =\ пробывал много вариантов.
если не найду ответа наверно прийдётьса напрямую соурс Firebird'a использовать ТТ.
спасибо за внимание.

//PS желательно "объяснить" как это делать для win32 приложени и как для unix =) (Linux) сорри если чуть запутано наисано ^^ я newbie

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 12 фев 2008, 08:45

еще раз будешь коверкать русский язык - вылетишь отсюда к чертовой матери.

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 12 фев 2008, 12:28

да еще и кроспост с sql.ru

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 12 фев 2008, 13:20

на sql.ru толком никто не ответил. Я сам на C++ не пишу, но вот какие результаты дает поиск похожей ошибки (ошибка, кстати, классическая - дальше некуда):

http://subscribe.ru/archive/comp.soft.p ... 73900.html
Просто Вы не подключили библиотеку для работы с этими функциями gdi32.lib (в Вашем примере и user32.lib тоже используется), чтобы ее подключить нужно прописать в начале, после #include<windows.h> строчку
#pragma comment(lib,"gdi32")
либо при компиляции указать библиотеку:
cl example.cpp user32.lib gdi32.lib


в поставке FB 2 в каталоге lib есть 3 библиотеки - для компиляторов MS и Borland. Думаю, что для MinGW должен быть способ подключить одну из этих либ.

p.s. личное мнение по поводу C++ - такие вещи надо знать. По-моему это основы работы компилятора и линкера C++.
И вопрос надо было задавать на sql.ru, в разделе C++.

p.p.s. кстати, в вопросе на sql.ru у человека вроде был нормальный русский язык, пусть и с ошибками (на уровне 7-го класса школы). А тут прямо перекосило.

Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Сообщение Toadcop » 12 фев 2008, 17:01

угу спасибо но вроде Dev-Cpp как то коряво юзает #pragma
т.к. я даже не смог норм использовать пример который там по ссылке (который требует user32.lib, gdi32.lib)

до и после использования comment(lib,"gdi32")...
нету некакой разницы =( (делал всё как там + сам еще пробывал некоторые варианты)

у кого есть опыт с Dev-Cpp если можете то отпишитесь =)

Tonal
Сообщения: 104
Зарегистрирован: 30 сен 2007, 13:42

Сообщение Tonal » 12 фев 2008, 18:33

Обшее место:
gcc (mingw) не поддерживает ни #pragma comment(lib,...) ни #pragma link... - это расширения MS.
Ему библиотеки нужно честно указать в коммандной строке линкера.
В средах это обычно делается в настройке проекта на закладке link или library.

По поводу библиотек птицы - нужно использовать - fbclient_ms.lib - её mingw нормально хавает. :-)

Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Сообщение Toadcop » 13 фев 2008, 01:45

угу я уже заметил что прагма не пашет как надо =) (спс)

вообщем с этим я разабралса мне подсказали юзать IBPP
короче вроде теперь всё норм.
НО при вызове Fetch вылетает прога =\

вроде конектитьса и начинает транзакцию норм и даже екзекутит процедуру вроде норм. (если не нор то прога вылетала тож)
но теперь она всегда вылетает на Fetch что бы там небыло =\\\\
(ну синтакс еррора ясно что нету =))

странно... чё то мне не везёт =(

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 13 фев 2008, 10:40

может тогда на бейсик или фрипаскаль посмотришь ? =)

Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Сообщение Toadcop » 13 фев 2008, 13:51

может тогда на бейсик или фрипаскаль посмотришь ? =)
т.е. на них кодить ? =) мне С/С++ по синтаксису привычней... + оптимальный вариант имхо.

да про Fetch()
st->Execute("execute procedure REPLI_GENERATE(2,'2008-01-1 10:50:23.0800')");

вот это я запускаю оно вроде выполняетьса.
НО Фетчь не имеет некаких строк в себе =/ поэтому и еррор.
*** IBPP::LogicException ***
Context: Statement::Fetch
Message: No statement has been executed or no result set available.

эта SQL процеду рабочия.

т.е. мне надо запустить процедуру и потом получить возращаемое значение.

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 13 фев 2008, 16:27

Toadcop писал(а): т.е. на них кодить ? =) мне С/С++ по синтаксису привычней... + оптимальный вариант имхо.
оптимальный вариант когда знаешь что пишешь или учебник есть.
по синтексису можно и на перле наверно писать =) синтаксис похож, хотя все от задачи зависит

Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Сообщение Toadcop » 13 фев 2008, 18:44

оптимальный вариант когда знаешь что пишешь или учебник есть.
есть такая фичя как желание упорство и практический опыт =)
ака что бы ты не делал тебе нужен практический опыт и достаточно много что бы уметь что то оптимально делать.

сорри что повтрояюсь но "задачя"
(я использую интерфей IBPP (www.ibpp.org) он оказалса самым оптимальным для этой задачи)
есть внутриния процедура (в самой БД)

она берёт integer, timestamp
return varchar(1024)
называетьса REPLI_GENERATE (но это не важно)
возращает по такому принцыпу

from s_replidels where repli_time between :repli_date and :to_time into one_raw do suspend;
(сама процедура рабочия это как бы 100% гарантия)

ну вот вопрос =) как правильно вызвать эту процедуру и получить эти возращаемые строки ? (и если есть особености установки транзакции то пожалуйста тоже указать их)

// ну С++ мне нужен как бы лично самому вот и пишу на нём вот напр для этого grimoire

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2008, 22:28

если процедура возвращает резульат и внутри нее suspend, то наверное ее так написали, чтобы вызывать по select ... from myproc.

не смотри доку, примеры и чужой код - мучайся дальше.

Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Сообщение Toadcop » 14 фев 2008, 03:27

kdv спасибо =) ты помог теперь всё почти ок =) не считая того что мне тока первый результат возращаетьса =) а сам Фетчь в цыкле while(st->Fetch())

может нужны какие нибудь особые комманды что бы шло продолжение выполнение процедуры ? (я вроде читал что суспенд "ждёт" до тех пор пока клиент не вызовет Фетчь и потом он сам дальше продолжает. в моём случие что то не очень работает)
(да я знаю что я нуб =) но всё же вы мне очень сильно помогли.)
даже вон небольшими подсказками.
еще раз спасибо =)

Toadcop
Сообщения: 7
Зарегистрирован: 12 фев 2008, 01:37

Сообщение Toadcop » 14 фев 2008, 15:09

ВСЕМ большое спасибо !!! теперь всё работет ! =) проблема была в "настройках" баззы данных (спец таблица)

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 14 фев 2008, 22:14

аж интересно, а где у базы данных есть настройка выдавать процедурам по одной строчке и не больше ?

Ответить