EXEC SQL не работает

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

Модератор: kdv

Ответить
lsiFB
Сообщения: 7
Зарегистрирован: 17 ноя 2005, 16:43

EXEC SQL не работает

Сообщение 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

http://www.ibase.ru/devinfo/ibx.htm
для С сам разберёщься
Спасибо за линк, но я что-то не вижу привязку к моему вопросу. Наверняка 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

Ясно, убедительно

Ответить