Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Вниз

Запись текста из memo в blob поле   Найти похожие ветки 

 
Cawa ©   (2006-06-17 15:50) [0]

Помогите пожалуйста, неудается записать данные в blob поле!!!
Пытаюсь записать следующим образом:

 Stream:=NewMemoryStream;
 for i:=0 to Memo1.Count-1 do
   Stream.WriteStr(memo1.Items[i]);
 UserQuery.text:="update Users set "REPSW" = ?DATA where "ID" = ?ID";
 UserQuery.ParamByName["id"].AsInteger:=id;
 UserQuery.ParamByName["Data"].AsQUAD:=UserQuery.Stream2Blob(Stream);
 if UserTransact.Active then UserTransact.Commit else UserTransact.StartTransaction;
 if UserQuery.Execute then
 begin
   UserTransact.Commit;
 end;
 Stream.Free;


выдается ошибка incorrect values within SQLDA structure.

Что я делаю не так?


 
ECM ©   (2006-06-17 18:25) [1]

Во первых указывайте в вопросе о чем речь. Я только после анализа кода "смог угадать". Что речь идёт о KOL и KOLIB в частности.:)
На месте модератора я бы уже давно перебросил этот вопрос в конференцию "Базы" (Он то мог и не догадаться).
Попробуйте перед присвоением значени первого параметра (но после присваивания текста запроса) выполнить UserQuery.Prepare.
Мне кажется я устранял этот баг ... Какая версия KOLIB у Вас?
Если 1.13 и эффект после добавки Prepare останется - значит баг. Буду смотреть...:(


 
Cawa ©   (2006-06-18 08:37) [2]

UserQuery.Prepare не помогает, а весия kolibdb (если верить надписи в kolibdb.pas) 1.10. Версию 1.13 не нашел!!!

Во первых указывайте в вопросе о чем речь. Я только после анализа кода "смог угадать". Что речь идёт о KOL и KOLIB в частности.:)
Тут ты прав, мой касяк. Раньше все время указывал.


 
ECM ©   (2006-06-18 10:58) [3]

Да, похоже, я что-то напутал с обновлениями
попробуйте
http://www.kolnmck.ru/files/components/db/kolib.zip
залил последнюю версию - но имхо косяк останется... :(
Вышлите мне на мыло (в анкете) структуру таблицы (названия полей + типы)
Завтра попробую разобраться (если буду в состоянии :) )...  Сегодня - ну ни как :)


 
Cawa ©   (2006-06-18 11:40) [4]

Скачал KolIB.zip, но вот распакавался он не полностью - winrar3.0 кричит архив поврежден!!!


 
Cawa ©   (2006-06-18 11:42) [5]

winrar3.0 - точнее WinRAR 3.30


 
ECM ©   (2006-06-18 12:28) [6]

Перезалил. Но всё равно

> Вышлите мне на мыло (в анкете) структуру таблицы (названия
> полей + типы)


 
ECM ©   (2006-06-20 18:52) [7]

Обновил до 1.14
Исправил ошибку при установке BLOB-параметров


 
Cawa ©   (2006-06-23 10:08) [8]

Загрузил версию 1.14, все работает |-)
Огромное тебе спасибо ECM!!!!!!!!!!!!!!!!


 
Cawa ©   (2006-06-23 15:20) [9]

Хотя я рано обрадовался при чтении, memo остается пустым .:(
Судя по всему он в blob поле не записал ничего (либо я как то неправильно читаю от туда)!?

запись:
 Stream:=NewMemoryStream;
 for i:=0 to Memo1.Count-1 do
   Stream.WriteStrZ(memo1.Items[i]);
 UserTransact.StartTransaction;
 UserQuery.text:="update Users set "REPSW" = ?DATA where "ID" = ?ID";
 UserQuery.Prepare;
 UserQuery.ParamByName["id"].AsInteger:=id;
 UserQuery.ParamByName["Data"].AsQUAD:=UserQuery.Stream2Blob(Stream);
 if UserQuery.Execute then
 begin
   UserTransact.Commit;
 end;
 Stream.Free;


чтение:
 Stream:=NewMemoryStream;
 memo1.Clear;
 if UserQuery.FieldByname["RePSW"]<>nil then
   UserQuery.Blob2Stream(UserQuery.FieldByname["RePSW"].AsQUAD,Stream);
 Stream.Seek(0,spBegin);
 while Stream.Position<Stream.Size do
   memo1.Add(Stream.ReadStrZ+#13+#10);
 Stream.Free;


 
ECM ©   (2006-06-23 15:48) [10]

> Судя по всему он в blob поле не записал ничего

А проверить каким нибудь сторонним средством?
Например IBExpert...

> либо я как то неправильно читаю от туда

К сожалению из приведенного Вами куска не видно где и как вы выполняете
выборку из базы (select). Т.е. UserQuery.Text при чтении...
Или Вы думаете, что он сам всё за Вас сделает :)
...
Проверьте, какое значение принимает поле RePSW, при чтении.
(Запишите его в тот же memo1, например, при помощи FieldByName["RePSW"].AsString). Должно быть нечто типа (Blob ID: 0x8300000003 )
Если будет (Blob ID: 0x000000000 ) - значит либо Вы не произвели выборку из базы (Execute с селектом), либо туда ничего не записалось при записи (Но это легко проверить тем же IBExpert - у меня он на версии 1.14 показывал что всё нормально и отображает содержимое текстового блоба)


 
ECM ©   (2006-06-23 16:02) [11]

P.S.
Запись Вы производите, правильно, только я бы записал это так:

...
UserTransact.StartTransaction;
UserQuery.text:="update Users set REPSW = ?DATA where ID = ?ID";
UserQuery.ParamByName["id"].AsInteger:=id;
UserQuery.ParamByName["Data"].AsQUAD:=UserQuery.Stream2Blob(Stream);
if UserQuery.Execute then
...


 
Cawa ©   (2006-06-23 16:28) [12]

прописал  FieldByName["RePSW"].AsString для blob полей выводит различные значения (Blob ID: 0x830000000d и т.п.), скачал IBExpert в нем поля отображаются заполнеными (листки с точечками), но данных в них нет(пусто во всех предложенных вариантов просмотра)!!!
Что тогда я делаю неправильно при записи (ведь значения блобов не null)?


 
ECM ©   (2006-06-23 18:51) [13]

> Что тогда я делаю неправильно при записи

Да, вроде, всё правильно...
У меня IBExpert показывает содержание блоба просто при наведении курсора
(хинт-окно вываливается) - и там всё то что я туда писал...:(
Вот на такой таболичке
SET SQL DIALECT 3;
SET NAMES WIN1251;
CREATE TABLE TESTTABLE (
   REPSW  BLOB SUB_TYPE 0 SEGMENT SIZE 80,
   ID     SMALLINT
);


 
Cawa ©   (2006-06-24 10:03) [14]

Так как я слабо знаю InterBase, то возможно я сейчас задам тупые вопросы.
У меня IBexpert пишет при подключении к базе (dialect 1) - что это значит?
Может это повлиять на запись в Blob? Игде можно найти инфу по SQL Dialect?


 
AndreyRus   (2006-06-24 10:29) [15]


> IBexpert пишет при подключении к базе (dialect 1) - что
> это значит?

Это один из вариантов (диалектов) SQL.

Может это повлиять на запись в Blob?
Наврядли.


> скачал IBExpert в нем поля отображаются заполнеными (листки
> с точечками), но данных в них нет.

Возможно, проблемы с кодировкой текста.


 
Cawa ©   (2006-06-24 10:43) [16]

2ECM можешь мне скинуть на почту небольшой пимер запись в blob поле данных и их чтение? Может тогда я пойму, что у меня не так!


 
ECM ©   (2006-06-24 11:41) [17]

Я думаю, что ответить здесь будет правильнее :)
Таблица из [13].
Запись:

var
 Stream: PStream;
begin
 Stream := NewMemoryStream();
 Stream.WriteStrZ(Memo1.Text);
 Stream.Seek(0,spBegin);
 IBQuery1.Text := "update TESTTABLE set REPSW = ?DATA where ID = ?ID";
 IBTransaction1.StartTransaction;
 IBQuery1.ParamByName["DATA"].AsQUAD := IBQuery1.Stream2Blob(Stream);
 IBQuery1.ParamByName["ID"].AsInteger := 1;
 if IBQuery1.Execute then  IBTransaction1.Commit
 else IBTransaction1.Rollback;


Чтение:
var
 Stream: PStream;
begin
 Stream := NewMemoryStream();
 IBQuery1.Text := "select * from TESTTABLE where ID = ?ID";
 IBQuery1.ParamByName["ID"].AsInteger := 1;
 IBTransaction1.StartTransaction;
 IBQuery1.Open;
 IBQuery1.Blob2Stream(IBQuery1.FieldByName["REPSW"].AsQUAD,Stream);
 IBTransaction1.Commit;
 Stream.Seek(0,spBegin);
 Memo1.Text := Stream.ReadStrZ;


 
ECM ©   (2006-06-24 11:53) [18]

З.Ы.
Естесственно в конце каждого из кусков надо вызвать

Stream.Free
:)


 
Cawa ©   (2006-06-24 12:18) [19]

Так как у меня не было перехода на начало потока Stream.Seek(0,spBegin); ,то ничего и не записывалось (Я наивно думал что IBQuery1.Stream2Blob(Stream) запишет поток от начало до конца).
Теперь все работат, спасибо еще раз!!!



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.038 c
15-1171614345
KSergey
2007-02-16 11:25
2007.03.18
Проверка перфоратора


2-1172484389
Cara
2007-02-26 13:06
2007.03.18
Фильтр.


1-1169658454
Ламерюга
2007-01-24 20:07
2007.03.18
Можно ли получить TForm из Handle


15-1172092407
Gero
2007-02-22 00:13
2007.03.18
Креативные часы от Лебедева


15-1172218979
_БарЛог
2007-02-23 11:22
2007.03.18
Переходник 4pin -> 6 pin





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский