Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка при рефреше TADODataSet... [D6, Access]


AloneAli ©   (2005-05-04 07:37:00) 

Эта ошибка имеет вид: "Источник данных изменил или удалил значение ключа для данной строки в хранилище данных. Теперь удалена и локальная строка"...


sniknik   (2005-05-04 10:59:00) [1]

> Просветишь?
sniknik ©   (04.05.05 08:40) [6]
> этим ты заставляеш ADO закачивать данные в фоне...
+ F1


AloneAli   (2005-05-04 08:53:00) [2]


> sniknik ©   (04.05.05 08:46) [7]
> вот реально чего хотел добится когда его ставил?

Честно говоря непомню! :)
Получилось, наверное, чисто машинально, а потом начала ставить везде...
И я незнаю для чего она... Просветишь?


sniknik   (2005-05-04 08:46:00) [3]

> В какой компоненте? adodsTypeDoc?
везде убери. пока во всяком случае, свойство то полезное зачастую но только если понимаеш зачем и что им делаеш, и желательно как это работает.

вот реально чего хотел добится когда его ставил?


sniknik   (2005-05-04 08:40:00) [4]

однозначно, вот это вот "eoAsyncExecute, eoAsyncFetch" убери.
этим ты заставляеш ADO закачивать данные в фоне, паралельно с твоим основным потоком, т.е. Open выполнился и в твоей программе выполняется код далее, а ADO еще данные какоето время докачивает... а тут уже сразу Refresh который эти же данные обновлять должен, естественно ошибка, из двух потоков пытается одно и тоже менять.

> Когда, например, делаю добавление в TypeDoc и рефрешу adodsTypeDoc, то добавленная не отображается в DBGrid'е. Не помогает и сочетание
> Close...Open.
лучше сразу добавляй в adodsTypeDoc, рефреш станет не нужным.
или добавляеш не в программе, а гдето еще?
Close...Open должен помочь, чтото у тебя не то если не помогает. и это не то тоже может быть связано с настройкой на асинхронное получение данных.


AloneAli   (2005-05-04 08:20:00) [5]


> ЮЮ ©   (04.05.05 08:05) [3]
> Возможно, это из-за
> ExecuteOptions = [eoAsyncExecute, eoAsyncFetch]

В какой компоненте? adodsTypeDoc?


AloneAli   (2005-05-04 08:18:00) [6]


> ЮЮ ©   (04.05.05 08:05) [3]
> Непонятно, зачем сразу после  Open нужен Refresh

Сейчас поясню...
Когда, например, делаю добавление в TypeDoc и рефрешу adodsTypeDoc, то добавленная не отображается в DBGrid'е. Не помогает и сочетание Close...Open.
Я давно хотел обратиться по этому вопросу, но никак руки не доходили. И вот... Получается это второй вопрос.


ЮЮ   (2005-05-04 08:05:00) [7]

Непонятно, зачем сразу после  Open нужен Refresh

Возможно, это из-за
ExecuteOptions = [eo AsyncExecute, eo AsyncFetch]


AloneAli   (2005-05-04 07:44:00) [8]

procedure TdmAutomat.DataModuleCreate(Sender: TObject);
begin
 adocAutomat.Connected := true;

 adodsTypeDoc.Open;
 adodsTypeDoc.Refresh;

 adodsConsuption.Open;
 adodsConsuption.Refresh;
end;


И на строчке adodsTypeDoc.Refreshвыдает ошибку.


AloneAli   (2005-05-04 07:41:00) [9]

Привожу dfm

