![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с кодировкой [D6, dBase, FoxPro]
DPetrovich © (2002-05-08 12:25:00)Пытаюсь подключить dbf-ку сформированную в 1C через ADO, но возникает проблема с кодировкой. Менял настройку CharSet в DBGrid - не помогает... Если кто сталкивался, подскажите, пожалуйста!
MONSTER (2002-05-08 14:01:00) [1]Ну что же теперь попробуем не через BDE!
MONSTER (2002-05-08 14:00:00) [2]YES!!!
Я его сделал! Не через ADO! Все нормально!
Ну!!! Ура!
MONSTER (2002-05-08 13:22:00) [3]Нет! Речь идет не о файлах экспорта! Нужно реалтайм!
Reindeer Moss Eater (2002-05-08 13:13:00) [4]Если речь идет о файлах экспорта, то попроси у 1C сохранять данные в DBase III.
А иначе изучай формат заголовка Dbase5
MONSTER (2002-05-08 13:10:00) [5]У меня нет! У 1С да! Dbase5!
Reindeer Moss Eater (2002-05-08 13:09:00) [6]Так и копай первоисточник, формат Dbase открыт, в отличие от парадокса.
Если байт = 0, исправь параметры в BDE админе. Либо у тебя версия dbase > 3
MONSTER (2002-05-08 13:09:00) [7]Ок! Вот за это спасибо. Есть над чем подумать! Хорошо, др. вопрос а разве Delphi работает не через BDE? СТОП! ODBC? Думаю........
MONSTER (2002-05-08 13:07:00) [8]Прикол в том, что 30-й байт у меня 0! СМ образец выше! а откуда ты взял это решение? Может стоит покопать первоисточник? Или ты и есть первоисточник?
Reindeer Moss Eater (2002-05-08 13:06:00) [9]При открытии файла Dbase BDE смотрит что написано в 30 байте заголовка. Если он не равен нулю, то BDE верит, что данные там лежат в той кодовой странице, что написано в заголовке.
Если байт нулевой, БДЕ считает что данные лежат в кодовой странице указанной для Dbase в системных параметрах.
Reindeer Moss Eater (2002-05-08 13:02:00) [10]
function DBaseLangPatch(const fName:string):boolean;
var H:Integer; MyArray:array[1..30] of Byte;
begin
Result:=False;
if not FileExists(fName) then Exit;
FillChar(MyArray,30,0);
try
try
H:=FileOpen(fName,fmOpenReadWrite or fmShareExclusive);
except
MessageDlg("Ошибка монопольного доступа к файлу",mtError,[mbCancel],0);
Exit;
end;
FileRead(H,MyArray,30);
if MyArray[1] >= $04 then
begin
Result:=True;
Exit;
end;
if MyArray[30] <> $0 then
begin
MyArray[30]:=$0;
FileSeek(H,0,0);
FileWrite(H,MyArray,30);
end;
Result:=True;
finally
FileClose(H);
end;
end;
MONSTER (2002-05-08 12:59:00) [11]Давай по-простому:
.f......A.......................ID......
или
03660508830000004102DC0000000000000000000000000000000000010000004944000000000000
Как должно быть???
(Это первые байты DBF-а)
Reindeer Moss Eater (2002-05-08 12:51:00) [12]Это просто тридцатый байт от начала файла.
Перед тем как это делать надо убедиться что первый байт < $4
Потому что в версиях выше третьей cp хранится по иному
MONSTER (2002-05-08 12:49:00) [13]Слышь, прикалываешься?
MONSTER (2002-05-08 12:44:00) [14]Reindeer Moss Eater
Если не в лом:
ICQ 150153967
MONSTER (2002-05-08 12:43:00) [15]ВОПРОС!
Как я могу вычленить заголовок, от "ТЕЛА"? Или это просто 30-й байт с начала файла????
Reindeer Moss Eater (2002-05-08 12:41:00) [16]В заголовке файла Дибейса конечно же
MONSTER (2002-05-08 12:40:00) [17]МЫСЛИ ВСЛУХ: все равно копию делать, я вручную попробовал, не получается! И потом "в заголовке" это где?
Reindeer Moss Eater (2002-05-08 12:37:00) [18]Можно точечным лазерным ударом в нужный магнитный домен на винте.
А можно и используя FileWrite
DPetrovich (2002-05-08 12:33:00) [19]Reindeer Moss Eater, каким образом?
MONSTER (2002-05-08 12:29:00) [20]Аналогично! Но я подсоединялся не через ADO. Лазил по ODBC. Программка DBCommander работает через BDE откравает как милая, без проблем! А в Delphi и SQL server-е зябры! Кто поможет решить, отблагодарю, сдам алгоритм движения документов в Бухгалтерии (по DBF-файлам) Как и что делают бухгалтера я не знаю.. :)