Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Aleksandr. ©   (2004-06-18 13:45:00) 

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


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

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


sniknik   (2004-06-18 16:37:00) [2]

> А как Вы представляете "простой" запрос?
примерно так
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 16:02:00) [3]

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

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


sniknik   (2004-06-18 15:44:00) [4]

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

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


Digitman   (2004-06-18 15:32:00) [5]

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

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


bushmen   (2004-06-18 15:30:00) [6]

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

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


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

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

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


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

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 вылезает куча ошибок, начинающихся с "Недостаточно памяти для операции...".


Skyle   (2004-06-18 15:14:00) [9]

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


sniknik   (2004-06-18 14:58:00) [10]

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


bushmen   (2004-06-18 14:52:00) [11]

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

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


sniknik   (2004-06-18 14:46:00) [12]

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


Vlad   (2004-06-18 14:44:00) [13]


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


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

EConvertError: Cannot convert ADOTable to BDETable
:-)


bushmen   (2004-06-18 13:49:00) [14]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо