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

Вниз

Силов моих больше нету! Не хотят работать многопоточные таблицы!   Найти похожие ветки 

 
Aleksandr.   (2004-06-18 13:45) [0]

Скажите, люди, есть какие компоненты или статьи на тему конвертации ADO-таблиц в БДЕ-таблицы в многопоточном режиме? Какие-то безумные ошибки все время вылетают, зависы, памяти на что-то не хватает...


 
bushmen ©   (2004-06-18 13:49) [1]

Что такое ADO-таблицы и BDE-таблицы? И как ты их конвертируешь? Хорошо бы код привести и ошибки, которые вылетают :))))


 
Vlad ©   (2004-06-18 14:44) [2]


> bushmen ©   (18.06.04 13:49) [1]


> ? Хорошо бы код привести и ошибки, которые вылетают :))))

EConvertError: Cannot convert ADOTable to BDETable
:-)


 
sniknik ©   (2004-06-18 14:46) [3]

а мне бы хотелось посмотреть на "многопоточные таблицы", это же новое слово в базах данных. ;)


 
bushmen ©   (2004-06-18 14:52) [4]

>sniknik ©   (18.06.04 14:46) [3]

Там было написано "многопоточный режим"


 
sniknik ©   (2004-06-18 14:58) [5]

bushmen ©   (18.06.04 14:52) [4]
в заголовке.


 
Skyle ©   (2004-06-18 15:14) [6]

Интересно, а конвертируются многопоточные таблицы или их не менее многопоточное содержимое? ;-)


 
Aleksandr.   (2004-06-18 15:17) [7]

sniknik ©  : "многопоточные таблицы" для краткости, потому как в САБЖ не слишком влезает. Не придирайтесь по мелочам. Код:


// код метода в потока, выполняющего создание таблицы,
// FQuery - TADOQuery, FTable - TTable
var
 bActive : boolean;
 i  : integer;
 FT  : TFieldType;
begin
 try
   bActive:=FQuery.Active;
   FQuery.Open;
   FQuery.FieldDefs.Update;
   if Assigned(FTable.FieldDefs) then
     FTable.FieldDefs.Clear;
   if Assigned(FTable.IndexDefs) then
     FTable.IndexDefs.Clear;
   FTable.StoreDefs:=true;
   for i:=0 to FQuery.FieldDefs.Count-1 do begin
     FT:=FQuery.FieldDefs[i].DataType;
     if (FT IN [ftString,ftWideString]) AND (FQuery.FieldDefs[i].Size>255) then
       FT:=ftMemo; // есть у нас varchar(8000), трактуемый как ftString
     FTable.FieldDefs.Add(FQuery.FieldDefs[i].Name,FT,0,FQuery.FieldDefs[i].Required)
     end
   end;
   FTable.CreateTable;
   if FAddIndex then begin
     FTable.Exclusive:=true;
     try
       case FIndexCount of
         1 : FTable.AddIndex("",FQuery.FieldDefs[0].Name,[ixPrimary]);
         2 : FTable.AddIndex("",FQuery.FieldDefs[0].Name+";"+FQuery.FieldDefs[1].Name,[ixPrimary]);
        end
       finally
         FTable.Exclusive:=false
       end
     end;
   FQuery.Active:=bActive
 except
   on E:Exception do
     FErrorStr:=+E.Message
 end
end;

А Execute потока совсем прост:

begin
   try
     Sleep(0);
     CreatePXTableFromADO
   finally
     SetEvent(FEvent) // это установить флажок, что работу закончил
   end
end


Ну и на CreateTable вылезает куча ошибок, начинающихся с "Недостаточно памяти для операции...".


 
Aleksandr.   (2004-06-18 15:28) [8]

Сорри, пока комментарии чистил, удалил:

if FT IN NullSizeTypeSet then
   FTable.FieldDefs.Add(FQuery.FieldDefs[i].Name,FT,0,FQuery.FieldDefs[i].Required)
