powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конкатенация в макросе
53 сообщений из 53, показаны все 3 страниц
Конкатенация в макросе
    #39919199
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу странного: объявить константу через параметр макроса, но без префикса или суффикса.
Есть какой-нибудь трюк, позволяющий конкатенацию с пробелом или ещё чем-нибудь незначимым?

Чтобы следующее работало:
Код: sql
1.
2.
3.
4.
5.
6.
7.
#define REDEFINE(X) const int ##X = X

#define ABC 2
REDEFINE(ABC);
#undef ABC

int main() { return ABC; }


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй __LINE__
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919208
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПопробуй __LINE__

Как-то не получается его на хвост нанизать. Оно тупо разворачивается в "const int
__LINE__ABC = 2;"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919216
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там номер строки должен быть.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919229
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, я не смог донести в первом посте идею. У меня есть макрос-константа. Типа
Код: sql
1.
#define SQL_INTEGER 2


Мне хочется из него сделать
Код: sql
1.
const SQLSMALLINT SQL_INTEGER = 2;


без копипаста и search-and-replace, кодом класса
Код: sql
1.
REDEFINE(SQL_INTEGER);


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919260
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Мне хочется из него сделать

по сути ты хочешь это:
Код: plaintext
1.
const SQLSMALLINT SQL_INTEGER = SQL_INTEGER;


если
Dimitry Sibiryakov
без копипаста и search-and-replace

то хз как ещё то...
имхо, search-and-replace - best choice.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919263
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда афтор хочет "странного" - завсегдатаи нашего форума сурово сдвигают брови... :)
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919264
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухпо сути ты хочешь это:

Да. И ещё "#undef SQL_INTEGER" после этого.

Ибо макросы, в отличии от констант, не оборачиваются в неймспейсы и если две сторонние
библиотеки по их именам пересекутся - становится мучительно больно их сопрягать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919402
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отключить подстановку макроса можно только для функциональных макросов.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919429
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Похоже, я не смог донести в первом посте идею. У меня есть макрос-константа. Типа
Код: sql
1.
#define SQL_INTEGER 2


Мне хочется из него сделать
Код: sql
1.
const SQLSMALLINT SQL_INTEGER = 2;


без копипаста и search-and-replace, кодом класса
Код: sql
1.
REDEFINE(SQL_INTEGER);



Почему search-and-replace сложнее, чем search-and-insert?
найти
Код: plaintext
#define SQL_INTEGER 2
и заменить на
Код: plaintext
const SQLSMALLINT SQL_INTEGER = 2;
сложнее, чем найти то же самое и вставить после него
Код: plaintext
1.
REDEFINE(SQL_INTEGER);
#undef SQL_INTEGER
?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919433
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заголовок сторонний. Конкретно - sql.h. Вставлять строчки я могу в свою обёртку, но
трогать оригинал - нельзя, софтине ещё у других людей собираться надо. Возможно, с другими
версиями компилятора и названного заголовка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919456
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то мешает добавить свой consts.h, где прописать все:
Код: plaintext
1.
2.
const SQLSMALLINT SQL_INTEGER = SQL_INTEGER;
#undef SQL_INTEGER


...нельзя делать undef того, что будет либа юзать?
т.е. у нас тут классический трабл с легаси кодом и рефакторингом...
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919459
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухчто-то мешает добавить свой consts.h

Ничего, именно этим я сейчас и занимаюсь. Правда, писать приходится так:
Код: sql
1.
2.
#undef SQL_INTEGER
const SQLSMALLINT SQL_INTEGER = 2;


И вот эта двойка меня раздражает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919567
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня эта двойка тоже раздражает.
Чем тебя не устраивают стандартные константы?
Это такой специальный метод обфускации? Чтоб собиралось только тут, только с этими драйверами и нигде больше?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919606
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧем тебя не устраивают стандартные константы?

Что такое "стандартные константы"?

White OwlЭто такой специальный метод обфускации? Чтоб собиралось только тут, только с этими
драйверами и нигде больше?
Это такой метод разрешить конфликт имён макросов. Чтобы собиралось хоть как-то и после
этого работало.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919613
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

