Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Копирование таблицы   Найти похожие ветки 

 
Demiurg   (2004-04-20 10:13) [0]

Копирую таблицу из одной базы в другую. В одной записи этой таблицы есть очень длинное текстовое поле. И на этой записи вылетает ексепшн с сообщением что-то типа "Invalid BLOB hanlde". Походу такая длинная строка как blob рассматривается. Прбовал копировать разными способами - то же самое... Что это может быть и как лечить? Помогите, плиз.
 Да, база InterBase. К исходной таблице обращаюсь через BDE, к результирующей напрямую.


 
Ega23 ©   (2004-04-20 10:15) [1]

Blob Size у алиаса чему равен?


 
Demiurg   (2004-04-20 10:39) [2]

По-умолчанию 32. Blob to cash 64. Только что поэкспериментировал с ними в большую сторону - то же самое... Может уменьшить их? :)


 
Соловьев ©   (2004-04-20 10:42) [3]


> Demiurg   (20.04.04 10:13)  

через поток не пробовал?


 
Demiurg   (2004-04-20 10:44) [4]


> Соловьев ©   (20.04.04 10:42)

 Нет. А что, может помочь?


 
Ega23 ©   (2004-04-20 11:01) [5]

А очень длинное - это на сколько?


 
Demiurg   (2004-04-20 11:06) [6]


> А очень длинное - это на сколько?

 Ну больше 300 символов.


 
Ega23 ©   (2004-04-20 11:20) [7]

Но меньше, например,  1000?


 
Demiurg   (2004-04-20 11:30) [8]


> Но меньше, например,  1000?

Да. Больше 400 нету.


 
Demiurg   (2004-04-20 11:30) [9]


> Но меньше, например,  1000?

Да. Больше 400 нету.


 
Ega23 ©   (2004-04-20 11:40) [10]

Тогда дело не в BlobSize.
Код давай! :о)


 
Demiurg   (2004-04-20 11:49) [11]

Ну блин :)

 sDDicti это TIBSQL
 qSDicti - TQuery (указывает на исходную таблицу) в его SQL записано select * from dicti


   sDDicti.SQL.Clear;
   sDDicti.SQL.Add("insert into Dicti (ISN, PARISN, CHILD, CODEINT, CODE, SNAME, CODE2, CODE3, FNAME, FLTR,");
   sDDicti.SQL.Add("TNAME, CNAME, ACTIV, SYNISN, NCHILD, UPDATED, UPDATEDBY, DESCRIPTION)");
   sDDicti.SQL.Add("values");
   sDDicti.SQL.Add("(:ISN, :PARISN, :CHILD, :CODEINT, :CODE, :SNAME, :CODE2, :CODE3, :FNAME,");
   sDDicti.SQL.Add(":FLTR, :TNAME, :CNAME, :ACTIV, :SYNISN, :NCHILD, :UPDATED, :UPDATEDBY,");
   sDDicti.SQL.Add(":DESCRIPTION)");

   qSDicti.Close;
   qSDicti.Open;
   qSDicti.FetchAll;
   rc := qSDicti.RecordCount;
   qSDicti.First;

   while not qSDicti.Eof do
   begin
     for i := 0 to qSDicti.FieldCount - 1 do
     begin
       sDDicti.Params[i].Value := qSDicti.Fields[i].Value;
     end;
     sDDicti.ExecQuery;
     qSDicti.Next;
     Inc(rn);
     pr.Position := Round(100 * rn / rc);
     Application.ProcessMessages;
   end;
   dmMain.trAgency.CommitRetaining;


 Прбовал и другими способами копировать, например как в следующем куске:


   while not qSRate.Eof do
   begin
     qDRate.Append;
     for i := 0 to qSRate.FieldCount - 1 do
       qDRate.Fields[i].Assign(qSrate.Fields[i]);
     qDRate.Post;
     qSRate.Next;
     Inc(rn);
     pr.Position := Round(100 * rn / rc);
     Application.ProcessMessages;
   end;
   dmMain.trAgency.CommitRetaining;


 
Nikolay M. ©   (2004-04-20 11:55) [12]

Могу предположить, что ошибка вылетает на строках, длиннее 255-ти символов?


 
Demiurg   (2004-04-20 13:13) [13]


> Могу предположить, что ошибка вылетает на строках, длиннее
> 255-ти символов?

 Скорее всего. Но это не решает проблему :)


 
Курдль ©   (2004-04-20 13:20) [14]

А простым скриптом типа

