Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Присвоение TField.Value или TField.AsString [D5]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо