powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с BLOB полем
10 сообщений из 10, страница 1 из 1
Помогите с BLOB полем
    #32545591
Здравствуйте!
Мне нужно добавить из Memo текст в поле BLOB.
У меня был обычный SQL на добавления записей в б.д.

strSQL5 = "INSERT INTO TDOCS ";
strSQL5 += "(TITLE, ANNOTATION, ANNOTATION_E)";
strSQL5 += "VALUES ";
strSQL5 += "(";
strSQL5 += "'" + Edit1->Text + "',";
strSQL5 += "'" + Memo1->Lines->Text + "',";
strSQL5 += "'" + Memo2->Lines->Text + "'";
strSQL5 += ");";
Query1->SQL->Clear();
Query1->SQL->Add( strSQL5 );
Query1->Close();
Query1->ExecSQL();

Потом я изменила поля ANNOTATION, ANNOTATION_E на BLOB SUB_TYPE 1.
Как мне теперь добавлять записи.

Подскажите пожалуйста, очень надо!!!!
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32545738
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Query1->SQL->Clear();
Query1->SQL->Add( strSQL5 );
Query1->Close();
Query1->ExecSQL();
Вот это очень смущает ;) Сначала очищаем, потом добавляем, потом закрываем, потом выполняем... Поставь закрытие на первое место.

А запрос сделай таким:
Код: plaintext
1.
insert into tdocs (title, annotation, annotation_e)
values (:title, :annotation, :annotation)

Дальше:
Код: plaintext
1.
2.
3.
4.
Query1->Close;
Query1->ParamByName('title')->Value := Edit1->Text;
Query1->ParamByName('annotation')->Value := Memo1->Lines->Text;
Query1->ParamByName('annotation_e')->Value := Memo2->Lines->Text;
Query1->ExecSQL;
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32546573
Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, не по Интербейзу, но все-таки замечу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
strSQL5 = "INSERT INTO TDOCS ";
strSQL5 += "(TITLE, ANNOTATION, ANNOTATION_E)";
strSQL5 += "VALUES ";
strSQL5 += "(";
strSQL5 += "'" + Edit1->Text + "',";
strSQL5 += "'" + Memo1->Lines->Text + "',";
strSQL5 += "'" + Memo2->Lines->Text + "'"; 
strSQL5 += ");";
Query1->SQL->Clear();
Query1->SQL->Add( strSQL5 );
Query1->Close();
Query1->ExecSQL();

Это, думаю, проще было бы записать так:

Код: plaintext
1.
2.
3.
4.
5.
Query1->Close();
Query1->SQL->Text = "INSERT INTO TDOCS (TITLE, ANNOTATION, ANNOTATION_E) VALUES ('"
  +Edit1->Text+"', '"
  +Memo1->Lines->Text+"', '"+
  +Memo2->Lines->Text+"')";
Query1->ExecSQL();

--
LET`S ROCK!
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32546597
Спасибо за комментарии.
Но у меня вопрос, как быть с полем типа BLOB.
Как мне из Memo, добавить данные в поле "ANNOTATION", имеющее тип Blob.
Подскажите, пожалуста!!!!!
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32546678
Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм... wadman , по-моему, все уже рассказал:
Попробую снова:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Query1->Close();
Query1->SQL->Text = "insert into tdocs (title, annotation, annotation_e) values (:title, :annotation, :annotation_e)"; 
// :title, :annotation, :annotation_e - параметры компонента Query1

// Теперь добавим значение этих параметров:
Query1->ParamByName("title")->Value = Edit1->Text;
Query1->ParamByName("annotation")->Value = Memo1->Lines->Text;
Query1->ParamByName("annotation_e")->Value = Memo2->Lines->Text;
// Выполняем скрипт:
Query1->ExecSQL();

Я даже приверил этот код

(Кстати, мне интересно, на какой смеси Билдера и Дельфы написан был пример wadman `a..

--
LET`S ROCK!
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32546717
Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно еще так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  Query1->Close();
  Query1->SQL->Text = "select * from TDOCS";
  Query1->Open();
  Query1->Append();
  Query1->FieldByName("TITLE")->AsString = Edit1->Text;
  // С Блоб-полями можно работать и так:
  Query1->FieldByName("ANNOTATION")->AsString = Memo1->Lines->Text;
  Query1->FieldByName("ANNOTATION_E")->AsString = Memo2->Lines->Text;
  Query1->Post();

Но! Тогда к Query1 надо присобачить UpdateSQL . А это уже другая история...

--
LET`S ROCK!
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32546834
Bezum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдя, у согрупников даже темы рядом на форуме располагаются... Ну тебе же понятно разъяснили... Берешь и вставляешь текст в запрос на добавление. Тока не забудь в нем поменять " на \" и ' на \'. А то оно матернется когда встретит " или '.
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32546930
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scream, понятия не имею ;) я просто точку заменил на ->, что-бы было более понятно.
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32547033
Scream
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanScream, понятия не имею ;) я просто точку заменил на ->, что-бы было более понятно.

Класс!!! Супер! Честно, хорошее настроение мне до конца дня ты обеспечил
Я так и думал, что ты - дельфист.
Кстати, если вместо := поставить = и методам Close и ExecSQL дописать () , то твой код будет отлично работать. VCL для всех един...

--
LET`S ROCK!
...
Рейтинг: 0 / 0
Помогите с BLOB полем
    #32547646
Ребят спасибо!
У меня вся проблема заключалась в BLOB полях. Если добвлять обычную запись, то всё хорошо, но когда в BLOB поле, то он ругается.

Нужно было сделать так:
Добавление записи:
TMemoryStream* pms = new TMemoryStream();
Memo1->Lines->SaveToStream(pms);
TMemoryStream* pms1 = new TMemoryStream();
Memo2->Lines->SaveToStream(pms1);

Query1->SQL->Clear();
Query1->SQL->Text = "insert into tdocs (TITLE, ANNOTATION, ANNOTATION_E) values (:TITLE, :TITLE_E, :ANNOTATION, :ANNOTATION_E)";

Query1->ParamByName("TITLE")->Value = Edit1->Text;
Query1->ParamByName("ANNOTATION")->LoadFromStream(pms, ftBlob);
Query1->ParamByName("ANNOTATION_E")->LoadFromStream(pms1, ftBlob);
Query1->ExecSQL();

delete pms;
delete pms1;

Изменение записи:
TMemoryStream* pms = new TMemoryStream();
Memo1->Lines->SaveToStream(pms);
TMemoryStream* pms1 = new TMemoryStream();
Memo2->Lines->SaveToStream(pms1);

Query1->SQL->Clear();
Query1->SQL->Text = "update TDOCS SET TITLE=:TITLE, ANNOTATION=:ANNOTATION, ANNOTATION_E=:ANNOTATION_E, where ID_DOCS=:OLD_ID_DOCS";

Query1->ParamByName("TITLE")->Value = Edit1->Text;
Query1->ParamByName("TITLE_E")->Value = Edit2->Text;
Query1->ParamByName("ANNOTATION")->LoadFromStream(pms, ftBlob);
Query1->ParamByName("ANNOTATION_E")->LoadFromStream(pms1, ftBlob);
Query1->ParamByName("OLD_ID_DOCS")->Value = Query_Doc->FieldByName("ID_DOCS")->AsString;

Query1->ExecSQL();

delete pms;
delete pms1;
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите с BLOB полем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]