|
Вопрос # 3 297/ вопрос открыт / |
|
Здравствуйте!
К сожалению самостоятельно решения вопроса не нашел, почему и прошу вашей помощи.
Вопрос состоит в следующем:
Создаваемый файла dbf sql запросом нормально и всеми приложениями винды узнавался, но при чтении
старыми досовскими приложениями они категорически отказывались его признавать!
Вот функция создающая файл.
в имени файла фигурирует расширение dbf, что и является определением типа файла.
Спасибо за ответ!
Приложение: Переключить в обычный режим- function CreateTable_DBF(TabName, TabStruct, TabIDX: string): boolean;
- var qyTable: TQuery;
- begin
- result := true;
- qyTable := TQuery.Create(nil);
- with qyTable do
- try
- try
- SQL.Clear;
- SQL.Add(CreateTab + TabName+' ( '+TabStruct+' )');
- qyTable.Prepare;
- ExecSQL;
- except
- result := false;
- end;
- finally
- Close;
- end;
- end;
 |
Вопрос задал: Squil (статус: Посетитель)
Вопрос отправлен: 17 октября 2009, 12:40
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 7; последнее сообщение — 20 октября 2009, 19:25; участников в обсуждении: 5.
|
Егор (статус: 10-ый класс), 17 октября 2009, 12:50 [#1]:
Цитата (Squil):
старыми досовскими приложениями
может, это и есть ответ?
а ещё бы посмотреть, что же передаётся функции на вход.
и зачем нужен TabIDX
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 17 октября 2009, 12:51 [#2]:
В файле главное не расширение, а ФОРМАТ. Если ты у файла exe изменишь расширение на doc, то он станет вордовским документом?
Формат файлов DBF для досовских программ (например, FoxPro) совсем другой.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
vladrvv (статус: Посетитель), 18 октября 2009, 07:20 [#3]:
Информация о формате файла dbf содержится в его заголовке
|
|
Вадим К (статус: Академик), 18 октября 2009, 19:11 [#4]:
Проблема не в формате, а в кодировке строки. Под виндовсом строки обычно кодируются в cp1251, а под досом - 866. Вот и вся загвоздка.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Squil (статус: Посетитель), 19 октября 2009, 19:55 [#5]:
Егор, суть-то что необходимо формирование именно для старых прог.
min@y, все понятно что экзешник не получишь, формат определяетя по умолчанию если тип не указн, в противном случае в соответствии с расширением.
Вадим К, да, согласен, что возможно кодировка, но...
вот код что не дал вообще никакого иного результата.
|
|
Squil (статус: Посетитель), 19 октября 2009, 20:14 [#6]:
function CreateTable_DBF(TabName, TabStruct, TabIDX: string): boolean;
var qyTable: TQuery;
database1: TDatabase;
AliasParams: TStringList;
begin
result := true;
with Session do
begin
AliasParams := TStringList.Create;
ConfigMode := cmSession;
try
DBIAddAlias(nil,'TEMPDB', szDBase ,
PChAR('Path: '+ extractfilepath(TabName)+
' Driver: Microsoft dBase Driver (*.dbf)'+
' LangDriver: dBASE RUS cp866'), false);
finally
ConfigMode := cmAll;
AliasParams.Free;
end;
end;
with database1 do
begin
database1:=TDatabase.Create(Nil);
databasename:='BaseDBF';
LoginPrompt := False;
Params.Values['PATH'] :=extractfilepath(TabName);
DriverName:='Microsoft FoxPro Driver (*.dbf)';
AliasName:='TEMPDB';
end;
qyTable := TQuery.Create(nil);
qyTable.paramcheck := false;
qyTable.DatabaseName := 'BaseDBF';
qyTable.SQL.Clear;
with qyTable do
try
try
SQL.Clear;
SQL.Add(CreateTab + TabName+' ( '+TabStruct+' )');
qyTable.Prepare;
ExecSQL;
except
result := false;
end;
finally
Close;
end;
end;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|