Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 ... 16 ОтправитьПечать
Очень популярная тема (более 25 ответов) Провайдер OLE DB для ТП (число прочтений - 69144 )
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #165 - 26. Октября 2007 :: 18:12
Печать  
Скорее всего никак. А что это? Улыбка
  
Наверх
ICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #166 - 26. Октября 2007 :: 18:20
Печать  
spock писал(а) 26. Октября 2007 :: 18:12:
Скорее всего никак. А что это? Улыбка

Забыл, типа, да? Улыбка Это такая веселая хрень типа USE, SKIP, SEEK, GOTO Улыбка Вот начнет этот провайдер тупить на SELECT TOP и опять придется расчехлять старый заржавевший XBase Улыбка
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #167 - 26. Октября 2007 :: 18:25
Печать  
Я уже почти два года забыл, что такое dbf.
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #168 - 27. Октября 2007 :: 16:10
Печать  
Uzhast

Код
Выбрать все
SELECT IDDocDef + IDDoc AS [Документ $Документ]
, DOCNO as NUMBER
FROM 1sjourn
WHERE IDDoc IN (%СписокИД%)
ORDER BY DOCNO

// тег индекса тот же - ACDateTim
 



Вот на таком запросе она (или он?) путает педали (т.е. колонки).

И заодно просвяти, плз, мой утомленный разум, в таком виде ORDER by DOCNO на что должен влиять?
Т.е. с твоей авторской точки зрения, что я такое написал? Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #169 - 27. Октября 2007 :: 16:21
Печать  
kms писал(а) 27. Октября 2007 :: 16:10:
Код
Выбрать все
SELECT IDDocDef + IDDoc AS [Документ $Документ]
, DOCNO as NUMBER
FROM 1sjourn
WHERE IDDoc IN (%СписокИД%)
ORDER BY DOCNO

// тег индекса тот же - ACDateTim
 



Вот на таком запросе она (или он?) путает педали (т.е. колонки).

И заодно просвяти, плз, мой утомленный разум, в таком виде ORDER by DOCNO на что должен влиять?
Т.е. с твоей авторской точки зрения, что я такое написал? Подмигивание

Это называется "неадекватное, противоречащее документации, использование провайдера, которое приводит к неопределенному поведению"  Очень довольный Для корректной работы запрос должен возвращать записи в порядке, совпадающем с порядком выбранного индекса. А так он выбирает ИДшники в порядке, определенном индексом. А запрос возвращает набор записей, упорядоченный по номеру. В результате, в ТП записи могут отображаться с упорядочиванием "неожиданным" для юзера.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #170 - 27. Октября 2007 :: 16:24
Печать  
Т.е. ORDER BY определяет только порядок записей в ОДНОЙ порции данных. В той порции, которая отображается в данный момент. А тег индекса определяет "глобальное упорядочивание", которое используется для вообще всех записей таблицы, по которой мы передвигаемся.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #171 - 27. Октября 2007 :: 16:26
Печать  
Ну типа да. красивая сказка - выбрать окно строк по одному индексу, да засортировать его (окно) по другому.
Абсолютно не адекватно, зато весело.

Но клоню я к чему: п-ц, сколько вопросов тебе еще зададут на эту тему. Очень довольный
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #172 - 27. Октября 2007 :: 16:28
Печать  
kms писал(а) 27. Октября 2007 :: 16:26:
Ну типа да. красивая сказка - выбрать окно строк по одному индексу, да засортировать его (окно) по другому.
Абсолютно не адекватно, зато весело.

Улыбка
kms писал(а) 27. Октября 2007 :: 16:26:
Но клоню я к чему: п-ц, сколько вопросов тебе еще зададут на эту тему. Очень довольный

Ну да, а что делать? Улыбка Доку точно надо писать подробную. Или как-то подумать о более жестком контроле над текстом запроса со стороны провайдера...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #173 - 27. Октября 2007 :: 16:32
Печать  
Как вариант:

Надо вообще не допускать возможности указания ORDER BY.
Достаточно задавать имя индекса упорядочивания, а поля для предложения ORDER BY определять автоматически.

Пойдет такая идея?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #174 - 27. Октября 2007 :: 16:39
Печать  
kms писал(а) 27. Октября 2007 :: 16:32:
Как вариант:

Надо вообще не допускать возможности указания ORDER BY.
Достаточно задавать имя индекса упорядочивания, а поля для предложения ORDER BY определять автоматически.

Пойдет такая идея?

