Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.02;
Скачать: CL | DM;

Вниз

Перебор записей в датасете.   Найти похожие ветки 

 
AndreyBg   (2008-09-24 11:03) [0]

Что-то туплю я...
Вот это  работает (перебирает в прямом порядке)
 DataSet.First;
 while not DataSet.bof do
 begin
    // Что-то делаем ..
   DSetTestType.Prior;
 end;

а вот это соответственно нет O_o

 DataSet.First;
 while not DataSet.eof do
 begin
    // Что-то делаем ..
   DSetTestType.Next;
 end;

Сразу позиционируется на последнюю запись.
Использую FIBPlus.
В приложении множество датасетов и везде все работает нормально, а в одном вот такой косяк. Уже час медитирую на это, не пойму в чем дело. Все свойства датасета идентичны свойствам остальных датасетов.
Подскажите, pls, в чем может быть дело?


 
Поросенок Винни-Пух ©   (2008-09-24 11:07) [1]

DataSet.First;
while not DataSet.eof do
begin
   // Что-то делаем ..
  DSetTestType.Next;
end;


 
AndreyBg   (2008-09-24 11:16) [2]

неа, это я ошибся когда тут уже правил название датасетов. В коде все правильно написанно.


 
Правильный$Вася   (2008-09-24 11:16) [3]


> Вот это  работает (перебирает в прямом порядке)  
> DataSet.First;  while not DataSet.bof do

не верю!


 
{RASkov} ©   (2008-09-24 11:17) [4]

> [0] AndreyBg   (24.09.08 11:03)
> Вот это  работает (перебирает в прямом порядке)
> DataSet.First;
> while not DataSet.bof do
> begin
>    // Что-то делаем ..
>   DSetTestType.Prior;
> end;

Эх и обманщик... :)
Курсор Датасета установить в самое начало затем в цикле даже другой датасет ни разу не успевает перейти на предыдущую запись так как условия цикла выполнены....
А во втором способе.... Ну конечно нет. Тут вообще "висяк" :) Кстати второй способ более правильный, чем первый, но второй датасет все портит...


 
{RASkov} ©   (2008-09-24 11:17) [5]

> [2] AndreyBg   (24.09.08 11:16)

Врешь)


 
Поросенок Винни-Пух ©   (2008-09-24 11:18) [6]

В коде все правильно написанно.

Тогда зачем вопрос про ошибку?


 
Сергей М. ©   (2008-09-24 11:29) [7]


> В коде все правильно написанно


> Сразу позиционируется на последнюю запись


И где в этом "правильном" коде позиционирование на последнюю запись ?
На первую вижу - First, а где на последнюю ?


 
clickmaker ©   (2008-09-24 11:30) [8]

все это похоже на какую-то разводку...


 
Правильный$Вася   (2008-09-24 11:43) [9]


>  // Что-то делаем ..

в этом черном ящике может быть что угодно, не только перепозиционирование


 
AndreyBg   (2008-09-24 11:45) [10]

Блин, ну разводка так разводка.... делать мне больше нечего.
Вот оригинальный текст:
DSetTestType.CloseOpen(true);
 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;

cbTestType - это комбик.
В таблице всего 8 записей. В комбик попадает только последняя. пробовал выводить эти записи в текстовый файл в этом же цикле. Ситуация аналогичная - выводится только последняя.


 
Поросенок Винни-Пух ©   (2008-09-24 11:48) [11]

выводится только последняя.

и с чего ты вдруг решил что трабл в перечислении датасета?


 
Поросенок Винни-Пух ©   (2008-09-24 11:50) [12]

DSetTestType.CloseOpen(true);
DSetTestType.First;
while not DSetTestType.eof do
begin
  ShowMessage("Считай записи, загибая пальцы");

  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 12:01) [13]


> TComboObject

что это?


 
AndreyBg   (2008-09-24 12:03) [14]

Насчитал ОДНУ!
FetchAll в настройка датасета равен true.


 
Поросенок Винни-Пух ©   (2008-09-24 12:03) [15]

Интереснее что вот это
cbTestType.Properties.Items


 
Поросенок Винни-Пух ©   (2008-09-24 12:04) [16]

Насчитал ОДНУ!
FetchAll в настройка датасета равен true.


Значит все верно.


 
Поросенок Винни-Пух ©   (2008-09-24 12:05) [17]

В таблице всего 8 записей.

А запрос вернул одну.


 
Сергей М. ©   (2008-09-24 12:06) [18]


> cbTestType - это комбик


TComboBox что ли ?
А что такое cbTestType.Properties ? У стандартного "комбика" нет такого св-ва ..


 
Johnmen ©   (2008-09-24 12:06) [19]


> FetchAll в настройка датасета равен true.

Это по-барабану...


 
Поросенок Винни-Пух ©   (2008-09-24 12:07) [20]

пропертиес уже по барабану.
у него все верно. в нд одна запись, которая и попадает в комбо.


 
Сергей М. ©   (2008-09-24 12:09) [21]

В общем как и всегда - начали за здравие, а продолжаем за упокой)


 
Сергей М. ©   (2008-09-24 12:11) [22]


> Насчитал ОДНУ!


Страшно даже подумать о том, сколько а Автора пальцев оказалось)


 
Anatoly Podgoretsky ©   (2008-09-24 12:45) [23]


> неа, это я ошибся

Тогда вопрос, а зачем нам обсуждать не тот код?


 
MsGuns ©   (2008-09-24 12:52) [24]

>AndreyBg   (24.09.08 11:45) [10]

Это же надо так писать ! Вам, господин хороший, надо в хирурги. Гланды через анал вырезать. Фашистам.


 
AndreyBg   (2008-09-24 12:53) [25]

Все посмеялись, молодцы.
В наборе 8 записей!!!! А в комбик или, как я уже писал выше, в текстовый файл попадает только одна последняя запись.
комбик не стандартный - cbTestType: TcxComboBox;
Напомню (поясню, для невнимательных) свой первый пост.
 DSetTestType.First;
 while not DSetTestType.bof do
 begin
   BoardTemplateTest := TComboObject.Create(DSetTestType.FBN("id_otkttype").AsInteger, DSetTestType.FBN("name").AsString );
   FrmTemplateAdd.cbTestType.Properties.Items.AddObject(BoardTemplateTest.Get_Name,  BoardTemplateTest);
   DSetTestType.Prior;
 end;

Выдает все 8 записей в комбик!
Я сам понимаю, что это бред, но оно работает!
И как уже говорил, в программе подобных циклов полным полно(в том числе, которые заполняют аналогичные комбики) и только с этим датасетом наблюдаю такой глюк.


 
AndreyBg   (2008-09-24 12:56) [26]


> MsGuns ©   (24.09.08 12:52) [24]
> >AndreyBg   (24.09.08 11:45) [10]Это же надо так писать
> ! Вам, господин хороший, надо в хирурги. Гланды через анал
> вырезать. Фашистам.

Ну так поясните чем же вам не нравиться мой код более конкретно.
Попусту стебать много ума не надо.


 
Поросенок Винни-Пух ©   (2008-09-24 13:01) [27]

DSetTestType.First;
while not DSetTestType.bof do
begin
 ...
  DSetTestType.Prior;
end;

8 записей говоришь? Сказочник комнатный.


 
Сергей М. ©   (2008-09-24 13:02) [28]


> сам понимаю, что это бред


Зачем же тогда писать, если это заведомо бред ?

В [1] дан шаблон правильно прямого прохода по НД, вот его и пользуй.

И комбик твой, кем бы он ни был, тут никому не интересен - сначала нужно реализовать правильную логику навигации по НД, а уж потом заморачиваться ранными там комбиками-шмомбиками.

Если код [1] показывает всего одну итерацию цикла, то верь глазам своим - в твоем НД действительно всего одна запись.


 
MsGuns ©   (2008-09-24 13:09) [29]

Попробуйте предварительно очистить FrmTemplateAdd.cbTestType и посмотрите что получится в результате Вашего "прохода" (так и напрашивается прилагательное "заднего")


 
AndreyV ©   (2008-09-24 13:12) [30]

> [25] AndreyBg   (24.09.08 12:53)
> DSetTestType.First;
> while not DSetTestType.bof do
> begin
>   DSetTestType.Prior;
> end;


DSetTestType.Last


 
Сергей М. ©   (2008-09-24 13:16) [31]


> DSetTestType.Last


Вот это другой коленкор !)

Но ведь тебе нужен прямое прохождение по НД, почему же ты встаешь на последнюю запись и движешься назад ?

И если ты делаешь это осознанно, называя это "прямым прозодом" (хотя как ни назови это "задний проход"), то почему тогда удивляешься, что НД позиционируеьтся сразу на последнюю запись ?


 
Поросенок Винни-Пух ©   (2008-09-24 13:19) [32]

Вот это другой коленкор !)

Это не он. Это другой чувак советует ему исправить код.


 
Поросенок Винни-Пух ©   (2008-09-24 13:21) [33]

исходный код как утверждает сказочник такой

> [25] AndreyBg   (24.09.08 12:53)
> DSetTestType.First;
> while not DSetTestType.bof do
> begin
>   DSetTestType.Prior;
> end;

и дает 8 записей.


 
Сергей М. ©   (2008-09-24 13:21) [34]


> Поросенок Винни-Пух ©   (24.09.08 13:19) [32]


А и точно) .. "чуваки" - сплошные Андреи, аж глаза разбегаются)


 
AndreyBg   (2008-09-24 13:35) [35]

Попробую последний раз пояснить проблему.
Использую не задний проход, комбик предварительно очищен, дополнительно на форму кинута таблица  для наглядного представления данных, присоединенная к тому же датасету.
Рез-т:
- в комбике одна запись последняя.
- в табличке отображается 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;


 
AndreyBg   (2008-09-24 13:42) [36]

А вообще все даже интереснее.
Сразу после DSetTestType.First; я оказываюсь на последней записи.


 
{RASkov} ©   (2008-09-24 13:43) [37]

> AndreyBg

Хватит голову морочить


 
Сергей М. ©   (2008-09-24 13:51) [38]


> - в табличке отображается 8 строк


Тогда как объяснить [14] ?
Там ты почему-то умудрился загнуть всего один палец ..


> выделена последняя


Здесь ничего удивительного - ты прошелся прямым курсом по НД, активной при этом стала последняя запись, она и выглядит выделенной в гриде


> - в комбике одна запись последняя


А это ты уж со своим "комбиком" разбирайся - дейтасет тут ни причем, он исправно держит 8 записей.

Кстати, причем здесь вообще св-во properties ?

Я в глаза не видел твой "комбик", но если он есть наследник TCustomComboBox, то манипуляции с содержимым контролируемого им списка строк осуществляется через св-во Items


 
Sergey13 ©   (2008-09-24 13:52) [39]

> [36] AndreyBg   (24.09.08 13:42)

Монитор переверни.
Может стоит воспользоваться таки DBLookupComboBox-ом?


 
Palladin ©   (2008-09-24 13:55) [40]


> Я в глаза не видел твой "комбик", но если он есть наследник
> TCustomComboBox

у него DevExpress"овский, скорее всего... он не наследник :)


 
Сергей М. ©   (2008-09-24 13:59) [41]


> Сразу после DSetTestType.First; я оказываюсь на последней
> записи


Да что за глупости-то ?!

Убери все свои циклы и комбики-шмомбики, оставь только DSetTestType.First.

После вызова этого метода в гриде видишь выделение где - в самом низу или в самом верху ?


 
Сергей М. ©   (2008-09-24 14:01) [42]


> Palladin ©   (24.09.08 13:55) [40]


Значит все же шмомбик)


 
MsGuns ©   (2008-09-24 14:44) [43]

>AndreyBg   (24.09.08 13:35) [35]
>Использую не задний проход

 Именно его и используешь :)


 
Anatoly Podgoretsky ©   (2008-09-24 14:46) [44]

Интересно доживет ли это до 100 сообщений?


 
Dennis I. Komarov ©   (2008-09-25 09:21) [45]

ComboBox.Items.Clear;
DataSet.First;
 while not DataSet.Eof do
   begin
     ComboBox.Items.Add(DataSet.FieldByName("Name").AsString);
     DataSet.Next;
   end;

Чего тут велосипедного?



Страницы: 1 2 вся ветка

Текущий архив: 2008.11.02;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.016 c
15-1220713385
deadteachers
2008-09-06 19:03
2008.11.02
Хочу принять участие!


15-1218713094
@!!ex
2008-08-14 15:24
2008.11.02
Хочу купить монитор


3-1208356440
b.lutz
2008-04-16 18:34
2008.11.02
Помогите с запросом


1-1202116582
Ega23
2008-02-04 12:16
2008.11.02
Динамическое создание объектов: правильно ли сделал?


15-1220896812
Point
2008-09-08 22:00
2008.11.02
Компоненты Indy можно ли использовать в консольных приложених?