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

Вниз

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

 
Roma L   (2006-12-28 05:14) [0]

Метод ADOTable.last не доходит до конца таблицы. Не могу понять причину такого поведения.


 
ЮЮ ©   (2006-12-28 06:35) [1]


> Метод ADOTable.last не доходит до конца таблицы

Как догадался? Неужели ADOTable.EOF остается False?


 
Roma L   (2006-12-28 08:23) [2]

Как ни странно AdoTAble.EOF переходит в true, но по  значению полей видно , что указатель находится на середине таблицы.


 
MsGuns ©   (2006-12-28 08:27) [3]

>Roma L   (28.12.06 08:23) [2]
>Как ни странно AdoTAble.EOF переходит в true, но по  значению полей видно , что указатель находится на середине таблицы

Что понимается под "серединой таблицы" ?


 
ORMADA ©   (2006-12-28 08:33) [4]

потрясно!
ты с чем сравниваешь то
сделай order by и потом уж сравнивай


 
Roma L   (2006-12-28 08:57) [5]

В программе имеется функция, которая определяет код последней добавленной строки. Но с некоторого момента она начинает возвращить одно и тоже значение (Хотя Код - поле счетчик, и данные постоянно добавляются). Приведу текст функции.

var
  T:TAdoTable;
begin
  t:= TAdoTable.Create(Form1);
  t.Connection:=AdoConnection1;
  t.TableName:="Втаблица";
  t.Active:=true;
  t.last;
  result:=t.FieldByName("Код").AsInteger;
  t.Active:=False;
  t.Free;
end;

Примерно так.


 
Desdechado ©   (2006-12-28 10:52) [6]

Это не последняя строка в таблице, этопоследняя строка в SQL-выборке, которая имитирует таблицу. А поскольку неупорядоченная выборка может возвращать данные в произвольном порядке (это стандартное поведение), то пользоваться этим методом нельзя.

Вообще забудь про Table, используй ADODataset и ADOCommand.


 
Ega23 ©   (2006-12-28 11:41) [7]


begin
 With TADODataSet.Create(nil) do
   begin
     try
       Connection := ADOConnection1;
       CommandTExt := "Select IsNull(Max(Код), -1) as X from Таблица";
       try
        Open;
        Result := Fields[0].Value
       except
         ShowMessage("Фигня при открытии") ;
         Result := -1;
       end;
     finally
      Close;
      Free;
     end;
   end;
end;


Примерно так.


 
Desdechado ©   (2006-12-28 11:45) [8]

Метод Ega23 ©   (28.12.06 11:41) [7] годится только для однопользовательской работы, иначе большие грабли.


 
Ega23 ©   (2006-12-28 11:47) [9]


> Метод Ega23 ©   (28.12.06 11:41) [7] годится только для
> однопользовательской работы, иначе большие грабли.
>


Ega23 © не вдавался в подробности построения прграммной архитектуры сабжа, Ega23 © всего лишь переписал жуть из [5].
Сам Ega23 © так никогда не делает...   :о)


 
Roma L   (2006-12-29 03:54) [10]

А что делать при многопользовательской работе? Что значит
"Большие грабли"?


 
Roma L   (2006-12-29 03:55) [11]


> Метод Ega23 ©   (28.12.06 11:41) [7] годится только для
> однопользовательской работы, иначе большие грабли.

А что делать при многопользовательской работе? Что значит
"Большие грабли"?


 
Roma L   (2006-12-29 03:59) [12]

Что если взять ADOQuery и отсортировать по полю "КОД"?


 
Ega23 ©   (2006-12-29 10:00) [13]


> А что делать при многопользовательской работе? Что значит
> "Большие грабли"?
>


Я включу телепатор и попробую догадаться: тебе нужен максимальный ID для вставки следующей записи, а поле не identity? Тогда выполняй скрипт такого вида:


Declare @x int
Select @X=IsNull(Max(id)+1, 1) from table
Insert into table (id, ....) Values (@x, ....)


 
Desdechado ©   (2006-12-29 11:34) [14]

"большие грабли" означает, что несколько параллельно работающих пользователей могут выполнить этот код одновременно, получив одинаковое значение. В итоге при вставке записей либо будет ошибка вставки, либо какой-нибудь пользователь узнает код чужой записи, а не своей. В итоге - каждому по лбу, а тебе - в совокупности от них.



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

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
11-1144299344
Psychedelic
2006-04-06 08:55
2007.01.21
Как в KOL полностью уничтожить форму?


2-1167993985
DelphiLexx
2007-01-05 13:46
2007.01.21
Delphi выдает ошибку. С чем это связано


2-1167749353
FIL-23
2007-01-02 17:49
2007.01.21
мешают компоненты


15-1167230461
Calibr
2006-12-27 17:41
2007.01.21
HTML + Delphi?


15-1167520705
Petr V. Abramov
2006-12-31 02:18
2007.01.21
Для поддержки сушествующего настроения конференции :)))





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