Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПрисвоение значения IbQuery.RecNo Найти похожие ветки
← →
DelphiN! © (2005-02-22 07:33) [0]Пишу 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-22 07:49) [1]FetchAll забыл поставить, сорри, тема закрыта !
← →
DelphiN! © (2005-02-22 08:10) [2]А нет, тема не закрыта, оказывается FeetchAll не помог ... :(
← →
ЮЮ © (2005-02-22 08:41) [3]Извини, Паша, но здесь я не помощник. Такой метод навигации мне не понять, ну что значит "пятая запись" датасета ? Я бы запомнил значение ключевого поля (которого у тебя, пока, нет) и сделал бы Locate, на худой конец. М вообще бы обошёлся одним проходом по датасету. Твои манипуляции совершенно не понятны для моего уразумения :(
← →
DelphiN! © (2005-02-22 08:59) [4]
> [3] ЮЮ © (22.02.05 08:41)
> что значит "пятая запись" датасета
Это значит IBQuery.RecNo = 5; //А всего записей в таблице 2-е
У меня и так 1-н проход по датасету, вот полный код :
var
i: Integer;
b: Boolean;
f: string;
r: Integer;
Uslug: TUslug;
SQL: String;
begin
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;
if Seanses.FieldByName("COMP_").AsString = IP then
begin
Result.IP := IP;
Result.StartTime := Seanses.FieldByName("StartTime_").AsDateTime;
Result.EndTime := Seanses.FieldByName("EndTime_").AsDateTime;
Result.LeftTime := DateTimeToUnix(Result.EndTime) - DateTimeToUnix(now);
Result.State := Seanses.FieldByName("State_").AsString;
Result.Usluga := Seanses.FieldByName("Usluga_").AsString;
Uslug := GetUslugType(Result.Usluga,IpToNum(Result.IP),now,Tariffs);
if Uslug.Package then
begin
Result.AllMoney := Uslug.Price;
Result.LeftMoney := 0;
end
else
begin
Result.AllMoney := Seanses.FieldByName("Money_").AsFloat;
Result.LeftMoney := TimeToMoney(now, Result.EndTime, IpToNum(IP),
Result.Usluga, 0, Tariffs);
end;
Result.OFF := false;
Result.Name := IpToName(IP);
b := true;
end;
Inc(i);
end;
SEANSES.Filter := f;
SEANSES.RecNo := r;
end;
С парадоксом все работало на Ура, как перевел на IB все глючить стало !
← →
DelphiN! © (2005-02-22 09:10) [5]Если я непонятно объяснил проблемму, то вобщем это ф-ия поиска, которая должна находить значение в столбце COMP_, и эта ф-ия находит через раз, бывает когда в таблице 100% есть искомое значение она не находит его :(
← →
DelphiN! © (2005-02-22 09:14) [6]Если производить поиск так :
Seanses.SQL.TEXT := "Select * From SEANSES Where ""Comp_ = "+IP+"""";
Seanses.Open;
if Seanses.RecordCount > 0 then
//Нашли
else
//Не нашли
То все работает, но переводить весь проект под этот стиль потребует немало времени
← →
ЮЮ © (2005-02-22 09:18) [7]Во я и говорю вместо
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; // а если найдена запись вне фильтра
← →
ЮЮ © (2005-02-22 09:23) [8]>То все работает, но переводить весь проект под этот стиль потребует немало времени
Хороший стиль - не наш стиль :)
← →
DelphiN! © (2005-02-22 09:25) [9]
> 1) А где выход из цикла, если нужная запись найдена?
Выход из цыкла :
Вот Условие :
while (i <= Seanses.RecordCount) and (not b) do
begin
Если запись найдена то b делается в true(что является условием выхода из цыкла). При этом при каждой итерации цыкла цвеличивается значение i, а если i станет больше SEANSES.RecordCount то произойдет выход из цыкла
> SEANSES.Filter := f;
> SEANSES.RecNo := r; // а если найдена запись вне фильтра
Перед поиском фильтр убирается, далее производиться поиск, и результаты поиска записываються в Result, после поиска данные о поиске в таблице уже не нужны поэтому востанавливается первоначальный фильтр и позиция
← →
DelphiN! © (2005-02-22 09:29) [10]
> используй нормальный цикл пл датасету
>
> Seanses.First;
> while not Seanses.Eof and not b do begin
>
> ...
> Seanses.Next;
> end;
А какая разница ?
Когда через RecNo переключать, это визуально незаметно в гриде, а через Next ... заметно
← →
ЮЮ © (2005-02-22 09:39) [11]>Когда через RecNo переключать, это визуально незаметно в гриде, а через Next ... заметно
Потому, навеорное, и незаметно, что перехода на новую запись нет :) SEANSES.Isable[Enable]Controls сделает невидимым перемещения. Правда вернуться обратно тоже будет проблематично :(
← →
DelphiN! © (2005-02-22 09:39) [12]Действительно через Next-ы не глючит, а почему тогда через RecNo глючило ? Я ведь FeetchAll делал
← →
DelphiN! © (2005-02-22 09:46) [13]
> [11] ЮЮ © (22.02.05 09:39)
>
> Потому, навеорное, и незаметно, что перехода на новую запись
> нет :)
Нет, переход есть(только в IB через раз). С Парадоксом вообще проблемм небыло
← →
Johnmen © (2005-02-22 10:01) [14]>DelphiN! ©
Никогда, ни при каких обстоятельствах НЕ ИСПОЛЬЗУЙ RecnNo и RecordCount !
Это мой последний пост для тебя. Учи матчасть.
Festinatio tarda est!
← →
DelphiN! © (2005-02-22 10:41) [15]
> RecordCount
А что использовать для определения колличества записей ?
← →
DelphiN! © (2005-02-22 10:47) [16]У меня опять проблемма :
System.SQL.Text := "DELETE FROM SEANSES WHERE COMP_ = """+IP+"""";
System.ExecSQL; //Тут программа намертво зависает без вывода каких либо сообщений об ошибках
Если делать :
SEANSES.Delete; то происходит тоже самое
← →
DelphiN! © (2005-02-22 10:53) [17]При попытки удаления в IbExpert-e приоисходил ошибка в ждущей транзикции, после перезапуска ФБ сервера все заработало, похоже я тут не один глючу :)
← →
Sergey13 © (2005-02-22 10:59) [18]2 [17] DelphiN! © (22.02.05 10:53)
>похоже я тут не один глючу :)
Еще от глюков помогает Format c: и переустановка ОС.
← →
DelphiN! © (2005-02-22 11:11) [19]Де не уж, спасибо :)
← →
Danilka © (2005-02-22 11:29) [20]
> Festinatio tarda est!
А по-русски можно? А то не понятно, кто там чего ест. :))
DelphiN!
Не гоже работать с клиент-сервером файл-серверными методами. Хотя, ты даже так с ними не работаешь, а пытаешься работать через задний проход и потом кричишь что все глючит. 1. для поиска в наборе данных служит locate, о чем тебе уже говорили в этой ветке. 2. recordcount в определенных случаях вернет -1. 3. Если книжки читать религия не позволяет, посвяти праздничный день изучению хелпа и примеров дельфи.
← →
Johnmen © (2005-02-22 11:40) [21]>Danilka © (22.02.05 11:29) [20]
>А по-русски можно? А то не понятно, кто там чего ест. :))
Торопливость задерживает
или, как говорил тов.Саахов, торопиться не надо...
:)
← →
Danilka © (2005-02-22 12:55) [22][21] Johnmen © (22.02.05 11:40)
пасиба :)
по-русски тоже есть подобное, просто слов больше в два раза. :)
← →
Anatoly Podgoretsky © (2005-02-22 13:20) [23]Johnmen © (22.02.05 10:01) [14]
Помнится ты это ему уже говорил, давно, стоит ли повторяться?
← →
DelphiN! © (2005-02-23 10:34) [24]Поставил компонент TIBDataSet вместо TIBQuery и проблемм нестало !
Можно еще вопрос, каким способом мне определять колличество записей текущей выборки(сколько записей отображается сейчас в DBGrid-е) ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c