Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
9-1104950702
Бульдозер
2005-01-05 21:45
2005.03.27
Опять коллизии


1-1110955876
Tankist
2005-03-16 09:51
2005.03.27
LISTVIEW - Как сортировать элементы не по 1-му столбцу, а по 2-му


9-1101050960
-=OpeR=-
2004-11-21 18:29
2005.03.27
Поиск кратчайшего растояния


8-1102433128
Sergonoid
2004-12-07 18:25
2005.03.27
LineTo или рисование по мм?


14-1109955031
Jeer
2005-03-04 19:50
2005.03.27
Эквилибриум





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