Форум: "Базы";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизПроблема с TField.SetData Найти похожие ветки
← →
Oxy (2002-12-18 13:25) [0]Помогите с TField.SetData. Я пробовал его использовать но не работает.
Фрагмент кода
Var
buf:Array[0..253] Of Char;
bsz,Len:Integer;
ff2:TField;
Begin
t1.edit;
Len := ff.DataSize - 1;
bsz:=len+1;
ZeroMemory(@buf,SizeOf(buf));
If ff.GetData(@buf) then Begin
ff2:=t1.Fields[3];
ff2.SetData(@buf,false);
End;
Post;
..............................
End;
Я здесь пытаюсь переписать данные из поля одной таблицы в поле другой таблицы напрямую без преобразований. Но не работает. Даные из буфера не переписываются в поле второй таблицы. Оно остается пустым.
Где ошибка?
← →
Johnmen (2002-12-18 13:46) [1]Где ты обчитался такой лабуды ? Будь проще !
ff2["имя поля"]:=ff["имя поля"];
← →
Oxy (2002-12-18 13:53) [2]Не, нельзя так. У меня поле исходной таблицы типа CHAR. Но в нем записана всякая лабуда где встречается также символ с кодом #0. Если сделать так как ты предлагаешь, то результат обрежется по этому нолевому символу и у меня перепишется не вся строка.
← →
Reindeer Moss Eater (2002-12-18 13:56) [3]К блоб полям ни GetData ни SetData неприменимы!
← →
Oxy (2002-12-18 13:58) [4]Это не блоб поле. Это простое 254 символьное CHAR поле.
← →
Reindeer Moss Eater (2002-12-18 14:00) [5]>Oxy
В какой автошколе учились?
Хранить #0 в символьных полях????
← →
Oxy (2002-12-18 14:02) [6]Блин, какое это имеет значение. Мне надо вот и храню. Вопрос был как использовать SetData...
← →
OlegE (2002-12-18 14:27) [7]У меня данный код работает.
Попробуй объявить вместо Array of CHAR - Array of BYTE
....
var
ECPFile:array [1..64] of byte;
Sign:array[1..128]of Byte;
....
DataModule1.Query1.FieldByName("ECP").GetData(@ECPFile);
...
DataModule1.tlbFiles.FieldByName("ECP").setdata(@Sign);
← →
Oxy (2002-12-18 14:43) [8]Провел серию экспериментов и выяснил, что
1. вне зависимости от типа буфера если указать setdata(@buf, False) данные не записываются.
2. если указать setdata(@buf, true), то вне зависимости от типа буфера данные обрезаются по первому попавшемуся нулевому символу. Ну это и понятно, при этом данные приводятся к типу CHAR (напомню, что я записываю в поле типа CHAR).
Соответственно, появилось 2 вопроса:
1. нафига борланд ввел этот второй параметр в методе setdata(), если при его равенстве False метод ничего не делает?
2. как мне всетаки переписать данные?
← →
Oxy (2002-12-18 15:31) [9]Help!!!
← →
Reindeer Moss Eater (2002-12-18 15:55) [10]Двоичные данные на хранят в полях, для этого не предназначенных, но Мне надо вот и храню.
Удачи тогда тебе
← →
Oxy (2002-12-18 17:50) [11]Дык, выбора у меня нет. Надо именно так. Таблицу должен понимать клиппер, а он не поддерживает blob поля :-(
← →
Oxy (2002-12-18 20:16) [12]Help!!!
← →
Anatoly Podgoretsky (2002-12-18 22:53) [13]Reindeer Moss Eater (18.12.02 14:00)
Формат dBase и FoxPro это разрешает, вот только БДЕ с этим работает не так.
← →
Reindeer Moss Eater (2002-12-19 08:57) [14]Я прекрасно представляю, что dBase это всего лишь двоичный файл, в который можно писать любое из $FF значений байта.
Так и наздоровье. Но только используя знания о структуре dbase и методы работы с двоичными файлами.
← →
OlegE (2002-12-19 09:08) [15]Повторюсь:
У меня данный код работает.
Попробуй объявить вместо Array of CHAR - Array of BYTE
....
var
ECPFile:array [1..64] of byte;
Sign:array[1..128]of Byte;
....
DataModule1.Query1.FieldByName("ECP").GetData(@ECPFile);
...
DataModule1.tlbFiles.FieldByName("ECP").setdata(@Sign);
Используется ДВЕ программы.
ПЕРВАЯ- поле объявлено как BYTE.
ВТОРАЯ- поле обявлено как CHAR.
Первая записывает и считывает данные.
ВТОРАЯ- старая, чужая, DOS-овская, только ститывает, используется- потому что нужно.
Такой тандем работает с 1995 года. Никаких проблем.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c