Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление картинок и других данных, ADO, Access, SQL 
V
    Опции темы
MacTep
Дата 9.10.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Мне нужно добавить в базу данных данные разных типов. Прочитал кучу всего на  форуме, но ответ, удовлетворяющий моей просьбе так и не нашел, поэтому и создал данную тему.
Вот мой код:
Код

      with frmMain.Main do
      begin
        Close;
        SQL.Clear;
        SQL.Text:=
          'INSERT INTO Main (NDisk, Image) '+
          'VALUES (:NDisk. :Image);';
        parameters.parseSQL(frmMain.Main.SQL.text, true);
        parameters[0].Value:=Edit3.Text;
        parameters[1].LoadFromFile(img,ftGraphic);
        ExecSQL;
      end
В переменной img у меня хранится путь к картинке. А надо бы сразу эту картинку брать из компонента Image. Что делать? Данный код не работает, вылезает ошибка о том, что нарушен синтаксис команды INSERT INTO. Пробовал убирать добавление картинки и все работает. Значит проблема именно во втором параменте. Надо как-то решить это... smile

Вот что я нашел приблизительно, хотя мне надо не на С а на Дельфи (но и это не проблема, проблема в том, что код не работает в моем случае):
Код

                TMemoryStream *IcoStream;
                __try
                {
                    IcoStream = new(TMemoryStream);
                    IcoStream->Clear();
                    try
                    {
                        Image1->Picture->Icon->SaveToStream(IcoStream);
                        Form1->ADOCmd->CommandText = "INSERT INTO icons (Name, Obj) VALUES(:nme, :ico)";
                        Form1->ADOCmd->Parameters->ParamByName(L"nme")->Value = sNameIcon.c_str();
                        Form1->ADOCmd->Parameters->ParamByName(L"ico")->LoadFromStream(IcoStream, ftGraphic);
                        Form1->ADOCmd->Execute();
                        Form1->LoadIconInCB();
                    }
                    catch (Exception &E)
                    {
                        MessageDlg(E.Message, mtError, TMsgDlgButtons() << mbOK, 0);
                    }
                }
                __finally
                {
                    delete IcoStream;
                }
            }
Данный код не работает, так как у меня не иконка, а картинка в формате gif, jpeg или bmp.

Подскажите, как решить эту проблему...

Это сообщение отредактировал(а) MacTep - 9.10.2006, 11:31


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Rodman
Дата 9.10.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(MacTep @  9.10.2006,  11:29 Найти цитируемый пост)
нарушен синтаксис команды INSERT INTO
 - это потому что у тебя между параметрами стоит точка... а должна запятая...

Код

SQL.Text:=
          'INSERT INTO Main (NDisk, Image) '+
          'VALUES (:NDisk, :Image);';



в остальном код вроде правильный, но параметр Image советую переименовать на типа Image1, я точно не знаю, но может быть это зарезервированное слово....  и во втором коде поменяй имена параметров и полей...

и что такое L в имени параметра
Код

 Form1->ADOCmd->Parameters->ParamByName(L"nme")->Value = sNameIcon.c_str();
 Form1->ADOCmd->Parameters->ParamByName(L"ico")->LoadFromStream(IcoStream, ftGraphic);


Добавлено @ 11:54 
и вот еще передача параметров вот такая должна быть...

Код

paramByName('NDisk').Value:=Edit3.Text;
paramByName('Image').Value:=LoadFromFile(img,ftGraphic);
ExecSQL();

PM MAIL WWW Skype GTalk YIM MSN   Вверх
MacTep
Дата 9.10.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Ты уверен, что передача параметров должна быть именно такой:
Код

paramByName('Image').Value:=LoadFromFile(img,ftGraphic);
У меня ошибка на это вылезает: Too many actual parameters. Так что это не верно.
И еще: второй код меня меньше всего волнует. Он не работает попросту. А вот изменил точку, на запятую (понятно, что это была просто описка), и все равно такая ошибка вылезает. Что же все-таки делать???


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
MacTep
Дата 11.10.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Люди, ну что, никто никогда не добавлял в базу данных картинки при помощи SQL запроса???


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Fedia
Дата 12.10.2006, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 3
Всего: 13



Цитата(MacTep @  11.10.2006,  22:40 Найти цитируемый пост)
Люди, ну что, никто никогда не добавлял в базу данных картинки при помощи SQL запроса???

У меня на БД MySql работает вот такой вариант (при условии, конечно, что поле NDisk-целочисленное, а поле Image типа BLOB):
Код

  //вставка рисунка из файла "C:\1.bmp"
  ZQ_2.Close;
  ZQ_2.Sql.Text:='INSERT INTO image (NDisk, Image) VALUES (:NDisk, :Image)';
  ZQ_2.ParamByName('NDisk').Value:=5;
  ZQ_2.ParamByName('Image').LoadFromFile('C:\1.bmp', ftGraphic);
  ZQ_2.ExecSql;

  //вставка рисунка, отображенного в компоненте Image1
  ZQ_2.Close;
  ZQ_2.Sql.Text:='INSERT INTO image (NDisk, Image) VALUES (:NDisk, :Image)';
  ZQ_2.ParamByName('NDisk').Value:=5;
  ZQ_2.ParamByName('Image').Assign(Image1.Picture);
  ZQ_2.ExecSql;

Если эти варианты у тебя не будут работать, то укажи типы полей твоей таблицы Main и полностью укажи содержание еррора (ошибки).


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Fedia
Дата 12.10.2006, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 3
Всего: 13



Цитата(MacTep @  9.10.2006,  11:29 Найти цитируемый пост)
Данный код не работает, вылезает ошибка о том, что нарушен синтаксис команды INSERT INTO

Тебе не повезло с полем Image, возможно это ключевое слово в Acsess. Вот рабочий вариант для DB Acsess: 
Код

  //вставка рисунка из файла "C:\1.bmp"
  qry1.Close;
  qry1.Sql.Text:='INSERT INTO [Image] (NDisk, [Image]) VALUES (:1, :2)';
  qry1.Parameters[0].Value:=5;
  qry1.Parameters[1].LoadFromFile('C:\1.bmp', ftGraphic);
  qry1.ExecSql;

  //вставка рисунка, отображенного в компоненте Image1
  qry1.Close;
  qry1.Sql.Text:='INSERT INTO [Image] (NDisk, [Image]) VALUES (:1, :2)';
  qry1.Parameters[0].Value:=5;
  qry1.Parameters[1].Assign(Image1.Picture);
  qry1.ExecSql;
, только имя таблицы замени.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
MacTep
Дата 13.10.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Ммм, народ! А поле в DB Access должно быть какого типа? У меня стоит "Поле объекта OLE". Это неверно? Или должно что-то другое быть, если я картинку собираюсь хранить?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Fedia
Дата 13.10.2006, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 3
Всего: 13



Цитата(MacTep @  13.10.2006,  00:08 Найти цитируемый пост)
 У меня стоит "Поле объекта OLE"

Тип поля задан правильно.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
MacTep
Дата 14.10.2006, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Fedia, все, я решил эту задачу с вашей помощью. Оказывается реально было задано поле с неверным именем. Идимо Image - какое-то зарезервированное поле. А сейчас исправил и все работает. smile Спасибо!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.