IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 17 ноя 2005, 17:29
Привет,
смотрю все у вас здесь серьезно. Надеюсь ругать за вопрос не будете
Вообщем изучаю уже несколько дней Firebird/Interbase, с надеждой научиться использовать API. С подключением к серверу более менее разобрался. Собственно пришло время ипользовать SQL. Насколько я понял каждый вызов SQL-ловской команды должен вводиться с помощью EXEC SQL. Проблема только в том, что с++ бильдер (версия 6 про) почему то не хочет распознавать эти команды и заявляет "undefined symbol 'EXEC'".
#include <ibase.h> вставил и библиотеку "fbclient_bor.lib" добавил к проекту. Неужели еще что-то пропустил. По крайней мере к базе коннектиться и инфу о ней выдает.
Спасибо заранее за ответ
P.S. искал здесь в форуме (также в FAQ) и в интернете. Ничего не нашел
-
Karp
- Сообщения: 41
- Зарегистрирован: 30 апр 2005, 16:30
Сообщение
Karp » 17 ноя 2005, 18:23
искал здесь в форуме (также в FAQ) и в интернете. Ничего не нашел
http://www.ibase.ru/devinfo/ibx.htm
для С сам разберёщься, и посмотри примеры в самом билдере
Насколько я понял каждый вызов SQL-ловской команды должен вводиться с помощью EXEC SQL
Неправильно понял
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 17 ноя 2005, 19:08
Спасибо за линк, но я что-то не вижу привязку к моему вопросу. Наверняка IBX базируется на API, но причем тут EXEC SQL, вернее то, что он не запускается в программе?
посмотри примеры в самом билдере
Смотрел. Понятное дело, что примеры, которые в имени имеют api, собственно и есть примеры для API

