OberonCore
https://forum.oberoncore.ru/

Где скрыта реализация потомков Table.Read от SqlDB
https://forum.oberoncore.ru/viewtopic.php?f=23&t=3875
Страница 1 из 1

Автор:  Kubanych [ Среда, 07 Март, 2012 05:29 ]
Заголовок сообщения:  Где скрыта реализация потомков Table.Read от SqlDB

Здравствуйте.

Открываем модуль SqlDB.
Там есть строка
Код:
PROCEDURE (t: Table) Read* (row: INTEGER; VAR data: ANYREC), NEW, ABSTRACT;


Если добавить строку
Код:
PROCEDURE (t: Table) ReadLn* (row: INTEGER; VAR data:POINTER TO ARRAY OF String), NEW, ABSTRACT;


то ошибка показывается здесь
Код:
StdTable = POINTER TO RECORD (Table [unimplemented abstract procedures in base types])


Table - сын ANYPTR
Код:
Table* = POINTER TO ABSTRACT RECORD

Модуль SqlDb непосредственно подключается в приложениях с базами данных
и этот Table используется, его метод Read вызывается.
Где скрыта реализация Table.Read (или потомков?) от SqlDB ?

Автор:  Иван Кузьмицкий [ Среда, 07 Март, 2012 06:05 ]
Заголовок сообщения:  Re: Где скрыта реализация потомков Table.Read от SqlDB

Kubanych писал(а):
Где скрыта реализация Table.Read (или потомков?) от SqlDB ?


Методы Table реализуются в драйвере, посмотрите в SqlObxDriv, например. Такой подход позволяет менять SQL-"хост", не меняя прикладную логику.

Чтобы, к примеру, сделать прямое подключение к серверу MySQL, потребовалось написать соответствующий драйвер. Есть драйвер для БД Firebird. Да какой угодно можно драйвер сделать.

Автор:  Kubanych [ Среда, 07 Март, 2012 07:42 ]
Заголовок сообщения:  Re: Где скрыта реализация потомков Table.Read от SqlDB

Иван Кузьмицкий писал(а):
Kubanych писал(а):
Где скрыта реализация Table.Read (или потомков?) от SqlDB ?


Методы Table реализуются в драйвере, посмотрите в SqlObxDriv, например.

Я тоже так думал вначале.
Открываем, смотрим.
В модуле SqlObxDriv (и в MysqlDriver ) есть методы
Код:
 
PROCEDURE (t: Table) ReadInteger (row, column: INTEGER; OUT val: INTEGER);
PROCEDURE (t: Table) ReadReal (row, column: INTEGER; OUT val: LONGREAL);

но нигде я не нашел реализацию метода
Код:
PROCEDURE (t: Table) Read* (row: INTEGER; VAR data: ANYREC)

То же самое в драйвере Firebird.

Автор:  Евгений Темиргалеев [ Среда, 07 Март, 2012 08:05 ]
Заголовок сообщения:  Re: Где скрыта реализация потомков Table.Read от SqlDB

Kubanych писал(а):
Модуль SqlDb непосредственно подключается в приложениях с базами данных
и этот Table используется, его метод Read вызывается.
Где скрыта реализация Table.Read (или потомков?) от SqlDB ?
В приложениях используется реализация, скрытая в этом же модуле: SqlDB.StdTable.
Код:
PROCEDURE (t: StdTable) Read (row: INTEGER; VAR data: ANYREC); ...
Она-то и использует реализуемые драйверами операции.

Автор:  Kubanych [ Среда, 07 Март, 2012 08:12 ]
Заголовок сообщения:  Re: Где скрыта реализация потомков Table.Read от SqlDB

Евгений Темиргалеев писал(а):
Kubanych писал(а):
Код:
PROCEDURE (t: StdTable) Read (row: INTEGER; VAR data: ANYREC); ...
Она-то и использует реализуемые драйверами операции.

Спасибо.

А ларчик просто открывался! Причина - в моей невнимательности.

Тут один коллега писал аналог Joomla на BlackBox, остановился на
необходимости принимать результат запроса в динамический массив строк
(когда заранее неизвестна структура таблицы и неизвестно, какой должна быть запись-итерактор).

Будем переделывать StdTable.Read в StdTable.ReadLn. На первый взгляд там очень много чего надо перелопатить. Может быть, кто-нибудь сталкивался с такой задачей?

Автор:  Евгений Темиргалеев [ Среда, 07 Март, 2012 08:43 ]
Заголовок сообщения:  Re: Где скрыта реализация потомков Table.Read от SqlDB

Kubanych писал(а):
Может быть, кто-нибудь сталкивался с такой задачей?
SqlDb Docu писал(а):
TYPE Row
A Row variable contains a textual representation of a single row of a database. An interactor of this type can be used as parameter of the Table.Read operation when a textual representation of an unknown table is to be retrieved.

Автор:  Kubanych [ Пятница, 09 Март, 2012 08:41 ]
Заголовок сообщения:  Re: Где скрыта реализация потомков Table.Read от SqlDB

Спасибо.

Надо было мне просто внимательней читать документацию. А то получается ситуация,как у Кроша и Ежика в Смешариках: "Не знаю, чему удивляться больше: твоей изобретательности или твоей неосведомленности."

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/