missing (compatible) underlying dataset

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

missing (compatible) underlying dataset

Сообщение pi1 » 24.02.2017 12:06:48

Перешел с 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.
Аватара пользователя
pi1
новенький
 
Сообщения: 49
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: missing (compatible) underlying dataset

Сообщение pi1 » 18.03.2017 13:08:27

Ладно, раз наводить порядок, то наведем. Количество полей в юните сделаем равным (не более) необходимому количеству в запросе в коде. А если в другом запросе нужно меньшее количество полей, то поставим на форму еще один SQLQuery, для которого в юните будет меньшее количество полей. Однако вылез баг. Ставлю компоненту SQLQuery на форму, активирую, в редакторе полей выбираю нужные и эти поля НЕ ДОБАВЛЯЮТСЯ (как раньше, автоматом) в список типов в юните. Приходится вписывать "ручками", а вот в файле lfm поля добавляются. Почему такое происходит (а на предыдущих версиях, сейчас 1.6.2, такого не встречал). Причем это не везде. Уже даже права файлов проверил в винде. Разницы не заметил между хорошими и плохими. :(

Добавлено спустя 47 минут 29 секунд:
Вроде причина в компоненте - zsspxml: XML reader
// Накалякано в Мозыре в 2009 году
// Автор: Неборак Руслан Владимирович (Ruslan V. Neborak)
// e-mail: avemey(мяу)tut(точка)by
// URL: http://avemey.com
// Ver: 0.0.5
// Лицензия: zlib
// Last update: 2012.08.12
Где то не стыковка с этой версией лазаря.

Добавлено спустя 2 часа 2 минуты 29 секунд:
Точно, в файле zsspxml.pas (src компоненты zexmlss ) нестыковка с новой версией IDE. Компонента от 2016 года, а этот файл не правили с 2012. Убрал из uses zsspxml , поработал с sqlQuery , вернул назад и откомпиллировал проект. Придется или так или самому править в zsspxml.pas директивы компилятора.
Аватара пользователя
pi1
новенький
 
Сообщения: 49
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: missing (compatible) underlying dataset

Сообщение pi1 » 29.03.2017 12:09:11

В продолжение темы. Значит если раньше я создавал на форме один SQLQuery с набором полей f1,f2,f3,f4,f5,f6,f7. В зависимости от необходимости открывал запрос select f1,f4,f5 from TTable1. То сейчас на версии 1.6 (3.0) я получаю затык с сообщением missing (compatible) underlying dataset. То есть на каждое сочетание нужен отдельный SqlQuery или открывать всегда все поля. Вот и думаю, а не вернуться ли на старый релиз. Думаю причина в том, что теперь проектом рулят личности сформировавшиеся в период 90х. То есть пох....ты. Или этот глюк только у меня?

Добавлено спустя 2 часа 31 минуту 37 секунд:
Поставил 1.6.4 (вместо 1.6.2) и вспомнил "Золотой теленок". Бендер сказал следущее "Почему вы пишете штанов нет, это же не культурно. Нужно писать брюк нет" Смысл в том, что когда нет или штанов или брюк, это все одно не культурно. Теперь сообщение missing (compatible) underlying dataset заменено на сообщение об отсутствии поля. То есть если у меня в датасете объявлено 15 полей, я обращаюсь к двум, то выводится сообщение об отсутствии какого то ОДНОГО из 15 полей. Если добавить в запрос, то сообщение о другом поле. Это ж надо, какая тонкая логика :)
Аватара пользователя
pi1
новенький
 
Сообщения: 49
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск

Re: missing (compatible) underlying dataset

Сообщение pi1 » 04.10.2017 20:04:10

Насколько понял, в компилятор была добавлена проверка правильности работы с полями компоненты sqlquery. На примере. Мы объявили в юните для sqlquery поля f1, f2, f3. Затем открываем датасет запросом select f1 from ttable . Возникает интересный вопрос, что в этом открытом датасете в полях f2 и f3? Скорее всего раньше эти поля заглушались, а с добавлением новых (динамических) возможностей глушить стало невозможно, вот и решили проверять.
Аватара пользователя
pi1
новенький
 
Сообщения: 49
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru