Перешел с 0.93 на 1.6.2. Сначала переделал в проекте versioninfo, а теперь вылез сабж- missing (compatible) underlying dataset. То есть если у меня в компоненте SQLQuery прописано в поле SQL например вызов 16 полей и столько же создано (для одной процедуры), то если я вызываю через эту же компоненту в другой процедуре датасет со значениями только 2 полей (входящих в список из 16), то выводится эта ошибка. В предыдущей версии ошибки не было. Кто бы мог прокомментировать это изменение ?
Добавлено спустя 3 часа 30 минут 26 секунд:
Судя по всему разработчики таким путем экранировали проблему с autocalculated-полями . Допустим из 16 полей, одно autocalculated, а я работаю только с двумя другими. Что тогда будет с autocalculated полем? Вот кусок кода из исходника bufdataset.pas
// If there is a field with FieldNo=0 then the fields are not found to the
// FieldDefs which is a sign that there is no dataset created. (Calculated and
// lookup fields have FieldNo=-1)
FAutoIncField:=nil;
for i := 0 to Fields.Count-1 do
if Fields[i].FieldNo=0 then
DatabaseError(SErrNoDataset)
else if (FAutoIncValue>-1) and (Fields[i] is TAutoIncField) and not assigned(FAutoIncField) then
FAutoIncField := TAutoIncField(Fields[i]);
где константа SErrNoDataset='missing (compatible) underlying dataset'
Добавлено спустя 22 минуты 8 секунд:
БББлин!! Оказалось, что по умолчанию у SqlQuery взведен автоматом режим "AutoCalcFields". Я его точно не взводил.
Добавлено спустя 3 минуты 59 секунд:
Причем, отключение AutoCalcFields не помогает уйти от этой ошибки.
Добавлено спустя 1 час 47 минут 20 секунд:
Я там, выше, спутал AutoCalc с AutoInc . Пока не понял разрабов и просто закомментил кусок кода в C:lazarusfpc3.0.0sourcepackagesfcl-dbsrcbasebufdataset.pas (возможно можно где то просто "птичку" убрать)-
//------------------------------------------------------------
// If there is a field with FieldNo=0 then the fields are not found to the
// FieldDefs which is a sign that there is no dataset created. (Calculated and
// lookup fields have FieldNo=-1)
FAutoIncField:=nil;
//pi
// for i := 0 to Fields.Count-1 do
// if Fields[i].FieldNo=0 then
// DatabaseError(SErrNoDataset)
// else if (FAutoIncValue>-1) and (Fields[i] is TAutoIncField) and not assigned(FAutoIncField) then
// FAutoIncField := TAutoIncField(Fields[i]);
InitDefaultIndexes;
//------------------------------------------------------------
и пересобрал lazarus.exe
Добавлено спустя 47 минут 48 секунд:
И не помогло.
Добавлено спустя 15 часов 30 секунд:
Насколько понял из аглицких текстов, так как TSQLQuery потомок TBufDataset то и изменение по использованию памяти компонентом TBufDataset повлияло и на работу TSQLQuery. То есть, если у TBufDataset делать так, как я делаю с TSQLQuery (частичное использование полей датасета), то будет возможна ошибка (например loop между полями) и эту возможность забанили. Ну заодно и удобство в простой работе с TSQLQuery.