Идея нормальная. Только, чтобы она заработала, придется делать нормальный парсер SQL-запросов. Ведь запросы можно делать очень навороченные, с подзапросами. А в них ORDER BY может встречаться в порядке вещей и там его запрещать точно не стоит (например, SELECT MAX (..) FROM ... ORDER BY...). Плюс еще нужно корректно определять, куда вставлять автоматический ORDER BY... Или есть какой-нибудь простой способ?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #175 - 27. Октября 2007 :: 17:13
Печать  
Это да. Что-то придумывать придется.
Примерно как в ODBC провайдере - там предложение ORDER BY формируется по значению ключа порядка.

В остальном, пожалуй, соглашусь, что по отношению к удаленным (замещенным по физическим адресам) строкам твоя реализация выглядит вполне безопасно.

При условии, что в GetRowValue ты вернешь именно то ключевое поле, которое было в этой физической записи изначально (ну, вроде по тексту так пока и планируется).

Хотя я бы все равно добавил бы в процедуру сравнения строк еще и сравнение ключевых полей.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #176 - 27. Октября 2007 :: 17:30
Печать  
kms писал(а) 27. Октября 2007 :: 17:13:
Это да. Что-то придумывать придется.
Примерно как в ODBC провайдере - там предложение ORDER BY формируется по значению ключа порядка.

Тут ведь еще в чем проблема... Фокс - это ж такая упертая хрень... Он не все допускает в выражении ORDER BY. Например, нельзя написать ORDER BY UPPER(Descr). Нужно либо ORDER BY Descr, либо в сам запрос добавить поле UPPER (Descr) AS IndexDescr и написать ORDER BY IndexDescr. Т.е., например, просто запихнуть в конце запроса ORDER BY не получится (хотя получить индексное выражение очень легко) - тогда уж придется еще добавлять дополнительное поле запроса. Т.е. без парсера, похоже, не обойтись. Да и программисту-пользователю лишнее поле в запросе может не понравиться. Так что, необходимость программисту писать руками упорядочивание - своего рода необходимость, вызванная дефектами Фокса. Печаль
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Провайдер OLE DB для ТП
Ответ #177 - 27. Октября 2007 :: 20:22
Печать  
Uzhast

Слушай, а если у тебя индекс выборки ID все равно совпадает с индексом финальной сортировки, зачем тебе вообще получать сортированный результат во втором запросе (ну, где ID IN %список%).

Ну, привязался ты к физ. номеру записи, получил сортированный список ключей, можно выполнить несортированный второй запрос и самому разбросать данные в порядке, предложенном первоначальной процедурой.

Для ТП у тебя окно никогда большим не будет, это несложно сделать.


P.S.
Пытаюсь избавить тебя от объяснений с разъяренными пользователями Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #178 - 28. Октября 2007 :: 12:21
Печать  
У меня есть несколько непонятных моментов:
Текст запроса:
Код
Выбрать все
SELECT
IDDoc AS [Документ $Документ.ДоговораОСАГО]
,$Док.Застрахованный as [Страхователь $Справочник.Страхователи]
,$Док.Лицо as [Агент $Справочник.Сотрудники]
,$Док.НомерПолиса as НомерПолиса
FROM $Документ.ДоговораОСАГО as Док
WHERE IDDoc IN (%СписокИД%)
order by iddoc 


Поле-ключ= "IDDoc", Тэг индекса = ID (единственный индекс для таблицы документа).
В ТП выводятся нормально, за исключением имён колонок ТП. У меня выводится в лед. порядке: агент, документ, номерПолиса, страхователь. Хотя содержимое этих колонок то, которое я указывал в запросе: документ, страхователь, агент, номерПолиса.
Обязательно ли инструкция ORDER BY ...?
Почему спрашиваю: не ставлю ORDER BY, таймаут обновления = 0. Результат:
Док 9
Док 1
Док 2
...
ставлю таймаут обновления = 1. Результат до первого автообновления такой же как показано выше. После первого автообновления:
Док 9
Док 9
Док 2
...
Да и вообще список ведёт себя странно: при скролинге вверх/вниз вне первой странице - всё пучком. Как только поднимаемся опять вверх до самого начала, ждём автообновление и видим как меняются строки, причём каждый раз по-разному.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Провайдер OLE DB для ТП
Ответ #179 - 28. Октября 2007 :: 13:07
Печать  
kms писал(а) 27. Октября 2007 :: 20:22:
Uzhast

Слушай, а если у тебя индекс выборки ID все равно совпадает с индексом финальной сортировки, зачем тебе вообще получать сортированный результат во втором запросе (ну, где ID IN %список%).

Ну, привязался ты к физ. номеру записи, получил сортированный список ключей, можно выполнить несортированный второй запрос и самому разбросать данные в порядке, предложенном первоначальной процедурой.

Да, так и надо сделать.

kms писал(а) 27. Октября 2007 :: 20:22:

P.S.
Пытаюсь избавить тебя от объяснений с разъяренными пользователями Улыбка

Спасибо Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 10 11 [12] 13 14 ... 16
ОтправитьПечать