object dmAutomat: TdmAutomat
 OldCreateOrder = False
 OnCreate = DataModuleCreate
 Left = 192
 Top = 81
 Height = 518
 Width = 597
 object adocAutomat: TADOConnection
   Attributes = [xaCommitRetaining]
   Connected = True
   ConnectionString =
     'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Differ\Diplom (P' +
     'OVTAS_Natasha)\Program\AvtBase.mdb;Persist Security Info=False'
   LoginPrompt = False
   Mode = cmShareDenyNone
   Provider = 'Microsoft.Jet.OLEDB.4.0'
   Left = 88
   Top = 56
 end
 object adodsTypeDoc: TADODataSet
   Connection = adocAutomat
   CursorType = ctStatic
   ExecuteOptions = [eoAsyncExecute, eoAsyncFetch]
   CommandText = 'select * from TypeDoc'
   Parameters = <>
   Left = 152
   Top = 200
   object adodsTypeDocID: TAutoIncField
     FieldName = 'ID'
     ReadOnly = True
   end
   object adodsTypeDocName: TWideStringField
     FieldName = 'Name'
     Size = 50
   end
 end
 object dsTypeDoc: TDataSource
   DataSet = adodsTypeDoc
   Left = 264
   Top = 200
 end
 object adodsConsuption: TADODataSet
   Connection = adocAutomat
   CursorType = ctStatic
   ExecuteOptions = [eoAsyncExecute, eoAsyncFetch]
   CommandText =
     'select Consuption.*, Firm_1.*, Firm_2.* from Consuption, Firm as' +
     ' Firm_1, Firm as Firm_2 where (Consuption.fTypeDoc = :ID) and (C' +
     'onsuption.fBuyer = Firm_1.ID) and (Consuption.fOwner = Firm_2.ID' +
     ')'
   DataSource = dsTypeDoc
   IndexFieldNames = 'Consuption.ID'
   MasterFields = 'ID'
   Parameters = <
     item
       Name = 'ID'
       Attributes = [paNullable]
       DataType = ftInteger
       NumericScale = 255
       Precision = 255
       Value = 1
     end>
   Left = 152
   Top = 256
   object adodsConsuptionConsuptionID: TAutoIncField
     FieldName = 'Consuption.ID'
     ReadOnly = True
   end
   object adodsConsuptionNumDoc: TWideStringField
     FieldName = 'NumDoc'
     Size = 10
   end
   object adodsConsuptionDateDoc: TDateTimeField
     FieldName = 'DateDoc'
   end
   object adodsConsuptionBase: TWideStringField
     FieldName = 'Base'
     Size = 50
   end
   object adodsConsuptionfBuyer: TIntegerField
     FieldName = 'fBuyer'
   end
   object adodsConsuptionfOwner: TIntegerField
     FieldName = 'fOwner'
   end
   object adodsConsuptionfTypeDoc: TIntegerField
     FieldName = 'fTypeDoc'
   end
   object adodsConsuptionFirm_1ID: TAutoIncField
     FieldName = 'Firm_1.ID'
     ReadOnly = True
   end
   object adodsConsuptionFirm_1Name: TWideStringField
     FieldName = 'Firm_1.Name'
     Size = 50
   end
   object adodsConsuptionFirm_1INN: TWideStringField
     FieldName = 'Firm_1.INN'
     Size = 10
   end
   object adodsConsuptionFirm_1KPP: TWideStringField
     FieldName = 'Firm_1.KPP'
     Size = 10
   end
   object adodsConsuptionFirm_1fTypeFirm: TIntegerField
     FieldName = 'Firm_1.fTypeFirm'
   end
   object adodsConsuptionFirm_1fAddress: TIntegerField
     FieldName = 'Firm_1.fAddress'
   end
   object adodsConsuptionFirm_1fDirector: TIntegerField
     FieldName = 'Firm_1.fDirector'
   end
   object adodsConsuptionFirm_2ID: TAutoIncField
     FieldName = 'Firm_2.ID'
     ReadOnly = True
   end
   object adodsConsuptionFirm_2Name: TWideStringField
     FieldName = 'Firm_2.Name'
     Size = 50
   end
   object adodsConsuptionFirm_2INN: TWideStringField
     FieldName = 'Firm_2.INN'
     Size = 10
   end
   object adodsConsuptionFirm_2KPP: TWideStringField
     FieldName = 'Firm_2.KPP'
     Size = 10
   end
   object adodsConsuptionFirm_2fTypeFirm: TIntegerField
     FieldName = 'Firm_2.fTypeFirm'
   end
   object adodsConsuptionFirm_2fAddress: TIntegerField
     FieldName = 'Firm_2.fAddress'
   end
   object adodsConsuptionFirm_2fDirector: TIntegerField
     FieldName = 'Firm_2.fDirector'
   end
 end
 object dsConsuption: TDataSource
   DataSet = adodsConsuption
   Left = 264
   Top = 256
 end
 object adodsConsuptionCalc: TADODataSet
   Connection = adocAutomat
   CursorType = ctStatic
   ExecuteOptions = [eoAsyncExecute, eoAsyncFetch]
   CommandText =
     'select ConsuptionCalc.*, Calc.* from ConsuptionCalc, Calc where ' +
     '(ConsuptionCalc.fConsuption = :Consuption.ID) and (ConsuptionCal' +
     'c.fCalc = Calc.ID)'
   DataSource = dsConsuption
   IndexFieldNames = 'ConsuptionCalc.ID'
   MasterFields = 'Consuption.ID'
   Parameters = <
     item
       Name = 'Consuption.ID'
       Attributes = [paNullable]
       DataType = ftInteger
       NumericScale = 255
       Precision = 255
       Value = Null
     end>
   Left = 152
   Top = 312
 end
 object dsConsuptionCalc: TDataSource
   DataSet = adodsConsuptionCalc
   Left = 264
   Top = 312
 end
end


Наверх

Титульная страница Поиск, карта сайта Написать письмо