OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 18 Апрель, 2024 06:09

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 14:27 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Получаю набор из БД MS SQL. Из поля типа int (4 байта)
Вот код:
Код:
PROCEDURE EventBase(tab:SqlDB.Table;par:ANYPTR);
VAR
 Запись:RECORD
   num:INTEGER;
 END;
 i:INTEGER;
BEGIN
 IF tab.res=0 THEN
   StdLog.String('Получено ');
   StdLog.Int(tab.rows);
   StdLog.String(' строк');StdLog.Ln;
   (***********************************************)
  FOR i:=1 TO tab.rows DO
   tab.Read(i,Запись);
  (* StdLog.String(Запись.tab);*)
   StdLog.Int(Запись.num);
   StdLog.Ln;
  END;
 END;
END EventBase;


Это событие прикрученное
Код:
   t.Exec('select kzaksl from zap');
   t.Call(EventBase, NIL);

Так вот проблема в том что в Запись.num чепуха приходит:
Цитата:
6357059
6357059
6357059
6357059
6357059

Хотя в БД там в полях числа до 10 стоят.

Вопрос:
Как правильно получать записи из таблицы?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 14:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Виталий писал(а):
Вопрос:
Как правильно получать записи из таблицы?
Внимательно прочитать документацию.
Sql Subsystem Dev-Man писал(а):
Design rules
This section gives some rules which should be followed when designing a database application. The reason for each rule is given after the rule.

Interactors or at least their types must be exported if they should be used as place holders in SQL statements.
(Non-exported types are not accessible through metaprogramming, and thus controls and the SQL string translation mechanism could not be used with them.)
Обратите внимание, что Read не гарантирует результат 100%, как предполагается в Вашем коде.
SqlDB писал(а):
PROCEDURE (t: Table) Read (row: INTEGER; VAR data: ANYREC)
NEW, ABSTRACT
Reads the row'th row of the result table into the interactor data.
...
Post
t.res IN {0, converted, truncated, overflow, incompatible, noData}
P.S. Док-я по Sql переведена.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 14:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Насколько я помню... Поля у записи должны быть экспортированы. Т.к. SqlDB работает с записями через "обезопашенное метапрограммирование" (модуль Meta) и ниже не лезет.

Экспортировать можно прямо "по месту" (т.е. VAR запись: RECORD num*: INTEGER END).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 15:01 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Цитата:
Обратите внимание, что Read не гарантирует результат 100%, как предполагается в Вашем коде.

Что-то я не сильно понял эту фразу... Впрочем
Interactors or at least their types must be exported кое что прояснило.
Но:
Код:
VAR
 Запись:RECORD
   num*:INTEGER;
 END;

На * пишет - illegaly marked identifier


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Пардон. Склероз подвёл. Или в какой-то из версий ББ это скользкое место пропало.

Ну, просто глобальный тип объявите с экспортированными полями. Проблем-то :)
Сам тип точно можно не экспортировать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 15:23 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Ага!!! Есть.
Вынес Запись глобально и * поставил ей - сработало

Терь понял как делать.
Думаю тема закрыта.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 20:01 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Я обычно объявляю тип записи, которая неэкспортирована, но поля в ней экспортированы. Переменные для чтения результатов запроса делаю локальными. Ну, получается, что тип записи скрыт от остальных модулей.


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

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


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

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


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

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