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

Вниз

Проблема с IBTable.Locate   Найти похожие ветки 

 
supersan   (2003-07-21 17:33) [0]

Господа, здравствуйте. Возник вопрос (сабж). Если более конкретно, то есть след. строки кода:

DM.ibtLSTK.Locate("TIP",pk,[]);
tk:=DM.ibtLSTK.FieldByName("OMS").AsInteger;

Так вот, ента tk получает значение, к примеру, 26, хотя из таблицы должна получить, опять же к примеру, 24.
Если нужны еще какие уточнения для более точного ответа, то не стесняйтесь, пишите :-)
Собственно вопрос: как это дело исправить? Я могу, конечно, использовать IBQuery, но для этого придется перелопатить кучу (небольшую, но неприятную) кода. Можно ли обойтись меньшими затратами?


 
Sandman25   (2003-07-21 17:38) [1]

Чему равен DM.ibtLSTK.FieldByName("TIP").AsInteger после поиска?
pk, который искали или нет?


 
supersan   (2003-07-21 17:50) [2]

Поле TIP у ibtLSTK - это pk.
А DM.ibtLSTK.FieldByName("TIP").AsInteger и равен 26, хотя должен быть равен 24.
Для примера, структура таблицы:
TIP INTEGER PK
PROFIL VARCHAR(80)
OMS INTEGER

Часть таблицы:
TIP PROFIL OMS
.................
19 ??? 24
.................
40 ??? 26
.................

Делается попытка найти OMS, соответствующий значению TIP, равному 19 (т.е. должно выдать 24), а находится 26, т.е. значение, соответствующее TIP=40
Почему?


 
Sandman25   (2003-07-21 17:55) [3]

Теперь ясно, что не работает Locate.
Возможно, есть патч для IB компонент (я не в курсе).
Если нет, то придется реализовать Locate самому (First; while not Eof; Next). Это не сложно.


 
Sergey13   (2003-07-21 18:25) [4]

Говорили тут как то, что IB5.х левая какая то. Проще перейти на FB.


 
supersan   (2003-07-22 07:11) [5]

Ага, всем спасибо, а то я уж подумал, что это у меня глюки.
Ветка закончена...


 
ЮЮ   (2003-07-22 07:43) [6]

>Говорили тут как то, что IB5.х левая какая то. Проще перейти на FB
>а то я уж подумал, что это у меня глюки.

IMHO, Locate выполняется на клиенте и глюки сервера тут не причем
ЗЫ.
if Locate then
...
else
<запись не найдена, но DataSet все равно куда-нибудь да указывает >


 
Anatoly Podgoretsky   (2003-07-22 09:21) [7]

Намекаешь, что как всегда глюки в другом месте.


 
supersan   (2003-07-23 16:26) [8]

2 ЮЮ © (22.07.03 07:43)
Вот и хотелось бы выяснить, куда все-таки "DataSet все равно куда-нибудь да указывает". И ладно, пусть глюки на клиенте, но как от этого избавиться? Совет Sandman25 © (21.07.03 17:55), по крайней мере, дает конкретный способ, а Ваш, извините... Дело в том, что все равно известно, что Locate точно будет указывать на какую-то запись (предметная область такая), мне просто хотелось выяснить, почему же находится не та запись, какая нужно.
2 Anatoly Podgoretsky © (22.07.03 09:21)
Нет, я вполне допускаю глюки и у себя (проверено :-)), просто хотелось локализовать место глюка (у меня или не у меня).
Итак, если уважаемые мастера отказывают в совете Sandman25 © (21.07.03 17:55), то, может, есть другое решение?


 
Johnmen   (2003-07-23 18:15) [9]

>supersan © (21.07.03 17:33)
> DM.ibtLSTK.Locate("TIP",pk,[]);
> tk:=DM.ibtLSTK.FieldByName("OMS").AsInteger;

Напомни еще раз, что за поле TIP, какое значение pk на момент Locate"а.


 
ЮЮ   (2003-07-24 03:12) [10]

>Совет Sandman25 © (21.07.03 17:55), по крайней мере, дает конкретный способ, а Ваш, извините...

А наш, извините, предлагает не надеяться на то что все в Locate указано правильно и написать
if DM.ibtLSTK.Locate("TIP",pk,[]) then
tk:=DM.ibtLSTK.FieldByName("OMS").AsInteger
else
Application.MassageBox(
( pk) >Совет Sandman25 © (21.07.03 17:55), по крайней мере, дает конкретный способ, а Ваш, извините...

А наш, извините, предлагает не надеяться на то что все в Locate указано правильно и написать
if DM.ibtLSTK.Locate("TIP",pk,[]) then
tk:=DM.ibtLSTK.FieldByName("OMS").AsInteger
else
Application.MassageBox(
"Не найдена запись с "TIP=" + InToStr(pk),
"Поиск записи", 0
);

и лишь после этого утверждать, что Locate глючит


 
supersan   (2003-07-24 08:40) [11]

Господа, прошу прощения за ввод в заблуждение. Все оказалось нормально. В результате упорных поисков и попыток модифицирования кода по совету Sandman25 © (21.07.03 17:55) была найдена ошибка. Все оказалось до смешного просто: в другом месте я "случайно" фильтровал "этот нехороший датасет", в результате чего в нем оказывалась всего одна запись, которая благополучно локэйтилась и выдавала "неправильный" результат. Признаю, каюсь и т.п. :-(
А если б совет ЮЮ © (24.07.03 03:12) был бы слегка пораньше, хотя бы вместо ЮЮ © (22.07.03 07:43) (т.е. сразу был бы поразвернутее), то процесс поиска глюка (МОЕГО!) занял бы чуть поменьше времени...
Спасибо всем, кто принял живое участие в обсуждении. Надеюсь на дальнейшее сотрудничество. :-)
PS: Locate все-таки работает!!!


 
ЮЮ   (2003-07-24 08:53) [12]

>А если б совет (24.07.03 03:12) был бы пораньше (22.07.03 07:43)

Они абсолютно идентичные :-)


 
Sandman25   (2003-07-24 10:33) [13]

ЮЮ © (24.07.03 08:53)

Сравните Ваш код из ЮЮ © (24.07.03 03:12)
с кодом автора из самого первого поста. Они действительно идентичные :)
Ваш код только показал бы, что Locate не прошел, так автор и так это знал. Во всяком случае, он это узнал после supersan © (21.07.03 17:50) и Sandman25 © (21.07.03 17:55)




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

Форум: "Потрепаться";
Текущий архив: 2003.08.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
14-58480
Владий
2003-07-23 16:00
2003.08.18
Как внести рассчитанное значение?...


14-58398
race1
2003-08-04 11:06
2003.08.18
BitBlt


14-58447
Egloo
2003-08-02 08:35
2003.08.18
Сортировка WideString-списка...


14-58420
grusty
2003-08-03 11:37
2003.08.18
DBTreeView для ADO.


14-58440
Shluz
2003-08-02 00:05
2003.08.18
Хороший программист родился или стал??





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский