bugs cw60

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет народ,

Тем кто пишет под ms SQL 2000 (7) заметку еще один баг перекочевал с 55 про который я писал. при наличии составного ключа с полем NULL, к примеру база:

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

  rec  fld1 fld2     ключ fld1 + fld2 (уникальный)
  ----------------
  1    1    <NULL>
  2    1    1
  3    1    2
  4    1    3
  5    2    <NULL>
  6    2    1
  7    2    2
  8    3    <NULL>
  9    3    1
  для get:
  SetNull(tbl:record)
  tbl:fld1 = 2
  Get(tbl, tbl:FldKey)  ! найдет правильную запись - 5
  для set:
  SetNull(tbl:record)
  tbl:fld1 = 2
  Set(tbl:FldKey, tbl:FldKey)
  Next(tbl)             ! встанет на запись запись - 6 ???? :-((
а кто-нибудь пробовал под другими скулами?

--
Всего наилучшего, porutchik mailto:porutchik@mail.primorye.ru
http://personal.primorye.ru/porutchik/
-------------------------------------------------------------------
Советские боевые слоны - самые боевые слоны в мире!

(Добавление)

включи драйверную трассировку и глянь какой SELECT при этом формируется

Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com

проблема именно в том что клара генерит неверный код select при set, а хуже всего то что на set очень много что построено в кларе и замена его будет проблематична. а отказ от <null> полей в скуле тянет за собой другие проблемы. sv не почесалось в 6 версии о чем и хотел напомнить. а трассу я уже присылал.

SETNULL(dbo.Lev3 2) Time Taken: 0.00 secs
SETkeykey(dbo.Lev3,Lev3Key[4] 2) Time Taken: 0.00 secs
...
Preparing Statement c02888 : SELECT IdLev3,IdLev1,IdLev2,NameL3 FROM dbo.Lev3 WHERE (IdLev1 >= ? AND (IdLev1 > ? OR (IdLev2 >= ? )))
ORDER BY IdLev1,IdLev2 Time Taken:0.00 secs
...
NEXT(dbo.Lev3 2) Time Taken: 0.00 secs

для get:
SETNULL(dbo.Lev3 2) Time Taken: 0.00 secs
...
Preparing Statement c02888 : SELECT IdLev3,IdLev1,IdLev2,NameL3 FROM dbo.Lev3 WHERE IdLev1 = ? AND IdLev2 IS NULL Time Taken:0.00
secs
...
GETfilekey(dbo.Lev3,Lev3Key[4] 2) Time Taken: 0.02 secs

--
Всего наилучшего, porutchik

Добрый день, porutchik.
Я тоже пишу на кларе под MSSQL 2000, но использую шаблоны и библиотеку Андрея Мялина MAVDirect, там такой проблемы не возникает.

--
С уважением,
Александр Юрьев mailto:sash@softmaster.ru
ICQ 59248879

Привет, всем.
У нас в конторе пишут на с55 (на с6 не переходим в ожидании патчей :D
для MS SQL2000 и просто файл-серверные.
Исторически сложилось, что используется несколько вариантов шаблонов
Legacy,Legacy+ШВС,Legacy+библиотека А.Мялина и ABC,ABC+библиотека А.Мялина.

Так к чему такое подробное вступление: пробовали...

В стандартных шаблонах доступ к sql-таблицам, мягко говоря, подтормаживает.
Для необходимого ручного доведения под требования задачки неудобен.
К указанному глюку стандартных sql-драйверов с NULL можно добавить, что есть проблемы с датами.

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

С уважением, Толмачёв И.Л.
email: itolmachev@rosinter.ru <mailto:itolmachev@rosinter.ru>
Написал: ClaList(2)
Гость

Сообщение Гость »

SETNULL(dbo.Lev3 2) Time Taken: 0.00 secs
SETkeykey(dbo.Lev3,Lev3Key[4] 2) Time Taken: 0.00 secs
...
SELECT IdLev3,IdLev1,IdLev2,NameL3 FROM dbo.Lev3 WHERE (IdLev1 >= ? AND (IdLev1 > ? OR (IdLev2 >= ?))) ORDER BY IdLev1,IdLev2
...
NEXT(dbo.Lev3 2) Time Taken: 0.00 secs
может кто подскажет об этом велосипедистам, если бы set генерил код
SELECT IdLev3,IdLev1,IdLev2,NameL3 FROM dbo.Lev3 WHERE (IdLev1 >= ? AND (IdLev1 >= ? OR (IdLev2 >= ?))) ORDER BY IdLev1,IdLev2
было бы неплохо

--
Всего наилучшего, porutchik
проблема именно в том что клара генерит неверный код select при set, ...
Выход в данном случае только один - самому cформировать правильный SELECT через PROP:SQL, и можно это сделать довольно универсально, допустим написать процедуру myFetch(File,Fille:Key) (кстати она может быть одна на все файловый структуры), в ней гибко через механизм PROP'ов свормировать необходимый SELECT, почему говорю, что необходимо через механизм PROP'ов -чтобы была уверенность что при изменении структуры файла в словаре не пришлось бы переписывать заново данную процедуру.

Andrew Myalin
Написал: ClaList(2)
Ответить