Но я смотрел и другие stat и dyn. Собственно и интересно, что посмотрев в них можно увидить, что в них SQL-овская команда вводится EXEC SQL. Может это не совсем относится к API, а больше к теме Embedded SQL. Но все равно интересно почему оно не работает. Ведь исходя из примеров должно.
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 17 ноя 2005, 19:40
lsiFB писал(а): Ведь исходя из примеров должно.
Я не Ц-шник, но всё-тки - в примерах про препроцессор grpe разве ничего не сказано? Имхо ехеки - это для него инструкции.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 17 ноя 2005, 20:28
короче, забей на exec sql, совсем, абсолютно. из BCB с IB/FB лучше всего работать именно через IBX, о чем тебе Karp и сказал.
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 17 ноя 2005, 21:02
Не, ну народ. Если это дело есть в примерах, и там ничего не подключают и все вроде работать должно, то почему в реале не работает. Это теперь где-то и спортивный интерес. По поводу препроцессора gpre в документации и сказано, что он прекомпиллирует запросы. Но это как-то не очень помогло (мне

).
Насчет IBX, да делал я как-то простенькую прогу. Все отлично, но захотелось копнуть поглубже, вот и пытаюсь как-нибудь все таки с API разобраться и все что вокруг, в частности примеры из дистрибуции. Тем более если сравнивать MYSQL API и IB API, то ИМХО в IB гораздо больше возможностей для более тонкого построения проги и контроля сервера.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 ноя 2005, 10:06
то есть, пытался, но не понял. Тогда еще раз:
exec sql есть специальная инструкция для GPRE, используемая в тексте на C, которая показывает препроцессору, что нужно выполнить ту или иную конструкцию SQL. То есть без препроцессора gpre EXEC SQL не имеет смысла. Посмотри примеры в поставке с расширением .e и идентичные .c, или попробуй обработать .e при помощи и посмотреть что получится на выходе.
Сейчас это (gpre + exec sql) уже практически никому не надо, за исключением экзотических случаев.
Копать глубже от IBX в IB API нет смысла, ибо IBX "снаружи" имеет абсолютно все возможности по тонкому управлению параметрами транзакций, соединений и т.п. Это и есть так называемые "компоненты прямого доступа".
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 18 ноя 2005, 11:31
По поводу GPRE это понятно еще из документации. Но большое спасибо за подробное обьяснение.
То есть без препроцессора gpre EXEC SQL не имеет смысла
Вот пожалуй это и есть тот самый пункт, который мне не понятен. Лично я понял, что он встроен в компайлер. Если нет, то где его взять. А вообще от абстрактного к конкретному. Допустим есть вот этот бессмысленный код:
Код: Выделить всё
#include <iostream.h>
#include <stdlib.h>
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
int main (void)
{
printf("I only get out this entry :-)");
char p[50];
cin.getline(p,50);
return 0;
}
Он вываливаестя на строке EXEC SQL и заявляет, что ошибка в декларации. Что нужно сделать, чтобы он заработал.
Сейчас это (gpre + exec sql) уже практически никому не надо, за исключением экзотических случаев
Очень кстати полезная информация. Спасибо.
Копать глубже от IBX в IB API нет смысла, ибо IBX "снаружи" имеет абсолютно все возможности по тонкому управлению параметрами транзакций, соединений и т.п. Это и есть так называемые "компоненты прямого доступа".
Да я не спорю. Просто хотелось написать общие классы для работы с Interbase, чтобы не зависеть от компайлеров, да и просто так ради интереса.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 ноя 2005, 13:34
"я все понял, но задаю такие вопросы, из которых ясно, что я ничего не понимаю".
Лично я понял, что он встроен в компайлер.
КТО встроен в какой КОМПАЙЛЕР??? разуй глаза, обуй ноги. gpre находится в каталоге bin. ОТКРОЙ ПРИМЕРЫ С РАСШИРЕНИЕМ .e. Попробуй напустить на них GPRE - посмотри результирующий код C.
н вываливаестя на строке EXEC SQL и заявляет, что ошибка в декларации. Что нужно сделать, чтобы он заработал.
сходи в ледяной душ, помогает. Прочитай еще раз мое предыдущее сообщение.
Просто хотелось написать общие классы для работы с Interbase, чтобы не зависеть от компайлеров, да и просто так ради интереса.
"дикие люди, дети гор". Если ты хочешь написать классы, то их уже есть, в достатке. Если ради интереса, то не читай доку по диагонали, опять же смотри примеры, или исходники чужих классов.
p.s. какой вообще нафиг exec sql в "классах" ???
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 18 ноя 2005, 14:07
kdv,
зря ты ругаешься. Я работаю сисадмином и каждый день приходится выслушивать вопросы, от которых можно инфаркт получить и это от людей которые с компами работают гораздо больше чем я. Тем менее стараюсь людям обьяснить доходчиво и без раздражения, что к чему. И это приносит свои плоды. Количество тупых вопросов сокращается.
Понимание, что такое GPRE - не означает автоматическое понимание, где он находится и как его применить. В документации сказано довольно расплывчато о нем. Спорить не буду, может знание английского подвело.
Это первое. И второе, если бы ты сразу ответил об GPRE, в котором я спрашивал, почему EXEC SQL в ошибку вываливается, то не было бы и всей дискуссии.
Все равно спасибо, хотя настроение мягко говоря подпорчено.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 ноя 2005, 15:05
я и ответил, сразу, вчера, как только увидел твое сообщение. Настроение испорчено - чем, собственно? Я написал про .e файлы и gpre. Очевидно, ты просто не захотел туда лезть. Поэтому мне пришлось более прямолинейно объяснять. И одно и то же приходится объяснять чаще, чем тебе, увы.
В "электронном" виде эмоции не видны. У меня нет никакого раздражения при ответе на подобные вопросы. Я всего лишь старался ПОДЧЕРКНУТЬ ключевые слова для понимания моего ответа. Раз ты сам сисадмин, то должен знать, что вопрошающие долбят в одну точку воспринимая только с третьего (или больше) раза. Если попался сам - чего расстраиваться?

Это со всеми бывает.
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 18 ноя 2005, 15:35
Ну отчасти согласен, что несколько раз повторили одно и то же. Честно говоря я вначале думал, что хидер какой-нибудь вставить надо, ну вот и услышав о GPRE, хоть о нем и почитал, но как-то не сообразил, что это отдельная вещь. Сбила с толку какая-то фраза, из которой я сделал "далеко-идущее" умозаключение, что GPRE должен быть уже в компайлере.
Кстати, если кому все же интересно, то читать надо "EmbedSQL.pdf", со стр.291.
kdv, будет желание можно эту тему в FAQ вставить, потому как перед тем как поставить вопрос я спрашивал у пары человек, которые в принципе уже давно программят, используя IB/FB и готовые копонеты типа IBX. Видно не я один такой.
Вообщем тема закрыта.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 18 ноя 2005, 15:50
я не хочу это в FAQ вставлять, потому что gpre это не просто вчерашний день, а таки 100-летней давности. Раньше (20-25 лет назад) программы для работы с серверами почти только так и писали. А сейчас это уже никому не надо - для чего хочешь есть и обертки, и компоненты, и драйверы и т.п.
В частности, gpre если и можно использовать, то например для каких-нибудь экзотических консольных программах на юниксах или вроде того. Но это нынче единичные случаи, и свыше, скажем, 100К исходников делает разработку очень длительной и тяжелой.
-
lsiFB
- Сообщения: 7
- Зарегистрирован: 17 ноя 2005, 16:43
Сообщение
lsiFB » 18 ноя 2005, 16:20
Ясно, убедительно