![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Присвоение TField.Value или TField.AsString [D5]
harisma © (2010-11-04 18:39:00)Почему, когда я присваиваю TField.Value или TField.AsString значение, состоящее исключительно из пробелов или заканчивающееся на пробелы, то в первом случае получаю просто пустую строку, а во втором случае только текст без завершающих пробелов?
Другими словами:
procedure ...(var AFld: TStringField);
var
s, s1: string;
begin
s: = ' ';
AFld.AsString := s;
....
s1 := AFld.AsString; <-- тут получаю s1 = '' !!!
end;
procedure ...(var AFld: TStringField)
var
s, s1: string;
begin
s: = 'text ';
AFld.AsString := s;
....
s1 := AFld.AsString; <-- тут получаю s1 = 'text' !!!
end;
Как сделать так, чтобы в поле сохранялись данные именно в таком виде, в каком я их передал туда?
harisma (2010-11-15 14:04:00) [1]
> переписать компоненту TClientDataSet
А там ничего сложного не оказалось - только добавить нужную новую пропертю да пару констант, чтоб обрабатівалась установка этой проперти - вот собственно и все :)
sniknik (2010-11-12 19:29:00) [2]> А вариант решения простой: переписать компоненту TClientDataSet
решение впечатляет своей "простотой"...
harisma (2010-11-12 17:48:00) [3]А вариант решения простой: переписать компоненту TClientDataSet от Delphi 5, добавив в нее нужный функционал (а именно это свойство) и использовать ее вместо стандартной дельфовой, если уж нет возможности перейти на более высокую версию Дельфы (как у меня) :)
Sha (2010-11-12 15:54:00) [4]> Anatoly Podgoretsky © (12.11.10 15:45) [17]
На форуме все чаще стал встречаться тип, который я называю Диодом.
Принадлежащие к нему личности искренне считают, что информация должна течь только в одну сторону - к ним.
В запущенных случаях объектом становится вообще все хорошее с точки зрения больного.
Anatoly Podgoretsky (2010-11-12 15:45:00) [5]> Sha (12.11.2010 15:37:16) [16]
Я не халявщик, я партнер.
Sha (2010-11-12 15:37:00) [6]> harisma © (12.11.10 12:21) [15]
> я нашел вариант победить эту проблему.
Почему бы не сказать, как?
harisma (2010-11-12 12:21:00) [7]Вв господа бы не прикалывались почем зря, а на версию моей дельфы посмотрели бы внимательнее: Delphi 5. А в этой версии еще не было той паблишед проперти, которая отвечает за завершающие пробелы (DisableStringTrim). Но в общем я нашел вариант победить эту проблему.
harisma (2010-11-05 19:49:00) [8]И к томиу же когда я задавал вопрос, этого кода у меня не ыло тогда :(
harisma (2010-11-05 19:48:00) [9]> О каком свойстве идет речь то?
published
Все равно не понял :(
sniknik (2010-11-05 19:26:00) [10]> О каком свойстве идет речь то?
published
> Вот собственно код:
поздно, его б сразу... а так "ложечки нашлись, но осадочек остался".
harisma (2010-11-05 18:58:00) [11]Компонент я создаю динамически. Поле - тоже. О каком свойстве идет речь то?
Вот собственно код:
procedure TForm1.Button1Click(Sender: TObject);
var
C: TClientDataSet;
F: TField;
begin
C := TClientDataSet.Create(Self);
F := TStringField.Create(Self);
F.FieldName := 'STUB';
F.DataSet := C;
F.Size := 255;
C.CreateDataSet;
C.Edit;
F.Value := 'ффф ';
ShowMessage(F.Value + IntToStr(Length(F.Value)));
end;
В результате получу в окошечке:
ффф3,
а должно было бы показать
ффф 6
sniknik (2010-11-05 18:37:00) [12]> TClientDataSet и не привязываю ее ни к каому реальному датасету.
блин, слов нет, откуда такая общая, идиотская уверенность что везде все одинаково, и именно так как они думают... ВАЖНЫЕ детали, меняющие ВСЕ, раскрываются потом, и то может быть, а то и не раскрываются, вместо этого уверения "там все правильно"...
это, не конкретно тебе, это в общем... но частично и тебе тоже.
и только тебе, по секрету - свойства у компонента внимательно посмотри...
Amoeba_ (2010-11-05 17:32:00) [13]
> Присваиваю ему некоторое значение с пробелами в конце, а
> после этого считываю его - в результате пробелов нет :(
> а как сделать так, чтобы они оставались?
А зачем они так необходимы, эти пробелы? Наоборот, радоваться надо, что они удаляются сами, а не приходится добавлять код для их удаления.
Anatoly Podgoretsky (2010-11-05 16:33:00) [14]> harisma (05.11.2010 16:18:07) [7]
Проверяй настройки сервера.
harisma (2010-11-05 16:18:00) [15]Ну, сервер то MS SQL (версия не важна). Но в данном конкретном случае я работаю с компонентой TClientDataSet и не привязываю ее ни к каому реальному датасету. Просто есть такой компонент. У него есть одно поле типа стринга. Присваиваю ему некоторое значение с пробелами в конце, а после этого считываю его - в результате пробелов нет :( а как сделать так, чтобы они оставались?
Плохиш (2010-11-05 13:12:00) [16]
> harisma © (05.11.10 11:23) [4]
>
> Увы, это невозможно.
Найми программиста.
Anatoly Podgoretsky (2010-11-05 12:10:00) [17]
> harisma © (05.11.10 10:45) [2]
А средствами какого сервера ты смог бы это сделать?
Ты же как партизан молчишь обо всем.
harisma (2010-11-05 11:23:00) [18]Увы, это невозможно. Поэтому вопрос остается актуальным :(
_Юрий (2010-11-05 11:21:00) [19]
> я создаю таблицу в базе не средствами SQL, а программно
Лучше все таки создавать средствами SQL, запущенными программно
harisma (2010-11-05 10:45:00) [20]Хорошо, тогда вопрос: как в коде описать такое поле? Ведь я создаю таблицу в базе не средствами SQL, а программно, и если я указываю тип поля ftString и указываю длину, то естественно создается поле с типом Char (или я не прав?)
Как программно сказать, чтобы было создано поле с типом varchar?