White OwlЧем тебя не устраивают стандартные константы?

Что такое "стандартные константы"?Те которые определены в sql.h компанией Microsoft еще в те времена когда она только изобрела ODBC. Те которые используются всеми ODBC драйверами, потому что они все используют один и тот-же sql.h,

Dimitry Sibiryakov
Это такой метод разрешить конфликт имён макросов. Чтобы собиралось хоть как-то и после
этого работало.
А откуда взялся конфликт макросов??? В нормальной программе делается #include <sql.h> и все макросы оказываются определены один раз и на всю компиляцию. Если ты подключаешь к себе какой-то левый заголовок, то ССЗБ и вся проблема решается убиранием этого #include.

Не, я конечно могу предположить что встретился на земле идиот который написал свой собственный ODBC драйвер на основе собственного набора SQL* констант. Но неужели тебе обязательно использовать этот кривой драйвер??? Что у тебя за уникальная RDBMS что для нее есть всего один единственный драйвер, да и тот со сбитой картой типов???
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бе переформатировал вопрос. Не борьба с легаси а формирование принципов будущей разработки чтоб
таких конфликтов никогда не было.

А легаси оно так и будет. Ничего с этим не поделать.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919624
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧто у тебя за уникальная RDBMS что для нее есть всего один единственный драйвер, да и тот
со сбитой картой типов???

"Угадай с трёх раз..."

Это, конечно же, Firebird. У которой есть ibase.h, точно так же определяющий константы с
примерно такими же именами со времен, когда ODBC не существовало в природе.

И написание утилиты, которая перекачивает данные из одного в другой, становится забавной
борьбой двух legacy. Причём оба интерфейса ещё живы и развиваются, так что тупо взять
заголовки, скопировать себе и поправить не слишком-то хороший вариант (я пробовал).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919628
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В топиках сравнений СУБД периодически появляется один господин который
рекламирует файрбёрд

https://www.sql.ru/forum/1320886/firebird-shustraya-belaya-krysa
https://www.sql.ru/forum/1307360/firebird-stremitelnyy-groznyy-kaban

Подозрвеваю что господин меняет никнеймы.

Интересно. Какова вообще перспектива ODBC? Я считал что его похоронили еще лет 10 назад.
Но как я вижу он жив.

А если его хоронят - какова альтернатива?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919630
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Это, конечно же, Firebird. У которой есть ibase.h, точно так же определяющий константы с
примерно такими же именами со времен, когда ODBC не существовало в природе.

И написание утилиты, которая перекачивает данные из одного в другой, становится забавной
борьбой двух legacy. Причём оба интерфейса ещё живы и развиваются, так что тупо взять
заголовки, скопировать себе и поправить не слишком-то хороший вариант (я пробовал).

Нууу.... FireBird это конечно птица гордая...
Но все равно не вижу проблемы.

Если ты делаешь ETL, то во первых, можно все сделать намного проще через две отдельные утилиты - одна выгружает, другая загружает. Между ними может быть что угодно - чаще всего это CSV, реже какой-нибудь собственный формат файлов, еще реже полноценный IPC...

Не хочешь две утилиты? Тогда разбей свою утилиту на три логических части - одна будет "работать" с бизнес элементами (в смысле описывать и хранить данные не в виде таблиц, а в виде классов) а две другие будут делать чисто сериализацию этих бизнес элементов в свои RDBMS. Вот эти две части просто кидаешь в подкаталоги (чтобы не путаться) и работаешь с ними по отдельности.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919635
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Какова вообще перспектива ODBC?

а куда он из колеи денется? (с)
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919636
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Интересно. Какова вообще перспектива ODBC? Я считал что его похоронили еще лет 10 назад.
Но как я вижу он жив.
Жив и будет жить еще очень-очень долго.
Просто вспомни что для MS SQL Server'а это "native" интерфейс и всяческие "более продвинутые" интерфейсы являются на самом деле обертками над ним. Так что пока MS живет как фирма - ODBC будет жить.

