OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 21:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 07 Март, 2012 05:29 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Здравствуйте.

Открываем модуль 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 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Kubanych писал(а):
Где скрыта реализация Table.Read (или потомков?) от SqlDB ?


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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 07 Март, 2012 07:42 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Иван Кузьмицкий писал(а):
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.


Последний раз редактировалось Kubanych Среда, 07 Март, 2012 08:05, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 07 Март, 2012 08:05 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 07 Март, 2012 08:12 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Евгений Темиргалеев писал(а):
Kubanych писал(а):
Код:
PROCEDURE (t: StdTable) Read (row: INTEGER; VAR data: ANYREC); ...
Она-то и использует реализуемые драйверами операции.

Спасибо.

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 07 Март, 2012 08:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
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.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Март, 2012 08:41 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Спасибо.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB