Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

Проблема с 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
1-37176
Beginer1
2002-12-29 19:39
2003.01.13
Диалоги


3-36931
Карелин Артем
2002-12-17 14:36
2003.01.13
Ошибка 179


14-37373
LD
2002-12-25 14:03
2003.01.13
Как изменить системное время?


14-37320
Shadow
2002-12-23 13:31
2003.01.13
Интересно, а кто нибкдь помнит что из себя


1-37064
Аркадий
2003-01-03 02:38
2003.01.13
помогите