Страница 1 из 1

Прямой SQL + iExtAttr .. как то плохо работает ...

Добавлено: 12 окт 2009, 12:34
Masygreen
итак .. есть запрос прямой sql - ну ессно цыкл по нему ..
в цыкле собираем nRec Katsopr и записываем в времянку ...
тут же хотим получить внешний атрибут к акту - встроенной функцией

Код: Выделить всё

  

var KatSopr_nRec:comp;

sqlBindCol(stmt, 6, KatSopr_nRec);
While(sqlFetch(stmt) = TsOk) 
  { 
     _dTransfer:=piExAttr.dGetAttr(coKatSopr,KatSopr_nRec,'Дата акта');

     TempData01._nRecKatSopr:=KatSopr_nRec;
     TempData01._dTransfer:=_dTransfer;
     insert current TempData01;
     update current TempData01;
   }
в итоге получаю случайное заполнение внешнего атрибута ... т.е. для 95% строк функция dGetAttr возвращает пустую дату ..

ели поворотно пройтись по временной таблице все будет ОК. где я ошибся?? или нельзя работать с прямым Sql совместно с функциями галактики??

Код: Выделить всё

_loop TempData01
 {
_dTransfer:=piExAttr.dGetAttr(coKatSopr,TempData01._nRecKatSopr,'Дата акта');
TempData01._dTransfer:=_dTransfer;
update current TempData01;
 }

Добавлено: 12 окт 2009, 13:01
Den
Натыкался тоже на подобную проблему, тока внутри While&sqlFetch просто пытался сделать getfirst на другую таблу. В результате получалась ерунда какая то.

Добавлено: 12 окт 2009, 13:07
Masygreen
тоже результат :) значить это системный косяк => будем пост обработкой херачить :(

Добавлено: 13 окт 2009, 12:31
ilshat
А что мешает в самом прямом SQL сразу вытянуть внешний атрибут? Для того он и есть прямой SQL, чтобы все сразу одним ударом.

Добавлено: 13 окт 2009, 13:15
Masygreen
надо получить много внешних атрибутов - проще было функцией - к тому же она по времени равна прямоскуэльной т.к. там все по индексами в отношении 1:1...
но возможно переделаю ....

Добавлено: 14 окт 2009, 10:47
ilshat
Мы для себя нарисовали функцию возвращающую значение атрибута по номеру таблицы, nrec и названию атрибута. Для прямого SQL самый смак.

Добавлено: 15 окт 2009, 12:00
Vik
На платформе MSSQL , по-моему, во время работы с DSQL нельзя обращаться к базе данных обычными getFirst - ами, и getNext - ами, если в лог глянуть, там так в такой момент пишется что-то вроде : "Подключение занято до получения результатов для другого hstmt" Получается, запрос на DSQL как-то блокирует доступ к базе. Но при этом можно спокойно обращаться к временным таблицам.