сохранение данных в MySQL

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

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

сохранение данных в MySQL

Сообщение Elena » 29.05.2012 15:46:49

Всем, привет! сново нужна помощь.
Установлен локальный сервер MySQL, соединила через ZEOS с проектом, читает данные отменно!
При редактировании в проекте ничего необычного не происходит, но в базе после этого нет никаких изменений.
При удалении тоже самое, а при сохранении новых данных пишет вызван класс исключений "external sigsegv" и тоже, конечно, в базу ничего не пишет .

С базой соединяюсь так
Код: Выделить всё
ZConnection1.Connected:=False;
      ZConnection1.Database:= 'upak'; {replace this with the name of your database}
       ZConnection1.User:='root';
       ZConnection1.Password:='Igbkmrf';
       ZConnection1.HostName:='localhost';
       ZConnection1.Port:=3306;
      try
ZConnection1.Connected:=True;
except
   ShowMessage(' Не могу подключиться к базе данных');
   end;

   try
   ZQuery1.Connection:= ZConnection1;
   ZQuery1.Active:=false;
   ZQuery1.SQL.Clear;
   ZQuery1.sql.add('SET character_set_client='+#39+'cp1251'+#39+',character_set_connection='+#39+'cp1251'+#39+',character_set_results='+#39+'utf8'+#39+';');
   ZQuery1.ExecSQL;
   ZQuery1.SQL.Clear;
   ZQuery1.SQL.Text := 'select * from Upakovka order by Nazvanie;';
   ZQuery1.UpdateObject:=ZUpdateSQL1;
      ZUpdateSQL1.DeleteSQL.Text:='delete from Upakovka where ID=:ID';
      ZUpdateSQL1.ModifySQL.Text:='update Upakovka set Nazvanie=:Nazvanie, Material=:Material,stroenie_materiala=:stroenie_materiala, Procnost=:Procnost, Srok_razlog=:Srok_razlog, Cratnost_ispolzovania=:Cratnost_ispolzovania,';
      ZUpdateSQL1.ModifySQL.Text:= ZUpdateSQL1.ModifySQL.Text+ 'chislo_edinic=:Chislo_edinic,Nalichie_crishki=:Nalichie_crishki, Naznachenie=:Naznachenie, Funkcion_naznach=:Funkcion_naznach,FOTO=:FOTO,Opisanie=:Opisanie  where ID=:ID';
      ZUpdateSQL1.InsertSQL.Text:='insert into Upakovka (Nazvanie, Material, stroenie_materiala, Procnost, Srok_razlog, Cratnost_ispolzovania, Chislo_edinic, Nalichie_crishki, Naznachenie, Funkcion_naznach, FOTO, Opisanie)';
      ZUpdateSQL1.InsertSQL.Text:= ZUpdateSQL1.InsertSQL.Text+ ' VALUES (:Nazvanie, :Material,:stroenie_materiala, :Procnost, :Srok_razlog, :Cratnost_ispolzovania,:Chislo_edinic,:Nalichie_crishki, :Naznachenie, :Funkcion_naznach,:FOTO,:Opisanie)';
      ZQuery1.Open;
       except
   ShowMessage(' Ошибка при выполнении SQL запроса.');
   end;


Сохряняю изменения так.

Код: Выделить всё
SQLQuery1.Post;
       SQLQuery1.ApplyUpdates;


В чем тут дело?
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Re: сохранение данных в MySQL

Сообщение Little_Roo » 29.05.2012 17:00:01

Elena писал(а):Сохряняю изменения так.

Код: Выделить всё
SQLQuery1.Post;
SQLQuery1.ApplyUpdates;

В чем тут дело?

Для ZEOS свой ZQuery...
А для данного пользователя root права на запись, изменения, удаления ЕСТЬ???
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: сохранение данных в MySQL

Сообщение Elena » 29.05.2012 17:04:11

Ой перепутала.
Сохраняю так
Код: Выделить всё
Form1.ZQuery1.Post;
       Form1.ZQuery1.ApplyUpdates;


Добавлено спустя 6 минут 36 секунд:
Проверила, у root есть все возможные права.
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Re: сохранение данных в MySQL

Сообщение Little_Roo » 29.05.2012 17:23:37

А почему все сразу не ввести Ваш длинный текстовый SQL-код в ZUpdateSQL в соответствующие поля?

У ZConnection -
AutoCommit = true ?
TransactIsolationLevev = tiReadCommitted ?
AutoCommit = True ?

И, кстати, (меня за это уже пинали...но...работает) - вместо
Код: Выделить всё
ZQuery1.Open;
пробовать
Код: Выделить всё
ZQuery1.ExecSQL;

Да, я НЕ закрываю набор данных...правда у меня Птица 2.5 и виндуза...
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: сохранение данных в MySQL

Сообщение Elena » 29.05.2012 20:56:23

Если сделать
Код: Выделить всё
ZQuery1.ExecSQL;
, то вообще не выдает данные.

Little_Roo, спасибо, поменяло свойство Свойство AutoCommit и стало сохранять,но вот ошибку "external sigsegv" все еще выдает после сохранения новой записи.
Почему так происходит?
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Re: сохранение данных в MySQL

Сообщение Little_Roo » 29.05.2012 21:24:54

Код: Выделить всё
   ZQuery1.Active:=false;

Why?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: сохранение данных в MySQL

Сообщение Elena » 29.05.2012 21:28:10

да не знаю. просто так. Если это убрать, то тоже самое получается.
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Re: сохранение данных в MySQL

Сообщение Ism » 29.05.2012 21:45:07

external sigsegv

Серьезная ошибка программа обращается туда, куда не надо обращаться.
Такое может быть, если не создается объект, а только объявляется

Добавлено спустя 1 минуту 44 секунды:
Также надо выставить клиентскую кодировку в UTF8 в соединении
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: сохранение данных в MySQL

Сообщение Little_Roo » 29.05.2012 21:49:30

Вместо
Код: Выделить всё
ZConnection1.HostName:='localhost';

видимо нужно
Код: Выделить всё
ZConnection1.DataBase:='localhost:_путь к вашей базе_';

А почему Ваши SQL-строки не собрать воедино и не вбить в соответствующие свойства ZUpdateSQL ?
RefreshSQL должно быть пустое !!!! (проверено на себе)
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: сохранение данных в MySQL

Сообщение Elena » 30.05.2012 21:45:28

Большое всем спасибо, воспользовалась вашими советами и ошибки пропали.)

