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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.06 c
8-1077452218
Cerber
2004-02-22 15:16
2004.05.16
OpenGL


1-1083311423
M@X
2004-04-30 11:50
2004.05.16
Помогите перевести на паскаль с Си


3-1082561117
mur
2004-04-21 19:25
2004.05.16
ещё раз про поиск через SQL


6-1080046976
Джек
2004-03-23 16:02
2004.05.16
Как отследить окно ошибки в TWebBrowser?


1-1083238862
Litr
2004-04-29 15:41
2004.05.16
TabSheet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский