Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.008 c
2-1222154873
kate158
2008-09-23 11:27
2008.11.02
добавление массива чисел в бд


2-1222116408
ShyricK
2008-09-23 00:46
2008.11.02
Вопрос по функционированию ЭВМ (дешифратор)


15-1220865932
axis_of_evil
2008-09-08 13:25
2008.11.02
Windows.Права


15-1220676588
lionman
2008-09-06 08:49
2008.11.02
Подскажите проги на курсовую


2-1222402880
123-ий
2008-09-26 08:21
2008.11.02
Соединение с Инетом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский