Форум: "Базы";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];
ВнизНе открываются .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, настроил алиас в BDEDB := 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c