![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перебор записей в датасете. [XP]
AndreyBg © (2008-09-24 11:03:00)Что-то туплю я...
Вот это работает (перебирает в прямом порядке)
DataSet.First;
while not DataSet.bofdo
begin
// Что-то делаем ..
DSetTestType. Prior;
end;
а вот это соответственно нет O_o
DataSet.First;
while not DataSet.eof do
begin
// Что-то делаем ..
DSetTestType.Next;
end;
Сразу позиционируется на последнюю запись.
Использую FIBPlus.
В приложении множество датасетов и везде все работает нормально, а в одном вот такой косяк. Уже час медитирую на это, не пойму в чем дело. Все свойства датасета идентичны свойствам остальных датасетов.
Подскажите, pls, в чем может быть дело?
Dennis I. Komarov (2008-09-25 09:21:00) [1]
ComboBox.Items.Clear;
DataSet.First;
while not DataSet.Eof do
begin
ComboBox.Items.Add(DataSet.FieldByName('Name').AsString);
DataSet.Next;
end;
Чего тут велосипедного?
Anatoly Podgoretsky (2008-09-24 14:46:00) [2]Интересно доживет ли это до 100 сообщений?
MsGuns (2008-09-24 14:44:00) [3]>AndreyBg (24.09.08 13:35) [35]
>Использую не задний проход
Именно его и используешь :)
Сергей М. (2008-09-24 14:01:00) [4]
> Palladin © (24.09.08 13:55) [40]
Значит все же шмомбик)
Сергей М. (2008-09-24 13:59:00) [5]
> Сразу после DSetTestType.First; я оказываюсь на последней
> записи
Да что за глупости-то ?!
Убери всесвои циклы и комбики-шмомбики, оставь только DSetTestType.First.
После вызова этого метода в гриде видишь выделение где- в самом низу или в самом верху ?
Palladin (2008-09-24 13:55:00) [6]
> Я в глаза не видел твой "комбик", но если он есть наследник
> TCustomComboBox
у него DevExpress'овский, скорее всего... он не наследник :)
Sergey13 (2008-09-24 13:52:00) [7]> [36] AndreyBg (24.09.08 13:42)
Монитор переверни.
Может стоит воспользоваться таки DBLookupComboBox-ом?
Сергей М. (2008-09-24 13:51:00) [8]
> - в табличке отображается 8 строк
Тогда как объяснить [14] ?
Там ты почему-то умудрился загнуть всего один палец ..
> выделена последняя
Здесь ничего удивительного - ты прошелся прямым курсом по НД, активной при этом стала последняя запись, она и выглядит выделенной в гриде
> - в комбике одна запись последняя
А это ты уж со своим "комбиком" разбирайся - дейтасет тут ни причем, он исправно держит 8 записей.
Кстати, причем здесь вообще св-во properties ?
Я в глаза не видел твой "комбик", но если он есть наследник TCustomComboBox, то манипуляции с содержимым контролируемого им списка строк осуществляется через св-во Items
{RASkov} (2008-09-24 13:43:00) [9]> AndreyBg
Хватит голову морочить
AndreyBg (2008-09-24 13:42:00) [10]А вообще все даже интереснее.
Сразу послеDSetTestType.First;я оказываюсь на последней записи.
AndreyBg (2008-09-24 13:35:00) [11]Попробую последний раз пояснить проблему.
Использую не задний проход, комбик предварительно очищен, дополнительно на форму кинута таблица для наглядного представления данных, присоединенная к тому же датасету.
Рез-т:
- в комбике одна запись последняя.
- в табличке отображается 8 строк, выделена последняя.
DSetTestType.CloseOpen(true);
FrmTemplateAdd.cbTestType.Properties.Items.Clear;
DSetTestType.First;
while not DSetTestType.eof do
begin
BoardTemplateTest := TComboObject.Create(DSetTestType.FBN('id_otkttype').AsInteger, DSetTestType.FBN('name').AsString );
FrmTemplateAdd.cbTestType.Properties.Items.AddObject(BoardTemplateTest.Get_Name, BoardTemplateTest);
DSetTestType.Next;
end;
Сергей М. (2008-09-24 13:21:00) [12]
> Поросенок Винни-Пух © (24.09.08 13:19) [32]
А и точно) .. "чуваки" - сплошные Андреи, аж глаза разбегаются)
Поросенок Винни-Пух (2008-09-24 13:21:00) [13]исходный код как утверждает сказочник такой
> [25] AndreyBg (24.09.08 12:53)
> DSetTestType.First;
> while not DSetTestType.bof do
> begin
> DSetTestType.Prior;
> end;
и дает 8 записей.
Поросенок Винни-Пух (2008-09-24 13:19:00) [14]Вот это другой коленкор !)
Это не он. Это другой чувак советует ему исправить код.
Сергей М. (2008-09-24 13:16:00) [15]
> DSetTestType.Last
Вот это другой коленкор !)
Но ведь тебе нужен прямое прохождение по НД, почему же ты встаешь на последнюю запись и движешься назад ?
И если ты делаешь это осознанно, называя это "прямым прозодом" (хотя как ни назови это "задний проход"), то почему тогда удивляешься, что НД позиционируеьтся сразу на последнюю запись ?
AndreyV (2008-09-24 13:12:00) [16]> [25] AndreyBg (24.09.08 12:53)
> DSetTestType.First;
> while not DSetTestType.bof do
> begin
> DSetTestType.Prior;
> end;
DSetTestType.Last
MsGuns (2008-09-24 13:09:00) [17]Попробуйте предварительно очистить FrmTemplateAdd.cbTestType и посмотрите что получится в результате Вашего "прохода" (так и напрашивается прилагательное "заднего")
Сергей М. (2008-09-24 13:02:00) [18]
> сам понимаю, что это бред
Зачем же тогда писать, если это заведомо бред ?
В [1] дан шаблон правильно прямого прохода по НД, вот его и пользуй.
И комбик твой, кем бы он ни был, тут никому не интересен - сначала нужно реализовать правильную логику навигации по НД, а уж потом заморачиваться ранными там комбиками-шмомбиками.
Если код [1] показывает всего одну итерацию цикла, то верь глазам своим - в твоем НД действительно всего одна запись.
Поросенок Винни-Пух (2008-09-24 13:01:00) [19]DSetTestType.First;
while not DSetTestType.bof do
begin
...
DSetTestType.Prior;
end;
8 записей говоришь? Сказочник комнатный.
AndreyBg (2008-09-24 12:56:00) [20]
> MsGuns © (24.09.08 12:52) [24]
> >AndreyBg (24.09.08 11:45) [10]Это же надо так писать
> ! Вам, господин хороший, надо в хирурги. Гланды через анал
> вырезать. Фашистам.
Ну так поясните чем же вам не нравиться мой код более конкретно.
Попусту стебать много ума не надо.