Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL c Where - неправильный (?) номер текущей записи... [D7, Paradox]


Apophis ©   (2004-11-06 00:35:00) 

Мастера!
Подскажите, что я делаю неправильно?

Есть набор данных Query1, DBGrid1. В Лабеле я вывожу номер текущей записи, примерно так:
Label1.Caption:= 'Record'+IntToStr(Query1.RecNo)+' / '+
                IntToStr(Query1.RecordCount).
Так вот, если SQL строка 'select * from table' - все показывается в гриде правильно. Но если в процессе работы я меняю SQL на 'select * from table WHERE pole=1', то количество записей в наборе указывается приавильно, НО первая запись почему-то обзывается ВТОРОЙ (!), а последняя - кол-во записей в наборе ПЛЮС 1!!! То есть, RecNo=1 просто не существует!
Почему так и как сделать, чтобы все было по-человечески?

Агромное спасибо!


Johnmen   (2004-11-08 02:10:00) [1]

>Anatoly Podgoretsky ©  (07.11.04 08:36) [12]

А я не понял...
Ведь у автора бардак именно в "логических" номерах НД.
И он говорит о нумерации именно НД !


Apophis   (2004-11-07 15:29:00) [2]

ОК, понятно. Спасибо, Anatoly Podgoretsky


Anatoly Podgoretsky   (2004-11-07 08:36:00) [3]

Apophis ©   (06.11.04 20:39) [11]
Парадокс не поддерживает физические номера записей, только логические.
Номера записей в запросе зависят от движка.


Apophis   (2004-11-06 20:39:00) [4]

Итак, корректирую первоначальный вопрос.
Как сделать, чтобы RecNo в наборе с условием выводил номер записи  в соответствии именно с ЭТИМ набором, а не номер записи в физической таблице?


Apophis   (2004-11-06 03:28:00) [5]

1.Локально
2.Да

И вот чего я заметил. RecNo в наборе С УСЛОВИЕМ возвращает не номер записи в наборе, а ее номер в физической таблице! Это почему?
Таблица имеет первичный составной ключ: Autoincrement+Field1+Field2.


Johnmen   (2004-11-06 02:23:00) [6]

Если б я знал...:)

Локально ли юзается парадокс?
Используется ли TDatabase?
Попробуй сделать начисто тестовый пример...


Apophis   (2004-11-06 02:15:00) [7]

Да ты скажи, чего еще нужно договорить?!?!?!:)))


Johnmen   (2004-11-06 02:03:00) [8]

Тогда ещё могу предположить, что глючит БДЕ (просто невероятно), или не всё договариваешь...:)


Apophis   (2004-11-06 01:56:00) [9]

Пипец^2!

Все целое.


Johnmen   (2004-11-06 01:49:00) [10]

Пипец...
:)

Абстрактные мысли:
1. Порушен индексный файл (если он есть)
2. Порушена таблица.


Apophis   (2004-11-06 01:18:00) [11]

Попробовал, - НИФИГА!
И вообще, на последней записи из набора в 2 записи может показівать: Record 6 / 2.

Я ничего не понимаю! Но такое начинает происходить, когда используется УСЛОВИЕ при отборе. Когда тупо ВСЕ записи, все нормально.

So?....


Johnmen   (2004-11-06 01:01:00) [12]

Действительно, круто...
Попробуй после Open сделать Last-First.


Apophis   (2004-11-06 00:53:00) [13]

Johnmen
ОК. Пишу так в процессе:
....................
With Query1 do begin
Close;
SQL.Clear;
SQL.Add('select * from table where pole=1');
Open;
end;

Label1.Caption:= 'Record'+IntToStr(Query1.RecNo)+' / '+
               IntToStr(Query1.RecordCount)
...................

Набор открывается (пусть 4 записи),курсор в гриде на первой строке (как и положено), но Лабеле: Record 2 / 4. Становлюсь на последнюю запись: Record 5 / 4.
Круто?

Так в чем проблема? Что еще уточнить?


Johnmen   (2004-11-06 00:48:00) [14]

>Но если в процессе работы я меняю SQL на

Видимо что-то здесь некорректно...:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо