D6 ADO Проблема при вставке записи в представление у которого в неуникальной таблице имеется поле DateTime
Привет всем
Имеем
Delphi 6 Build 6.240 Update Pack 2
ADO 2.6
MSSQL7 (SP вроде 4)
создаем таблицу 1
---------------------------------------------------------
Create Table dbo.test
(
aaa char(10) Not Null,
bb char(10) Not Null,
ccc datetime Not Null
)
Go
Alter Table dbo.test Add Constraint
PK_test Primary Key Nonclustered
(
aaa
)
Go
добавляем в нее 1 запись
например ('aaa','bbb','01.10.2002')
создаем таблицу 2
-------------------------------------------------------------
Create Table dbo.test1
(
aaa char(10) Not Null,
bbb smalldatetime Not Null
)
Go
Alter Table dbo.test1 Add Constraint
PK_test1 Primary Key Nonclustered
(
aaa,
bbb
)
Go
Alter Table dbo.test1 Add Constraint
FK_test1_test Foreign Key
(
aaa
) References dbo.test
(
aaa
)
Go
создаем представление
--------------------------------------------------------
CREATE VIEW dbo.View1
AS
SELECT test1.aaa, test1.bbb, test.bb, test.ccc
FROM test INNER JOIN
test1 ON test.aaa = test1.aaa
Go
создаем в d6 форму
ложим на нее DataSource DBGrid и ADODataSet
настраиваем их друг на друга
у ADODataSet
настраиваем ConnectString и
указываем в CommandText select * from view1
делаем ADODataSet.Active=False
делаем Add All Fields
у получившихся полей bb и ccc указываем в ProviderFlags
pflnUpdate=False (aaa и bbb оставляем без изменений)
запускаем форму
руками заносим значения в aaa и bbb
(в поле ааа надо занести в соответствии с примером значение 'aaa')
переходим на следующую запись и получаем :
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleException with
message 'Multiple-step operation generated errors. Check each status
value'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
запись кстати фактически добавляется
делаем program reset (т.к. программа на этом исключении циклится)
указываем (в adodataset) что поле ccc Visible=False
(из грида оно естественно пропадает )
запускаем программу снова
снова заносим значение в поля aaa,bbb
переходим на другую запись и все проходит нормально
без ошибки и запись добавляется
таки я хотел бы из справочника показывать поля типа DateTime в Grid
как это сделать ?
ПС:
в реальной задаче полей гораздо больше
ну и поля типа DateTime находятся за пределами видимой части Grid
по умолчанию ну и соответственно ошибка происходит только когда я
перехожу к соответствующему полю по Grid т.е. добавил запись нажал
несколько раз tab и вылетает такая же ошибка на строке 4271 в adodb.pas
в процедуре function TCustomADODataSet.GetFieldData(Field: TField;
Buffer: Pointer;
а в строке написано :
Data := Recordset.Fields[Field.FieldNo-1].Value;