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

Как поставить курсор?

Добавлено: 26 июл 2006, 15:06
avenger
Здравствуйте.

Как поставить курсор после TIBSQL.ExecQuery на последнюю запись?
А потом перемещать его вверх?

С уважением, Иван.

Добавлено: 26 июл 2006, 15:26
CyberMax
Никак. Этот компонент не буферизирует записи.

Добавлено: 26 июл 2006, 15:48
avenger
CyberMax писал(а):Никак. Этот компонент не буферизирует записи.
Тогда можно как нибудь вывести 10 последних записей, отсортированных в обратном порядке?

Т.е.

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

SELECT FIRST 10
  U.USERID, U.FIO, U.ISVIP, M.*,
  RU.USERID AS REPLY_USERID, RU.FIO AS REPLY_FIO, RM.DATETIME AS REPLY_DATETIME, RM."MESSAGE" AS REPLY_MESSAGE
FROM MESSAGES M
  JOIN USERS U ON U.USERID = M.USERFK AND      M.MESSAGEID <= 5000 AND M.CHANNELFK = 14
  LEFT OUTER JOIN MESSAGES RM ON M.REPLYMID = RM.MESSAGEID
  LEFT OUTER JOIN USERS RU ON RU.USERID = RM.USERFK
ORDER BY M.DATETIME DESC
Если выполнить этот запрос, то сортировка будет не та, а записи те.

Добавлено: 26 июл 2006, 15:59
Merlin
Варианты.

1. Пересортировать на клиенте. Выборка маленькая, нефиг делать. Кстати, ClientDataSet это чудненько умеет делать, если самому влом.

2. Впендюрить оный запрос в СП и тянуть из неё с нужным ордер бу.

3. Аналогично со вьюхой (наверное, я с ними не работаю)

4. Аналогично с select from select в FB2.

Добавлено: 26 июл 2006, 16:04
CyberMax
А зачем тебе так извращаться-то? Загрузил бы записи в TIBDataSet да крутил бы их так, как тебе хочется...
В любом случае, Merlin уже огласил возможные варианты решения.

Добавлено: 26 июл 2006, 16:06
avenger
Merlin писал(а):Варианты.
А так изврат?

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

SELECT
    U.USERID,
    U.FIO,
    U.ISVIP,
    M.*,
    RU.USERID AS REPLY_USERID,
    RU.FIO AS REPLY_FIO,
    RM.DATETIME AS REPLY_DATETIME,
    RM."MESSAGE" AS REPLY_MESSAGE
FROM
    MESSAGES M
    JOIN USERS U ON U.USERID = M.USERFK
        AND M.CHANNELFK = 14
        AND M.MESSAGEID <= 5000
        AND  /* Вот ЭТО */
        M.MESSAGEID >= (
            SELECT FIRST 1 SKIP 10
                M.MESSAGEID
            FROM
                MESSAGES M
            WHERE
                M.MESSAGEID <= 5000 AND M.CHANNELFK = 14
            ORDER BY M.DATETIME DESC
            )
    /* end Вот ЭТО */
    LEFT OUTER JOIN MESSAGES RM ON M.REPLYMID = RM.MESSAGEID
    LEFT OUTER JOIN USERS RU ON RU.USERID = RM.USERFK
ORDER BY
    M.DATETIME
[Модератор: немного отформатировал запрос, чтобы легче читался]

Добавлено: 26 июл 2006, 16:09
avenger
CyberMax писал(а):Загрузил бы записи в TIBDataSet да крутил бы их так, как тебе хочется...
Да компонент этот уж очень "громоздкий"... Select выполняется 1-н раз, вот и хочется как проще. Хочется IBSQL обойтись...