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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.042 c
14-1088255685
Nelud
2004-06-26 17:14
2004.07.18
А что бы такое почитать?


3-1087964746
vlgrig1961
2004-06-23 08:25
2004.07.18
Помогите составить запрос на Oracle


3-1088133459
RDen
2004-06-25 07:17
2004.07.18
Фильтрация у таблицы с условием частичного совпадения.


6-1084815242
Iks
2004-05-17 21:34
2004.07.18
Как узнать какая ОС стоит на


3-1087973575
student2
2004-06-23 10:52
2004.07.18
Поиск серверов Oracle