insert into TABLE_1 (FIELD_1, ... FIELD_N)
select TABLE_2 (FIELD_1, ... FIELD_N)

не пробовали? :)


 
Johnmen ©   (2004-04-20 13:26) [15]

Примерно так для BLOB
ms:=TMemoryStream.Create;
TBlobField(qSDicti.Fields[x]).SaveToStream(ms);
sDDicti.Params[x].LoadFromStream(ms,0);
ms.Free;


 
Demiurg   (2004-04-20 13:38) [16]


> А простым скриптом типа

 Нет! Щас попробую. Мне такая идея что-то в голову не пришла... :)


 
Johnmen ©   (2004-04-20 13:40) [17]

>Щас попробую.

Не стОит пробовать. Не получится.
Вот если к обеим БД доступ через БДЕ, то можно...


 
Demiurg   (2004-04-20 13:41) [18]


> > А простым скриптом типа
>
>  Нет! Щас попробую. Мне такая идея что-то в голову не пришла...
> :)

 Хотя не... А как мне в одном скрипте использовать таблицы из разных баз? Через BDE имхо не получится...


 
Курдль ©   (2004-04-20 13:41) [19]


> Не стОит пробовать. Не получится.
> Вот если к обеим БД доступ через БДЕ, то можно...

А, я упустил пояснение, что таблицы в разных БД :(


 
Johnmen ©   (2004-04-20 13:47) [20]

http://213.248.61.64/cgi-bin/slovari/BBB.pl?length=&sence=&power=&url=http://www.delphimaster.ru/cgi-bin/forum.pl?id=108 2441582%26n=1

:)))


 
Demiurg   (2004-04-20 13:59) [21]


> Johnmen

 Ржалъ долго :)))


 
Demiurg   (2004-04-20 16:35) [22]


> Примерно так для BLOB
> ms:=TMemoryStream.Create;
> TBlobField(qSDicti.Fields[x]).SaveToStream(ms);
> sDDicti.Params[x].LoadFromStream(ms,0);
> ms.Free;

 Та же история :( Все BLOB поля нормально копируются в стрим,но если поле большое, то вылетает на SaveToStream с той же ошибкой...


 
Johnmen ©   (2004-04-20 16:58) [23]

>что-то типа "Invalid BLOB hanlde".

Возможно BLOBS TO CACHE надо побольше, т.е. >= кол-ву записей в qSDicti.


 
Ega23 ©   (2004-04-20 17:02) [24]

Johnmen ©   (20.04.04 16:58) [23]

Он же говорил, что максимально - около 300 символов.


 
Johnmen ©   (2004-04-20 17:04) [25]

>Ega23 ©   (20.04.04 17:02) [24]

А я говорю о количестве, а не качестве...:)


 
Demiurg   (2004-04-20 17:07) [26]


> Возможно BLOBS TO CACHE надо побольше, т.е. >= кол-ву записей
> в qSDicti.

 Может вылететь и в самом начале итерации, если запись с длинным description (это поле такое) попадется. Проверял.


 
Johnmen ©   (2004-04-20 17:09) [27]

Ну даже не знаю... Видимо проблемы с БДЕ...
Кстати, какого типа поле ?


 
Demiurg   (2004-04-20 17:29) [28]

Поле Blob (точнее VARCHAR 1024, но это же blob) :) На строках до 255 работает нормально, выше вылетает. Причем при любом обращении к полю. Я тоже сделал вывод, что BDE глючит. Решил, короче, получить через алиас путь к базе, и работать с данной таблице напрямую :)
Все огромное спасибо за ответы!


 
Johnmen ©   (2004-04-20 17:32) [29]

>точнее VARCHAR 1024, но это же blob

Нет, что ты !!!!!!!!!!


 
Demiurg   (2004-04-20 17:50) [30]

Однако IsBlob выдает true...


 
Johnmen ©   (2004-04-20 17:53) [31]

Это БДЕ тупит. А может версия старая...



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

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.025 c
14-1083141532
Marina_S
2004-04-28 12:38
2004.05.16
исходники JPEG


1-1083673093
Jiurasdfgfr
2004-05-04 16:18
2004.05.16
Как сделать програмно картинку части моей формы?


1-1083221846
Ega23
2004-04-29 10:57
2004.05.16
"Потрепаться" на "Основную" выбрасывает


1-1083321384
Vitaliy
2004-04-30 14:36
2004.05.16
Кто работал с компонентом PrintPreview?


7-1081025807
Kvic
2004-04-04 00:56
2004.05.16
Отслеживание запуска приложений