D6 ADO Проблема при вставке записи в представление
От: robokot Россия  
Дата: 27.03.02 06:06
Оценка:
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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.