Текущий архив: 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