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

Вниз

Не открываются .dbf, пока не закрыта создавшая один из них   Найти похожие ветки 

 
Циркуль   (2007-09-25 17:29) [0]

<subj> программа

Собсно, есть некий датасет, который надо выгрузить в формате DBase.

 T := TTable.Create(nil);
 try
     T.TableName := AFileName;
     T.TableType := ttDBase;

     with TQuery.Create(nil) do
     try
       SQL.Text := "create table "" + T.TableName + "" (" + описания_столбцов + ")";
       ExecSQL;
     finally
       Free;
     end;

     T.Open;

     ADataSet.First;
     while not ADataSet.EOF do
     begin
       T.Append;
       CopyFields(ADataSet, T);
       T.Post;
       ADataSet.Next;
     end;

     T.Close;
 finally
   T.Free;
 end;

Все сохраняется, но созданный файл (да и ни один другой *.dbf) нельзя открыть (например DataBase Desctop"ом) пока не будет закрыта программа.
Выдает ошибку "cannot load driver".
Закрываем прогу - все *.dbf начинают без проблем открываться.

Может кто сталкивался с такой фигней ?


 
Циркуль   (2007-09-25 17:33) [1]

"FoxPro" чекнул случайно, MSSQL - оттуда и выдергиваются данные (тоже через BDE), которые сохраняем в dbf.


 
Desdechado ©   (2007-09-25 17:34) [2]

>  T.Open;
В каком режиме открываешь - монопольно?


 
Johnmen ©   (2007-09-25 17:37) [3]

Надо использовать TDatabase. Явным образом....


 
Циркуль   (2007-09-25 17:45) [4]


> В каком режиме открываешь - монопольно?

эээ.... никаких упоминаний о режиме доступа ни в запросе, создающем таблицу, ни в настройках TTable не нашел...


 
Desdechado ©   (2007-09-25 17:48) [5]

TTable.Exclusive to prevent other applications from accessing a Paradox or dBASE table while it is open in this application.


 
Германн ©   (2007-09-25 17:48) [6]


> никаких упоминаний о режиме доступа ни в запросе, создающем
> таблицу, ни в настройках TTable не нашел...
>

TTable.Exclusive


 
Циркуль   (2007-09-25 18:25) [7]

не Exclusive, судя по отладчику...


> Johnmen ©   (25.09.07 17:37) [3]
> Надо использовать TDatabase. Явным образом....


добавил использование TDataBase, настроил алиас в BDE

DB := TdataBase.Create(nil);
try
DB.AliasName = "ExportDBaseAlias";
DB.DataBaseName = "ExportDBase";
T := TTable.Create(nil);
try
    T.DataBaseName := DB.DataBaseName;
    T.TableName := AFileName;
    T.TableType := ttDBase;

    with TQuery.Create(nil) do
    try
      DataBaseName := DB.DataBaseName;
      SQL.Text := "create table "" + T.TableName + "" (" + описания_столбцов + ")";
      ExecSQL;
    finally
      Free;
    end;

    T.Open;

    ADataSet.First;
    while not ADataSet.EOF do
    begin
      T.Append;
      CopyFields(ADataSet, T);
      T.Post;
      ADataSet.Next;
    end;

    T.Close;
finally
  T.Free;
end;
finally
DB.Free
end;


не помогло :(


 
Anatoly Podgoretsky ©   (2007-09-25 19:38) [8]

Циркуль   (25.09.07 17:29)  

Что за винегред из навигационных компонент и SQL


 
sniknik ©   (2007-09-25 20:25) [9]

> Выдает ошибку "cannot load driver".
> ...
> Может кто сталкивался с такой фигней ?
бывает когда пытаешься одновременно работать с BDE и Jet-ом + исам использующий BDE... и они пытаются работать через одни и теже драйвера, с одной и той же папкой/базой.

выход либо работать всегда через чтото одно, либо установить jet-у параметр "использовать свои замены" (BDE=2)

ну а с ODBC ситуация еще хуже, эта "пятая нога" сама в свою очередь использует jet для локальных баз через его исамы, да еще и следя за своими копиями, т.е. тут в к невозможности работать параллельно с BDE/Jet добавляется еще невозможность работы с самим собой (вторым коннектом через ODBC).
проверить можно сделав пару простых программ/форм в которых всего лиш открыть по таблице в разных директориях. т.е. например с такой строкой подключения в одной
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=dBASE Files;DBQ=D:\DB;DefaultDir=D:\DB;DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;PageTimeout=5;"
и с такой в другой
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN=dBASE Files;DBQ=D:\DBF;DefaultDir=D:\DBF;DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;PageTimeout=5;"
на запуске второй должна появиться ошибка о проблеме загрузки драйверов.
или же у вас очень старый ODBC... (раньше он имел собственные драйвера а не "заглушки")


 
Циркуль   (2007-09-25 20:28) [10]


> Что за винегред из навигационных компонент и SQL


Вопрос имеет прямое отношение к проблеме или к "иделогии написания кода" ? Если первое, то, включив телепатор, нужно думать, что предлагается заменить использование TTable на выполнение нужного кол-ва "insert into ..."? Если второе - "все было написано до нас" :)


 
sniknik ©   (2007-09-25 20:31) [11]

> и следя
= не следя
обписался, смысл в общем в том что jet это как бы одно ядро сколько бы подключений не было (BDE тоже, но у него меньше одновременно открытых сессий ~8-12 до глюка), а ODBC для каждого подключения отдельную копию с подгрузкой драйверов делает и как следствие рушится (в этом случае с "исамными" подключениями) на втором...


 
Anatoly Podgoretsky ©   (2007-09-25 20:31) [12]

> Циркуль  (25.09.2007 20:28:10)  [10]

Возможно прямое, возможно это последствия этого.


 
Anatoly Podgoretsky ©   (2007-09-25 20:35) [13]

В данной солянке могут оказаться драйвера из трех технологий
BDE/JET/ODBC



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

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

Наверх




Память: 0.5 MB
Время: 0.023 c
15-1198671913
vajo
2007-12-26 15:25
2008.02.03
Win Vista Busines нормально работатет со SCSI дисками?


2-1200113814
Farel
2008-01-12 07:56
2008.02.03
MSWord


2-1200167272
Sonic90
2008-01-12 22:47
2008.02.03
ListBox и DrawText


15-1199139401
Nic
2008-01-01 01:16
2008.02.03
С новым годом, друзья!


15-1196883191
Rouse_
2007-12-05 22:33
2008.02.03
Традиционное предновогоднее ММР