Добрый день.
Заранее прошу не судить строго за выбранные методы решения задачи.
Прошу помощи в локализации ошибки
MissingSQLProperty, и для этого
постараюсь как можно обстоятельнее и подробнее изложить исходную диспозицию.
Используется серверная
БД Регистратура под управлением
MS SQL Server 2012.
Используется библиотека
EhLib 6.2Используется
схема 1 для отображения картотеки пациентов:
ADOConnection->ADODataDriverEh->MemTableEh->DataSource (Далее DSCards)Используется
схема 2, 3...n для получения различных справочных данных:
ADOConnection->ADOQuery->DataSource1(Далее DSDiagnosis, DSEmployee и пр.)MemTableEh заполняется по команде
ADODataDriverEh.SQLCommand.Text := 'Select [список полей] from cards'Далее в проекте имеется форма
form1 с
DBGridEh->DSCardsПользователи категорически против всякого редактирования в табличном режиме поэтому пришлось завести дополнительную форму
form2 для редактирования полей из
DBGridEh.
По нажатию
form1.button значения из
DBGridEh присваиваются различным
Controls в
form2Один типичный пример заполнения элементов управления.
Для поля шифра диагнозов
form2.DBLookUpComboBoxEh1:Код:
DataField := NDIA; //поле диагнозов из картотеки
DataSource := DataModule1.DSCards; //ДС картотеки
ListSource := DataModule1.DSDiagnosis; //Список диагнозов
ListField := NDIA //Поле справочника диагнозов
KeyField := NDIA //тоже самое поле
При открытии формы этот control заполняется верным значением.
Однако аналогичный
DBLookUpComboBoxEh2.Text для второго значения диагнозов
form1.DBGridEh.FieldsByName['NDIA22'].AsString; ссылающийся на тот же справочник
почему то не заполняется. Скорее всего здесь нужен дополнительный
DataSet. Но у меня так и ни чего не получилось. Выкрутился создав вместо
DBLookUpComboBoxEh DBComboBoxEh из заполняя программно
Items из
DSDiagnosis.DataSet.Это все прелюдия. Суть в том, что после окончания редактирования и закрытия
form2 программа генерит указанную в топике ошибку и вываливается в модуль
DataDriver в функцию
TCustomSQLDataDriverEh.DefaultExecuteCommand на строку
Result := Command.Execute(Cursor, FreeOnEof). Пробовал закрывать предварительно
MemTableEh и повторно открывать. Проблема вроде как решилась. Однако, открытие слишком расточительно по времени.
MemTableEh.ApplyUpdates не возымело действия. Пробовал также настроить параметры
update'а в методе
DataModule.MemTableEhCardsAfterPost(DataSet: TDataSet) и применить
MemTableEh.refreshrecord. Ошибка снова возникает. Что сделал не так, или чего не сделал?
P.S.
В свойствах
ADODataDriverEh.UpdateSQL написал запрос
Код:
Update Cards
Set field1 = :paramFld1,
field2 = :paramFld2,
...
fieldN = :paramFldN
Where ID = :ID
MemTableEh.CachedUpdates := false;