![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при рефреше 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