Главная страница
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.5 MB
Время: 0.057 c
5-1147103058
NORDmen
2006-05-08 19:44
2007.01.21
Компонент линия


1-1164875301
Krants
2006-11-30 11:28
2007.01.21
Проблема при копировании таблиц через ClipBoard


4-1157708779
artemca
2006-09-08 13:46
2007.01.21
работа с netshell.dll или сетевой картой в windows


2-1167763029
Zver1992
2007-01-02 21:37
2007.01.21
Поиск в файле


15-1167602153
Игорь Шевченко
2007-01-01 00:55
2007.01.21
Наталия, с днем рождения!