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

Вниз

Присвоение значения 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.04 c
8-1103024819
Ego
2004-12-14 14:46
2005.03.27
Как получить значение цвета?


1-1110369690
Tashtagol
2005-03-09 15:01
2005.03.27
TTreeView и TStringGrid


14-1110272617
olookin
2005-03-08 12:03
2005.03.27
Win98 отказывается устанавливаться...


8-1103031593
Пассажир бронепоезда
2004-12-14 16:39
2005.03.27
MediaPlayer + AVI


3-1109582625
NeyroSpace
2005-02-28 12:23
2005.03.27
Нужно написать SQL запрос к таблицам EXCEL