External: SIGSEGV при обращении к БД через ZQuery

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

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

External: SIGSEGV при обращении к БД через ZQuery

Сообщение Spectr » 26.01.2015 11:18:59

Lazarus 1.26 i386
fpc 2.6.2
zeoslib 7.1
MySQL 5.1

При запуске процедуры в программе возникает данная ошибка в отношении каждой из этих строк:
Код: Выделить всё
 
  DM1.QueryDiagnozy.DataSource.DataSet.Edit; //отсутствие строки также не на что не влияет
  DM1.QueryDiagnozy.DataSource.DataSet.Fields[3].AsString:=DateToStr(Date);
  DM1.QueryDiagnozy.DataSource.DataSet.Fields[1].AsString:=Form3.DBText1.Caption;
  DM1.QueryDiagnozy.DataSource.DataSet.Fields[0].AsString:=Form3.DBText5.Caption;


Что самое интересное - при попытки ввести данные в таблицу вручную через DBEdit и затем сделать апдейт(DM1.QueryDiagnozy.ApplyUpdates;) данные вносятся в БД и сохраняются!
Также не составляет труда получить данные из БД через ZQuery.

Та же самая ошибка срабатывает и в отношении всех другие ZQuery.
Spectr
незнакомец
 
Сообщения: 4
Зарегистрирован: 26.01.2015 09:50:49

Re: External: SIGSEGV при обращении к БД через ZQuery

Сообщение alexs » 26.01.2015 14:57:55

Spectr писал(а):DM1.QueryDiagnozy.DataSource.DataSet

А это что такое???
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: External: SIGSEGV при обращении к БД через ZQuery

Сообщение Spectr » 26.01.2015 17:57:26

alexs писал(а):
Spectr писал(а):DM1.QueryDiagnozy.DataSource.DataSet

А это что такое???


DM1 - название дата модуля
QueryDiagnozy - название ZQuery компонента в дата модуле
DataSource.DataSet - нечто необъяснимое, но очень важное, ибо вот этот код у меня работает:
Код: Выделить всё
x:=DBGrid2.DataSource.DataSet.Fields[0].AsString;
Spectr
незнакомец
 
Сообщения: 4
Зарегистрирован: 26.01.2015 09:50:49

Re: External: SIGSEGV при обращении к БД через ZQuery

Сообщение alexs » 26.01.2015 23:04:47

Всё плохо.
В вашей ситуации надо:
Код: Выделить всё
DM1.QueryDiagnozy.Edit;
DM1.QueryDiagnozy.Fields[3].AsString:=DateToStr(Date);
DM1.QueryDiagnozy.Fields[1].AsString:=Form3.DBText1.Caption;
DM1.QueryDiagnozy.Fields[0].AsString:=Form3.DBText5.Caption;
DM1.QueryDiagnozy.Post;


Вообще не рекомендую обращаться по индексу поля - могут быть странности
Лучше так:
Код: Выделить всё
DM1.QueryDiagnozy.FieldByName('<Тут имя поля>').AsString:=

Или, что ещё лучше, в случае если запросы в компонентах не переписываются - то просто двойным щёлчком мыши по компоненте QueryDiagnozy открыть редактор полей, по правой кнопке мышки добавить поля и работать уже через эти объекты напрямую.

Spectr писал(а):DataSource.DataSet - нечто необъяснимое, но очень важное, ибо вот этот код у меня работает:

Это не магия - это ссылка на источник данных, который является мастером для текущего.
У вас она пустая - соответсвенно и ошибка обращения.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: External: SIGSEGV при обращении к БД через ZQuery

Сообщение Spectr » 27.01.2015 10:47:39

Спасибо огромное! Я совершенно забыл про свойства полей в Query! Оказалось, что по умолчанию у ZQuery - ReadOnly:=False, НО у его полей по умолчанию ReadOnly:=True!! :shock:
Из-за этого у меня вылезала ошибка " Readonly field cannot be assigned a value ", и скорее всего поэтому была ошибка SIGSEGV(так как я пытался обойти параметр ReadOnly).
3.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Spectr
незнакомец
 
Сообщения: 4
Зарегистрирован: 26.01.2015 09:50:49


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru