Форум: "Базы";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
ВнизПроблема с кодировкой Найти похожие ветки
← →
DPetrovich (2002-05-08 12:25) [0]Пытаюсь подключить dbf-ку сформированную в 1C через ADO, но возникает проблема с кодировкой. Менял настройку CharSet в DBGrid - не помогает... Если кто сталкивался, подскажите, пожалуйста!
← →
Reindeer Moss Eater (2002-05-08 12:28) [1]Обнули 30-й байт в заголовке dbf
← →
MONSTER (2002-05-08 12:29) [2]Аналогично! Но я подсоединялся не через ADO. Лазил по ODBC. Программка DBCommander работает через BDE откравает как милая, без проблем! А в Delphi и SQL server-е зябры! Кто поможет решить, отблагодарю, сдам алгоритм движения документов в Бухгалтерии (по DBF-файлам) Как и что делают бухгалтера я не знаю.. :)
← →
DPetrovich (2002-05-08 12:33) [3]Reindeer Moss Eater, каким образом?
← →
Reindeer Moss Eater (2002-05-08 12:37) [4]Можно точечным лазерным ударом в нужный магнитный домен на винте.
А можно и используя FileWrite
← →
MONSTER (2002-05-08 12:40) [5]МЫСЛИ ВСЛУХ: все равно копию делать, я вручную попробовал, не получается! И потом "в заголовке" это где?
← →
Reindeer Moss Eater (2002-05-08 12:41) [6]В заголовке файла Дибейса конечно же
← →
MONSTER (2002-05-08 12:43) [7]ВОПРОС!
Как я могу вычленить заголовок, от "ТЕЛА"? Или это просто 30-й байт с начала файла????
← →
MONSTER (2002-05-08 12:44) [8]Reindeer Moss Eater
Если не в лом:
ICQ 150153967
← →
MONSTER (2002-05-08 12:49) [9]Слышь, прикалываешься?
← →
Reindeer Moss Eater (2002-05-08 12:51) [10]Это просто тридцатый байт от начала файла.
Перед тем как это делать надо убедиться что первый байт < $4
Потому что в версиях выше третьей cp хранится по иному
← →
MONSTER (2002-05-08 12:59) [11]Давай по-простому:
.f......A.......................ID......
или
03660508830000004102DC0000000000000000000000000000000000010000004944000000000000
Как должно быть???
(Это первые байты DBF-а)
← →
Reindeer Moss Eater (2002-05-08 13:02) [12]
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;
← →
Reindeer Moss Eater (2002-05-08 13:06) [13]При открытии файла Dbase BDE смотрит что написано в 30 байте заголовка. Если он не равен нулю, то BDE верит, что данные там лежат в той кодовой странице, что написано в заголовке.
Если байт нулевой, БДЕ считает что данные лежат в кодовой странице указанной для Dbase в системных параметрах.
← →
MONSTER (2002-05-08 13:07) [14]Прикол в том, что 30-й байт у меня 0! СМ образец выше! а откуда ты взял это решение? Может стоит покопать первоисточник? Или ты и есть первоисточник?
← →
MONSTER (2002-05-08 13:09) [15]Ок! Вот за это спасибо. Есть над чем подумать! Хорошо, др. вопрос а разве Delphi работает не через BDE? СТОП! ODBC? Думаю........
← →
Reindeer Moss Eater (2002-05-08 13:09) [16]Так и копай первоисточник, формат Dbase открыт, в отличие от парадокса.
Если байт = 0, исправь параметры в BDE админе. Либо у тебя версия dbase > 3
← →
MONSTER (2002-05-08 13:10) [17]У меня нет! У 1С да! Dbase5!
← →
Reindeer Moss Eater (2002-05-08 13:13) [18]Если речь идет о файлах экспорта, то попроси у 1C сохранять данные в DBase III.
А иначе изучай формат заголовка Dbase5
← →
MONSTER (2002-05-08 13:22) [19]Нет! Речь идет не о файлах экспорта! Нужно реалтайм!
← →
MONSTER (2002-05-08 14:00) [20]YES!!!
Я его сделал! Не через ADO! Все нормально!
Ну!!! Ура!
← →
MONSTER (2002-05-08 14:01) [21]Ну что же теперь попробуем не через BDE!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c