else
   FTable.FieldDefs.Add(FQuery.FieldDefs[i].Name,FT,FQuery.FieldDefs[i].Size,FQuery.FieldDefs[i].Required)

и

FErrorStr:="Error in create table: "+E.Message


 
bushmen ©   (2004-06-18 15:30) [9]

>sniknik ©   (18.06.04 14:58) [5]

Тогда это вершина мастерства просто! :)


 
Digitman ©   (2004-06-18 15:32) [10]

объект TTable должен быть индивидуален для каждого код.потока

объекты TDatabase и TSession, на которые ссылается объект TTable, так же должны быть индивидуальны для каждого код.потока


 
sniknik ©   (2004-06-18 15:44) [11]

> Не придирайтесь по мелочам. Код:
не буду, в обмен на инфу о типах исходной и получаемой таблицы.

просто не пойму зачем такие сложности вместо простого запроса, может движок их не позволяет?


 
Aleksandr.   (2004-06-18 16:02) [12]

Digitman ©  : Компоненты TSession и TTable индивидуальны для каждого потока, компонента TDataBase там нет, потому как при попытке работать с TTable через TDataBase.DataBaseName вылетает ошибка, что такой уже есть (папка у всех одинаковая). Главный напряг, как я подозреваю, из-за того, что для 59 потоков слишком много получается объектов.

sniknik ©  : А как Вы представляете "простой" запрос? Сделать Create Table - то же самое - "Insufficient memory for this operation", поэтому роли не играет. А вручную конвертация - я там в коде указал причину - на MS SQL в таблицах есть несоответствия типов полей с парадоксовыми.


 
sniknik ©   (2004-06-18 16:37) [13]

> А как Вы представляете "простой" запрос?
примерно так
INSERT INTO OpenDataSource("Microsoft.Jet.OLEDB.4.0", "Data Source="D:\";User ID=Admin;Password=;Extended properties=Paradox 7.x")...ParadoxTable
SELECT * FROM MSSQLTable

> Сделать Create Table - то же самое - "Insufficient memory for this operation", поэтому роли не играет.
см. Digitman ©   (18.06.04 15:32) [10]
+ насколько помню с BDE гдето 10-12 сессий можно создать на одной машине, (запусти любую программу которая использует BDE и всего лиш открывает 1 таблицу, пусть пустую, на одной машине 15раз, уверен не получится), для смены этого дефаулта надо чтото в настройках править.

> А вручную конвертация - я там в коде указал причину - на MS SQL в таблицах есть несоответствия типов полей с парадоксовыми.
чегото я до [12] поста и слов то таких не видел MS SQL, Paradox, ...
если знаеш причину зачем спрашиваеш? (только вряд ли она в этом, мемо поля в парадоксе есть, точно тебе говорю... ;)


 
Aleksandr.   (2004-06-18 17:21) [14]

sniknik ©: По поводу OpenDataSource("Microsoft.Jet.OLEDB.4.0"...
- не работает это у меня, с самого начала пытался, чего не хватает, не знаю.
Цитирую себя: "у нас есть varchar(8000), трактуемый как ftString" - при обращении к полю, в MS SQL объявленному как varchar(8000), а такое приходится делать для триггеров, они с типом Text не работают - Делфи при обращении к такому полю очень часто считает его ftString с размером 8000, а для парадокса оно может быть только ftMemo.



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

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

Наверх





Память: 0.49 MB
Время: 0.033 c
4-1086685199
MU
2004-06-08 12:59
2004.07.18
Информация о ресурсах системы


3-1087896834
stas
2004-06-22 13:33
2004.07.18
AdoConnection и процессы на сервере


1-1089039778
serg128
2004-07-05 19:02
2004.07.18
Как получить код клавиши на клавиатуре?


3-1087568360
denis24
2004-06-18 18:19
2004.07.18
Работа с колонками dbgrid


14-1088400568
Ig
2004-06-28 09:29
2004.07.18
Работа с Rave Reports!??





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