Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Не удается найти строку для обновления.


Автор: Burka 9.10.2007, 15:55
Такая проблема: в программе, добавляю строчку в БД(она оказывается последней в списке) и редактирую, табуляцией перемещаюсь по колонкам, но когда ТАб нажимаешь на последней колонке возникает ошибка
Код

Не удается найти строку для обновления.  Некоторые значения могли быть изменены со времени ее последнего чтения.


Подскажите, что сделать можно?
Использую AdoTable( smile ), AdoConnection( smile ) и т.п.

Автор: Данкинг 9.10.2007, 19:07
Помогает закрыть-открыть adodataset.

Автор: Burka 9.10.2007, 19:34
ммм не тот вариант который мне нужен.. а вообще помогает смена фокуса с дбгрида, но мне нужно узнать именно причину ошибки. А дедовскими способами не хочу  smile 

Автор: ALeXandrK 9.10.2007, 20:11
Все зависит от параметров CursorLoaction и IsolationLavel.

Описывать все их варианты и что они значат не буду (их много), поищи в интернете.

У меня лично стоит CursorLoaction = clUseClient, IsolationLavel = ilUnspecified;

Так ты говоришь, что я "сервер" и мне не нужно строго следить за транзакциями и др. 
штучками, т.к. я один и базу, кроме меня, никто не изменяет. Соотвтетсвенно, тебе
он говорит все правильно, т.к. не знает были ли изменения или нет...

Автор: Burka 9.10.2007, 22:22
Выставил все свойства так, не помогло..
Эта же ошибка выскакивает, если сделать так: добавить строку, редактировать ее и применить метод Next к соответствующему датасету. (если хотите проверьте, должна быть ошибка=) )
Я вот думаю может сохранить вручную при редактировании как-нибудь, но Post не работает т.к. датасет находится не в Edit-моде..
 smile 

Автор: SergeBS 10.10.2007, 07:25
Burka, 
Код
TADODataset.Properties['Update Resync'].Value := adResyncAll;

На DelphiKingdom - статья насчет ADO. Там описано зачем.
Если нет уникального ключа - не поможет ничего.
ALeXandrK, 
Цитата
Все зависит от параметров CursorLoaction и IsolationLavel

Если бы только от них... ЭТО от них не зависит.

Автор: Burka 10.10.2007, 11:38
SergeBS, у меня "adResyncAll" не известно. мож че подключить надо?

Цитата

Если нет уникального ключа - не поможет ничего.

Уникальный ключ, это случаем не тоже самое, что и ключевое поле? А то я путаюсь уже.

Автор: Savek 10.10.2007, 13:07
модуль ADOInt
adResyncAll = $0000000F;

Автор: ALeXandrK 10.10.2007, 13:41
Цитата(SergeBS @ 10.10.2007,  07:25)
Burka, 
Код
TADODataset.Properties['Update Resync'].Value := adResyncAll;

На DelphiKingdom - статья насчет ADO. Там описано зачем.
Если нет уникального ключа - не поможет ничего.
ALeXandrK, 
Цитата
Все зависит от параметров CursorLoaction и IsolationLavel

Если бы только от них... ЭТО от них не зависит.

Мне как раз 
Код
TADODataset.Properties['Update Resync'].Value := adResyncAll;

не помогал, когда была такая же проблема, а вот указанные мной свойства тут же помогли.

Автор: Burka 10.10.2007, 16:02
Не помогло(

Автор: Burka 10.10.2007, 16:27
Вот это вроде помогло, только грузить чуть подольше после клика мышкой:

Код

procedure TMainForm.ADOQryAfterPost(DataSet: TDataSet);
begin
DataSet.Refresh;
end;



Автор: SergeBS 11.10.2007, 07:30
Burka, 
Прочитай все-таки статью "Немного об использовании ADO в Delphi" c DelphiKingdom. Пригодится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)