Текущий архив: 2003.01.20;
Скачать: CL | DM;
Вниз
ASCII&Delphi Найти похожие ветки
← →
stoper (2002-12-25 18:12) [0]Есть строка. Например
d:string;
d:=#0+#1+#2; label1.caption:=d;
label1.refresh;
В результате лабел пустой. Что бы я не делал я не вижу символов после chr(0).Почему?
← →
Reindeer Moss Eater (2002-12-25 18:31) [1]Потому что это ограничитель длинной строки
← →
stoper (2002-12-25 18:38) [2]Я не правильно поставил вопрос.Как побороть єту проблему.
У меня беда . Есть файл типа DBF.Так там в полях типа charter сплошь и рядом нули. А мне надо этот файл обработать. Я третий день борюсь с этой проблемой. Неужели нет решения.
← →
Reindeer Moss Eater (2002-12-25 18:42) [3]В строках не должно быть символов с кодом $0000
И в строковых полях таблицы тоже.
← →
Reindeer Moss Eater (2002-12-25 18:44) [4]А решение есть почти всегда.
Тебе что надо?
← →
stoper (2002-12-25 19:15) [5]С чего все началось.
Эти вопросы я задавал на форуме по базам данных
dbf,ASCII [D5, dBase, FoxPro]
stoper (23.12.02 13:31)
Есть файл.dbf Практически все поля базы в том числе и превичные ключи состоят из ASCII символов. Для ключей используется один набор символов, для полей типа количество или сумма другой. Так вот когда я открываю базу то вижу значения некоторых полей, а вот поля количества и суммы у меня пустые. Через dbu все нормально. Дело в том что надо раскодировать поля, уже и функция написана. Да вот раскодировать нечего. Подскажите как быть кто знает. Я уже как только мог игрался с BDE и ODBC все напрасно. Может есть какой компонент позволяющий работать с dbf без BDE.
Заранее спасибо.
--------------------------------------------------------------------------------
stoper (23.12.02 17:17)
В моем гриде, в гриде BDE я не вижу значений в поле val.
Если написать per1:=table1val.asstring то per1="";
А на запрос select * from fgood where val="" не выдает запией вообще.
--------------------------------------------------------------------------------
stoper (24.12.02 11:22)
Так может кто-то всетаки поможет. Интересный момент. Я знаю какой набор символов должен быть в поле val. Беру table1val.asstring:=chr(175)+chr(28)+chr(226)+chr(155) и вижу то что надо.Так этот набор символов там уже есть . Почему я его невижу. Подскажите кто может. Дбфник набивался, с помощью проги написаной на клипере. Поля кодировались с помощью ассмблеровских функций.Так говорит содатель проги.
--------------------------------------------------------------------------------
Леван (24.12.02 12:01)
kakoi komponent ispolzuetsia dlia dostupa k tablice:
TDBF ili TTABLE?
(TDBF - storonnii komponent, vkliuchaet nenujnuliu TRANSLACIU v pole char ansitoeem ili oemtoansi.ee nado otkliuchit)
--------------------------------------------------------------------------------
stoper (24.12.02 12:34)
Леван Использую ТТable. TDBF-не имею.
--------------------------------------------------------------------------------
stoper (25.12.02 17:06)
Я наверное слишком назоилив.Но может всетаки ктото подскажет. Моя беде в том что в поле val имется chr(0).И вот если 0 присутствует BDE видимо ничего не понимает. Пробовал TDBF тоже самое.Но по идее раз поле симольное пиши в него что хочешь.
--------------------
Вот когда до меня дошло что я невижу то что начинается нуля.Я попробывал на лабеле. Хотя результат был известен заранее.
← →
smok_er (2002-12-25 19:30) [6]у меня было что-то типа такого
только надо было добавлять в базу, предварительно обработав.
Естественно все, что после #0 - обрезалось.
Вылечилось следующим образом:
function CheckString(var Str: String): String
begin
for i := 0 to Length(Str) do
if Str[i] = #0 then Str[i] := #32; // Пробел
end;
← →
stoper (2002-12-25 19:40) [7]Набить так можно. А как же все таки разглядеть.Неужто надо будет писать прибамбас на клипаке или фоксе. По перегону dbfника в нормальный вид, а потом загонять на SQL cервер.Так хотелось чтобы все одним махом.
← →
ZrenBy © (2002-12-25 19:46) [8]Можно попытаться прочитать запись функцией BDE
DbiReadBlock
потом, зная структуру таблицы заполнить
какой-нибудь array of byte.
Но я бы пошел путем stoper (25.12.02 19:40)
← →
sniknik © (2002-12-25 21:27) [9]опоздал я в ту ветку ты уже новую сделал.
from dbf,ASCII [D5, dBase, FoxPro]
sniknik © (25.12.02 18:09)
размер строк выставляется по #32 или #0 в конце строки, т.е. отсекаются с конца пока не другой символ.
Возьми Halcyon, там исходники, видно. С небольшими изменениями сделаеш как надо.
скачать.
http://www.vodonosov.newmail.ru/develop/develop.htm
← →
JohnnyJ © (2002-12-26 10:58) [10]Открой dbf как file of byte и замени все 0 в блоке данных на 32...
← →
Anatoly Podgoretsky © (2002-12-26 11:24) [11]А 32 на что бует менять, по спецификации на dBase(FoxPro) текстовое поле может содержать любые символы от #0 до #255
Может помочь попытка чтения этих данных напрямую через БДЕ как RAW данных
← →
myor © (2002-12-26 11:26) [12]попробуй изменить структуру бд в fox-е (если знаком).
← →
Digitman © (2002-12-26 11:35) [13]Именно как RAW. С BDE и DBF-форматом особых проблем не будет.
1. Расчитываем смещение целевого поля offs (+1 на символ-признак удал.записи)
2. Встаем на нужную запись.
3. Получаем зн-е св-ва TDataSet.ActiveBuffer
4. К полученному указателю на акт.буфер записи прибавляем смещение offs - получаем адрес, по которому можно считать/записать данные в целевое поле любым удобным способом (например, Move())
← →
sniknik © (2002-12-26 11:46) [14]в Halcyon нужно сделать совсем небольшое изменение, убрать несколько строк делаюших усечение строке. Тогда строка будет как есть с длинной обьявленной при создании.
по моему самое простое. (пол часа трассировки)
но не решение проблемы, как я понял данные закодированы и переменной длинны, как решать код кончился или символ #32-#0 в конце строки все еще часть кода? вот это по моему нерешаемо, без изменения условий.
← →
stoper (2002-12-26 16:00) [15]Спасибо всем кто откликнулся на мой вопрос. Так как простых решений в Delphi мы не нашли (перекодировать 9 млн. записей),мы всетаки пошли путем написания дополнительной примочки на VFP.И таким оброзом решили свою проблему.Еще раз спасибо.
Страницы: 1 вся ветка
Текущий архив: 2003.01.20;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.028 c