Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2009, 14:09   #11
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

Mishechka, для Firebird можно написать такую вот хранимую процедуру:
Цитата:
CREATE OR ALTER PROCEDURE UP_ORDER (ID Integer,
ORD Integer)
AS
declare variable O Integer;
declare variable I Integer;
begin
select first 1 ID_,ORDER_ from MYTABLE where (ORDER_<:ORD) into I,O;
if (I is not NULL) then
begin
UPDATE MYTABLE set ORDER_=:ORD where ID_=:I;
UPDATE MYTABLE set ORDER_=:O where ID_=:ID;
end
end
дергать ее по нажатию кнопки вверх, делать коммит транзакции и обновлять запрос, отображаемый в гриде. На кнопку вниз - аналогично. Если у Вас БД без хранимых процедур, то логику с этими тремя запросами несложно реализовать и на стороне клиента.
Антон Ю.Б. вне форума Ответить с цитированием
Старый 23.03.2009, 15:37   #12
Mishechka
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 18
По умолчанию

У меня локальная БД Парадокс 7

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Своих мыслей нет?
Взаимно. Я хоть только начал осваивать Delphi и не скрываю того, что новичок в этом деле. А вот Вашего решения моего вопроса я так и не узрел. Спасибо.

У меня Paradox, BDE.
Мне нужно создать условие:
если курсор находится на первой записи, тогда...
если курсор находится на последней записи тогда...

В таблице есть сортировочное поле, на форме две кнопки "Вверх" и "Вниз", с их помощью я изменяю значения в этом поле и тем самым перемещаю записи. При достижении курсором первой записи, кнопка "Вверх" становится недоступной (UpBtn.Enabled := RecNo <> 1, а вот с последней записью проблема:

DownBtn.Enabled := not Eof; - неработает.
DownBtn.Enabled := RecNo <> RecordCount; - не работает.
DownBtn.Enabled := RecNo < RecordCount; - не работает.

Как быть?

Последний раз редактировалось Stilet; 23.03.2009 в 15:42.
Mishechka вне форума Ответить с цитированием
Старый 23.03.2009, 15:48   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А вот Вашего решения моего вопроса я так и не узрел
В своем посте Михалыч тебе четко ответил что сам DBGrid не умеет модифицировать набор никоим образом и даже визуально. Он показывает записи строго в том порядке в каком они пришли от запроса.
Если нужно их тягать тебе либо нужно менять местами тасканые записи либо применять индексы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2009, 16:19   #14
Mishechka
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если нужно их тягать тебе либо нужно менять местами тасканые записи либо применять индексы.
Ну я же всё так и делаю:
поле у меня - индексированное, каждой записи присвоено значение 1,2...10, я меняю местами эти значения и записи перемещаются, но не в таблице, а только в DBGrid-е, что мне и нужно. Например, я 5 меняю на 6, потом 6 меняю на 5 и запись смещается. В таблице расположение записей не меняется, это мне не нужно.
Mishechka вне форума Ответить с цитированием
Старый 23.03.2009, 16:34   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
В таблице расположение записей не меняется, это мне не нужно
А зачем тебе менять положение записи физически??!! Ты что мороку хочеш на пятую точку нажить? Именно для таких задач и придумали индексирование и ключи.
Не ну в прочем если хочеш проблем можеш считывать всю запись, удалять ее а потом вставлять в нужно место но это плохой стиль, уж поверь мне - я уже такое прохавал на реальном производстве.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2009, 16:57   #16
Mishechka
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем тебе менять положение записи физически??!!
Ты не понял, я не хочу менять положение записи физически, мне достаточно того, что она сдвигается в гриде и работать стало удобно. У меня всё работает и всё меня устраивает. Проблема в том, что когда курсор перемещается на первую запись, то кнопка "Вверх" - тухнет, а когда перемещается на последнюю запись, то кнопка "Вниз" - не тухнет. Вот и всё. Я не могу создать условие: если текущая запись последняя, тогда (DownBtn.Enabled := False. Как узнать, что запись последняя?
Mishechka вне форума Ответить с цитированием
Старый 24.03.2009, 10:41   #17
TOJluK
Пользователь
 
Аватар для TOJluK
 
Регистрация: 13.08.2008
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Mishechka Посмотреть сообщение
Как узнать, что запись последняя?
Код:
If Table1.Eof = True then
TOJluK вне форума Ответить с цитированием
Старый 24.03.2009, 11:30   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

If Table1.Bof then //Запись первая
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2009, 13:36   #19
Mishechka
Пользователь
 
Регистрация: 10.03.2009
Сообщений: 18
По умолчанию

If Table1.Eof = True then
If Table1.Bof then //Запись первая

Ребята, неужели вы думаете, что я всё это не проверил?
Дело в том, что Bof срабатывает на первой записи, тут проблем нет.
Проблема в том, что Eof срабатывает после перехода за последнюю запись, а не на ней, т.е. когда курсор стоит уже за пределами диапазона записей.
Mishechka вне форума Ответить с цитированием
Старый 24.03.2009, 13:55   #20
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Table1.Last;
У вас тоже хэлп не подключен?
Цитата:
Сообщение от Mishechka Посмотреть сообщение
Проблема в том, что Eof срабатывает после перехода за последнюю запись, а не на ней, т.е. когда курсор стоит уже за пределами диапазона записей.
Что за бред?
Сделайте
Код:
Table1.Last;
Table1.Next;
На какой записи будет стоять курсор? На последней. А не "за пределами диапазона записей"...

Последний раз редактировалось mihali4; 24.03.2009 в 13:58.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag $ drop в DBGrid AlexandrSid Общие вопросы Delphi 13 21.06.2010 10:55
Drag & Drop + HBitmap BOBAH13 Win Api 6 19.07.2009 00:17
Drag&Drop-continue. Icons MAcK Общие вопросы .NET 2 16.09.2008 12:59
Drag&Drop в ListBox'ах MAKEDON Общие вопросы Delphi 3 21.08.2008 13:12
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04