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

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

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

Ответить
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

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

Сообщение Elena »

Всем, привет! сново нужна помощь.
Установлен локальный сервер 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;


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

Сообщение Little_Roo »

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

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

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

Для ZEOS свой ZQuery...
А для данного пользователя root права на запись, изменения, удаления ЕСТЬ???
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Сообщение Elena »

Ой перепутала.
Сохраняю так

Код: Выделить всё

Form1.ZQuery1.Post;
       Form1.ZQuery1.ApplyUpdates;


Добавлено спустя 6 минут 36 секунд:
Проверила, у root есть все возможные права.
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

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

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

И, кстати, (меня за это уже пинали...но...работает) - вместо

Код: Выделить всё

ZQuery1.Open;
пробовать

Код: Выделить всё

ZQuery1.ExecSQL;

Да, я НЕ закрываю набор данных...правда у меня Птица 2.5 и виндуза...
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Сообщение Elena »

Если сделать

Код: Выделить всё

ZQuery1.ExecSQL;
, то вообще не выдает данные.

Little_Roo, спасибо, поменяло свойство Свойство AutoCommit и стало сохранять,но вот ошибку "external sigsegv" все еще выдает после сохранения новой записи.
Почему так происходит?
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

Код: Выделить всё

   ZQuery1.Active:=false;

Why?
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Сообщение Elena »

да не знаю. просто так. Если это убрать, то тоже самое получается.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

external sigsegv

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

Добавлено спустя 1 минуту 44 секунды:
Также надо выставить клиентскую кодировку в UTF8 в соединении
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

Вместо

Код: Выделить всё

ZConnection1.HostName:='localhost';

видимо нужно

Код: Выделить всё

ZConnection1.DataBase:='localhost:_путь к вашей базе_';

А почему Ваши SQL-строки не собрать воедино и не вбить в соответствующие свойства ZUpdateSQL ?
RefreshSQL должно быть пустое !!!! (проверено на себе)
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Сообщение Elena »

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

Теперь еще одна загвостка появилась. с картинками. Не могу записать картинку в базу.
Записываю так..

Код: Выделить всё

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 раз.
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

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

Код: Выделить всё

Query.Edit  
TBlobField(form1.ZQuery1.FieldByName('FOTO')).LoadFromStream(MS);
Query.Post
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Сообщение Elena »

Перед тем, как записывать я делаю

Код: Выделить всё

 Form1.ZQuery1.Insert;
или

Код: Выделить всё

 Form1.ZQuery1.Edit; 

А после

Код: Выделить всё

       Form1.ZQuery1.Post;
       Form1.ZQuery1.ApplyUpdates;

Он сохряняет теперь, но черный квадкат!(((((
Почему так?? Помогите, пожалуйста...
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

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

Об этом viewtopic.php?f=5&t=8098
Elena
новенький
Сообщения: 29
Зарегистрирован: 02.05.2012 20:35:37

Сообщение Elena »

Переделала все!
Храню теперь в базе только пути.
Спасибо за советы, все рабоатет!
Ответить