Теперь еще одна загвостка появилась. с картинками. Не могу записать картинку в базу.
Записываю так..
Код: Выделить всё
var
  MS: TMemoryStream;


Код: Выделить всё
procedure TForm2.BitBtn1Click(Sender: TObject);
begin

  If OpenPictureDialog1.Execute = true then
    begin
  MS:= TMemoryStream.Create
          image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
           image1.Picture.SaveToStream(MS);
           MS.Position:=0;
         TBlobField(form1.ZQuery1.FieldByName('FOTO')).LoadFromStream(MS);
     end;

end;

пока проект работает, все картинки сохряняются, а в базе все равно ничего.
Почему?
Последний раз редактировалось Elena 31.05.2012 03:36:06, всего редактировалось 1 раз.
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Re: сохранение данных в MySQL

Сообщение Ism » 31.05.2012 00:39:50

Поле должно быть в select запросе
Connection.Autocommit = true

Код: Выделить всё
Query.Edit 
TBlobField(form1.ZQuery1.FieldByName('FOTO')).LoadFromStream(MS);
Query.Post
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: сохранение данных в MySQL

Сообщение Elena » 31.05.2012 03:30:33

Перед тем, как записывать я делаю
Код: Выделить всё
Form1.ZQuery1.Insert;
или
Код: Выделить всё
Form1.ZQuery1.Edit;

А после
Код: Выделить всё
       Form1.ZQuery1.Post;
       Form1.ZQuery1.ApplyUpdates;

Он сохряняет теперь, но черный квадкат!(((((
Почему так?? Помогите, пожалуйста...
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Re: сохранение данных в MySQL

Сообщение Ism » 31.05.2012 15:21:12

Рисунки должны быть только в bmp , если другое , до нужны другие компоненты или преобразование

Об этом viewtopic.php?f=5&t=8098
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: сохранение данных в MySQL

Сообщение Elena » 31.05.2012 19:28:58

Переделала все!
Храню теперь в базе только пути.
Спасибо за советы, все рабоатет!
Elena
новенький
 
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru