![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Присвоение значения IbQuery.RecNo [D6]
DelphiN! © (2005-02-22 07:33:00)Пишу Query.RecNo := 2;, а присваивается 5 ! Вот код :
i := 1;
b := false;
f := SEANSES.Filter;
r := SEANSES.RecNo;
SEANSES.Filter := '';
Result.IP := '';
while (i <= Seanses.RecordCount) and (not b) do
begin
Seanses.RecNo := i; //Вот тут RecNo почемуто всегда равен 5, хотя RecordCount = 2, а значение возвращаемое Seanses.FieldByName('COMP_').AsString = 1-ой строке ! Переменная i же изменяется правильно (сначало 1, потом 2)
if Seanses.FieldByName('COMP_').AsString = IP then
begin
...
Почему ? Как это исправить ?
DelphiN! (2005-02-23 10:34:00) [1]Поставил компонент TIBDataSet вместо TIBQuery и проблемм нестало !
Можно еще вопрос, каким способом мне определять колличество записей текущей выборки(сколько записей отображается сейчас в DBGrid-е) ?
Anatoly Podgoretsky (2005-02-22 13:20:00) [2]Johnmen © (22.02.05 10:01) [14]
Помнится ты это ему уже говорил, давно, стоит ли повторяться?
Danilka (2005-02-22 12:55:00) [3][21] Johnmen © (22.02.05 11:40)
пасиба :)
по-русски тоже есть подобное, просто слов больше в два раза. :)
Johnmen (2005-02-22 11:40:00) [4]>Danilka © (22.02.05 11:29) [20]
>А по-русски можно? А то не понятно, кто там чего ест. :))
Торопливость задерживает
или, как говорил тов.Саахов, торопиться не надо...
:)
Danilka (2005-02-22 11:29:00) [5]
> Festinatio tarda est!
А по-русски можно? А то не понятно, кто там чего ест. :))
DelphiN!
Не гоже работать с клиент-сервером файл-серверными методами. Хотя, ты даже так с ними не работаешь, а пытаешься работать через задний проход и потом кричишь что все глючит. 1. для поиска в наборе данных служит locate, о чем тебе уже говорили в этой ветке. 2. recordcount в определенных случаях вернет -1. 3. Если книжки читать религия не позволяет, посвяти праздничный день изучению хелпа и примеров дельфи.
DelphiN! (2005-02-22 11:11:00) [6]Де не уж, спасибо :)
Sergey13 (2005-02-22 10:59:00) [7]2 [17] DelphiN! © (22.02.05 10:53)
>похоже я тут не один глючу :)
Еще от глюков помогает Format c: и переустановка ОС.
DelphiN! (2005-02-22 10:53:00) [8]При попытки удаления в IbExpert-e приоисходил ошибка в ждущей транзикции, после перезапуска ФБ сервера все заработало, похоже я тут не один глючу :)
DelphiN! (2005-02-22 10:47:00) [9]У меня опять проблемма :
System.SQL.Text := 'DELETE FROM SEANSES WHERE COMP_ = '''+IP+'''';
System.ExecSQL; //Тут программа намертво зависает без вывода каких либо сообщений об ошибках
Если делать :
SEANSES.Delete; то происходит тоже самое
DelphiN! (2005-02-22 10:41:00) [10]
> RecordCount
А что использовать для определения колличества записей ?
Johnmen (2005-02-22 10:01:00) [11]>DelphiN! ©
Никогда, ни при каких обстоятельствах НЕ ИСПОЛЬЗУЙ RecnNo и RecordCount !
Это мой последний пост для тебя. Учи матчасть.
Festinatio tarda est!
DelphiN! (2005-02-22 09:46:00) [12]
> [11] ЮЮ © (22.02.05 09:39)
>
> Потому, навеорное, и незаметно, что перехода на новую запись
> нет :)
Нет, переход есть(только в IB через раз). С Парадоксом вообще проблемм небыло
DelphiN! (2005-02-22 09:39:00) [13]Действительно через Next-ы не глючит, а почему тогда через RecNo глючило ? Я ведь FeetchAll делал
ЮЮ (2005-02-22 09:39:00) [14]>Когда через RecNo переключать, это визуально незаметно в гриде, а через Next ... заметно
Потому, навеорное, и незаметно, что перехода на новую запись нет :) SEANSES.Isable[Enable]Controls сделает невидимым перемещения. Правда вернуться обратно тоже будет проблематично :(
DelphiN! (2005-02-22 09:29:00) [15]
> используй нормальный цикл пл датасету
>
> Seanses.First;
> while not Seanses.Eof and not b do begin
>
> ...
> Seanses.Next;
> end;
А какая разница ?
Когда через RecNo переключать, это визуально незаметно в гриде, а через Next ... заметно
DelphiN! (2005-02-22 09:25:00) [16]
> 1) А где выход из цикла, если нужная запись найдена?
Выход из цыкла :
Вот Условие :
while (i <= Seanses.RecordCount) and (not b) do
begin
Если запись найдена то b делается в true(что является условием выхода из цыкла). При этом при каждой итерации цыкла цвеличивается значение i, а если i станет больше SEANSES.RecordCount то произойдет выход из цыкла
> SEANSES.Filter := f;
> SEANSES.RecNo := r; // а если найдена запись вне фильтра
Перед поиском фильтр убирается, далее производиться поиск, и результаты поиска записываються в Result, после поиска данные о поиске в таблице уже не нужны поэтому востанавливается первоначальный фильтр и позиция
ЮЮ (2005-02-22 09:23:00) [17]>То все работает, но переводить весь проект под этот стиль потребует немало времени
Хороший стиль - не наш стиль :)
ЮЮ (2005-02-22 09:18:00) [18]Во я и говорю вместо
while (i <= Seanses.RecordCount) and (not b) do
begin
Seanses.RecNo := i;
...
end;
используй нормальный цикл пл датасету
Seanses.First;
while not Seanses.Eof and not b do begin
...
Seanses.Next;
end;
P.S.
1) А где выход из цикла, если нужная запись найдена?
2)
SEANSES.Filter := f;
SEANSES.RecNo := r; // а если найдена запись вне фильтра
DelphiN! (2005-02-22 09:14:00) [19]Если производить поиск так :
Seanses.SQL.TEXT := 'Select * From SEANSES Where ''Comp_ = '+IP+'''';
Seanses.Open;
if Seanses.RecordCount > 0 then
//Нашли
else
//Не нашли
То все работает, но переводить весь проект под этот стиль потребует немало времени
DelphiN! (2005-02-22 09:10:00) [20]Если я непонятно объяснил проблемму, то вобщем это ф-ия поиска, которая должна находить значение в столбце COMP_, и эта ф-ия находит через раз, бывает когда в таблице 100% есть искомое значение она не находит его :(