mayton
А если его хоронят - какова альтернатива?
Альтернатив на самом деле довольно много, практически каждая команда делавшая свою СУБД делала для нее и интерфейс исходящий из технических решений в самой СУБД. Но...
Но сегодня, все СУБД имеющие клоны сервера для Виндов имеют в стандартной поставке и ODBC драйвер. Да и для Линукса имеются клоны драйверов, хотя там чаще можно встретить другие интерфейсы. Но... к ним все равно делают ODBC обертки. Простота интерфейса в сочетании с универсальностью (как ОС так и СУБД) - эту комбинацию побить чрезвычайно сложно.

Кстати, вот еще одни вариант для TC: https://firebirdsql.org/en/odbc-driver/ и выкинуть к чертям ibase.h.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919638
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
mayton

Интересно. Какова вообще перспектива ODBC? Я считал что его похоронили еще лет 10 назад.
Но как я вижу он жив.
Жив и будет жить еще очень-очень долго.
Просто вспомни что для MS SQL Server'а это "native" интерфейс и всяческие "более продвинутые" интерфейсы являются на самом деле обертками над ним. Так что пока MS живет как фирма - ODBC будет жить.
Хм... я считал что его заменяют на ADO.Net везде где только можно.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919644
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хм... я считал что его заменяют на ADO.Net везде где только можно.
Заменяют. В .Net языках.
Не забывай что ODBC это С интерфейс и только С и С++ могут с ним работать напрямую, все остальные языки требуют обертки. Вот для .Net такой оберткой и является ADO.Net.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в стеке технологий если сравнить ODBC/Ado что у них общее? Или есть ли какая-то
поясняющая картинка как идет современная интеграция приложений Microsoft
с MSSQL? ИЛи там какие есть best-practices. Рекомендации...
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919653
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

А idl-ку к ODBC не пробовал переправить и пересобрать?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919673
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Вот для .Net такой оберткой и является ADO.Net

ado.net не требует никаих обёрток
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919684
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А в стеке технологий если сравнить ODBC/Ado что у них общее?

ADO (который классический, не .NET) является обёрткой для OLEDB.
OLEDB кроме нативных провайдеров имеет обёртку над ODBC

нативный майкрософтовский dblib давно похоронен
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919698
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А в стеке технологий если сравнить ODBC/Ado что у них общее? Или есть ли какая-то
поясняющая картинка как идет современная интеграция приложений Microsoft
с MSSQL? ИЛи там какие есть best-practices. Рекомендации...
Общего у ODBC и ADO довольно много. Начиная с владельца и заканчивая общими принципами работы с ними.
В среднем, для простоты понимания, можно говорить что ADO и ODBC это родные братья, но ADO для тех языков которые предпочитают работать с классами, а ODBC для языков предпочитающих функции. По возможностям и количеству фич они практически равны.
С точки зрения практической реализации, большинство ADO подключений к СУБД это всего-лишь использование моста ODBC-OLEDB-ADO с ODBC драйвером делающим реальные TCP запросы, а клиентская программа работает на ADO. Практически, вплоть до появления ADO.Net не существовало ADO драйверов.

А рекомендации... Все зависит от СУБД и языка на котором пишется клиент. В среднем, можно брать тот интерфейс который более удобен с точки зрения языка клиента (и это чаще всего ADO). Потери производительности на обертке можно игнорировать.
Но бывают ODBC драйвера с "расширениями вендора" которые дают больше функциональности. Например ODBC для SA позволяет делать push сообщений на клиента из хранимых процедур - чрезвычайно вкусная штука, но доступная только для прямого использования ODBC.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919702
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
mayton
А в стеке технологий если сравнить ODBC/Ado что у них общее?

ADO (который классический, не .NET) является обёрткой для OLEDB.
OLEDB кроме нативных провайдеров имеет обёртку над ODBC

нативный майкрософтовский dblib давно похоронен
Вообще-то dblib это детище Sybase а не Microsoft. Разработанное во времена Sybase SQL Server.

Когда Microsoft купила у Sybase исходники их СУБД - купили и исходники клиентского интерфейса (dblib).
Долгое время, dblib был единственной возможностью подключаться к обоим СУБД (Sybase и MS SQL Server). Потом энтузиасты взломали этот интерфейс и родился FreeTDS.
Потом у Microsoft появились другие СУБД (FoxPro, Access) и возникла необходимость поддерживать три разных интерфейса - родился ODBC. Новый интерфейс стал "родным" для MS SQL Server и dblib в Микрософте умер.
А вот Sybase продолжала его поддерживать, но параллельно и новый интерфейс начали разрабатывать - родился CTlib. Оба интерфейса dblib и CTlib продолжали распространятся в каждой новой версии (теперь уже) Sybase Adaptive Server Enterprise. И вместе они назывались Open Client. Потом Open Client начал включать в себя и ODBC и OLE DB драйвера. Сейчас, когда эта СУБД уже носит имя SAP Sybase Adaptive Server Enterise - dblib продолжает существовать в каталоге на клиентском диске. Но я не знаю ни одного существующего проекта который не был бы переведен на CTlib или ODBC.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919705
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Если точнее -
Ado.net ничего общего с ado не имеет кроме похожего названия
Ado обертка над oledb, в odbc не нуждается ( хотя мост oledb-odbc существует)

Oledb поддерживает нереляционные источники - https://www.ibm.com/support/pages/oledb-ole-db-and-odbc-positioning
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919710
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
White Owl,

Если точнее -
Ado.net ничего общего с ado не имеет кроме похожего названия
Не только похожее название, но и такой-же набор классов и методов - а это и есть определение интерфейса.

Изопропил
Ado обертка над oledb, в odbc не нуждается ( хотя мост oledb-odbc существует)
Да, ADO обертка над OLE DB. И да существуют OLE DB драйвера. Вот только они все разрабатывались по остаточному принципу и чрезвычайно кривы (как собственно и сам OLE DB). Поэтому практически всегда ADO используется с ODBC (через мост конечно же).

Изопропил
Oledb поддерживает нереляционные источники - https://www.ibm.com/support/pages/oledb-ole-db-and-odbc-positioning
ODBC их тоже поддерживает. Примеры, ну хотя-бы xBase и Excel. В этих случаях парсер SQL запросов и собственно "сервер" находится непосредственно внутри ODBC драйвера. Этот SQL является диалектом разработанным для MS Access и практически as is скопированный во все микрософтовские ODBC драйвера для нереляционных БД, называется Jet SQL.

И вообще, мы ушли от изначальной темы топика, поэтом прекращаем.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919772
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Dimitry Sibiryakov,

А idl-ку к ODBC не пробовал переправить и пересобрать?
я к чему это(вчера с планшета был)
сишные заголовки не исходные, а автогенирируемые

если надо только константы, то урвать их с библиотеки типов и отформатировать "как надо" дело недолгое
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919915
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)сишные заголовки не исходные, а автогенирируемые

У ODBC - исходные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919923
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а где конфликт sql.h и ibase.h ?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919928
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила где конфликт sql.h и ibase.h ?

Например, SQL_TYPE_DATE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919962
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

мешает ненужный sqlda_pub.h ?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39919975
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилмешает ненужный sqlda_pub.h ?

"Ненужный"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920024
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Изопропилмешает ненужный sqlda_pub.h ?

"Ненужный"?..
если нужный - зачем тогда #undef SQL_INTEGER ?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920033
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такую вот картинку нашел.

...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920054
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

полудухпо сути ты хочешь это:

Да. И ещё "#undef SQL_INTEGER" после этого.


Если в три строчки, то можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
#define SQL_INTEGER 2

#define PREDEFINE(name) const int TMP_##name = name;
#define REDEFINE(name) const int name = TMP_##name;

PREDEFINE(SQL_INTEGER)
#undef SQL_INTEGER
REDEFINE(SQL_INTEGER)



Если никто не берет адреса от TMP_... то оно как-бы и не должно быть в памяти.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920114
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот такую вот картинку нашел.

Врут.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920116
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
mayton
Вот такую вот картинку нашел.

Врут.

Дай более корректную картинку.
Я обычно начинаю изучение вопроса со стека зависимостей. Кто что вызывает и кто от чего зависит.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920135
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
White Owl
пропущено...
Врут.

Дай более корректную картинку.
Я обычно начинаю изучение вопроса со стека зависимостей. Кто что вызывает и кто от чего зависит.
Да нет такой картинки. Там слишком много будет стрелочек чтобы в них всех разобраться. Или возьми эту картинку что ты уже нашел, объедини два нижних бокса (SQL/non-SQL) и добавь стрелочек из каждого верхнего бокса в нижний (за исключением ADO который только на OLE DB).

В общем ситуация простая:
У каждой СУБД есть собственный протокол общения с клиентами. SQL или не-SQL СУБД не важно.
Каждый такой протокол имеет собственный интерфейс который может использоваться клиентом - в этом случае клиент получает полный доступ к возможностям СУБД. Но эти интерфейсы уникальны для каждой СУБД и не совместимы между собой (исключение родственные протоколы).

Кроме уникальных (родных) интерфейсов существует группа универсальных интерфейсов рассчитанных на использование в конкретном языке (группе языков). Тогда мы говорим о "драйвере для СУБД" в рамках интерфейса.
Драйвер для СУБД реализует протокол общения между СУБД и машиной клиента, и выступает переводчиком между клиентским интерфейсом и протоколом. Если интерфейс SQL, а сама СУБД не SQL, то парсер языка вставляется внутрь драйвера, между собственно клиентским интерфейсом и драйвером протокола.
За исключением ADO который является полной оберткой надо OLE DB и полностью зависит от драйвера реализованного в OLE DB. Однако так как существует стандартный драйвер-мост OLE DB - ODBC то и ADO может работать на ODBC драйвере.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920159
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, OK спасибо.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920177
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlОднако так как существует стандартный драйвер-мост OLE DB - ODBC то и ADO может работать
на ODBC драйвере.

В результате ODBC драйвер переводит нативный интерфейс в ODBC интерфейс, потом OLE DB
провайдер для ODBC переводит ODBC интерфейс в OLE DB интерфейс, потом ADO обёртка
переводит OLE DB интерфейс в ADO интерфейс. В особо запущенных случаях ADO интерфейс
переводится в VCL DB интерфейс (для Delphi мышевозников) или обратно в нативный интерфейс
(для MS DB Links).

"А теперь мы со всей этой фигнёй попытаемся взлететь." (c)
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920186
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
White OwlОднако так как существует стандартный драйвер-мост OLE DB - ODBC то и ADO может работать
на ODBC драйвере.

В результате ODBC драйвер переводит нативный интерфейс в ODBC интерфейс, потом OLE DB
провайдер для ODBC переводит ODBC интерфейс в OLE DB интерфейс, потом ADO обёртка
переводит OLE DB интерфейс в ADO интерфейс. В особо запущенных случаях ADO интерфейс
переводится в VCL DB интерфейс (для Delphi мышевозников) или обратно в нативный интерфейс
(для MS DB Links).

"А теперь мы со всей этой фигнёй попытаемся взлететь." (c)Да. Но на практике это работает и вполне успешно.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920238
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и каждый раз строка будет переводиться в новый интерфейс?
т.е. 4-5 copy?
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920248
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
и каждый раз строка будет переводиться в новый интерфейс?
т.е. 4-5 copy?

в случае MSSQL - OLEDB и ODBC реализованы как нативные,
никаких прокладок и лишних копирований
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920266
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
и каждый раз строка будет переводиться в новый интерфейс?
т.е. 4-5 copy?
Прежде чем ужасаться, подумай, как этот "перевод" делается.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920410
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это я у вас и спрашиваю, как он делается
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920695
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное правильный вопрос - слинкована либа? Или работает IPC.
...
Рейтинг: 0 / 0
Конкатенация в макросе
    #39920733
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Наверное правильный вопрос - слинкована либа? Или работает IPC.

такой же бессмысленный вопрос
...
Рейтинг: 0 / 0
53 сообщений из 53, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Конкатенация в макросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]