Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.02.06;
Скачать: [xml.tar.bz2];

Вниз

Присвоение TField.Value или TField.AsString   Найти похожие ветки 

 
harisma ©   (2010-11-04 18:39) [0]

Почему, когда я присваиваю 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;

Как сделать так, чтобы в поле сохранялись данные именно в таком виде, в каком я их передал туда?


 
sniknik ©   (2010-11-04 20:36) [1]

> Другими словами:
> procedure ...(var AFld: TStringField);
var лишнее, ты же не меняешь сам объект AFld (передать другой вместо него "наружу"), ты меняешь значение одного из его полей по ссылке, т.е. сделаешь это из одной ссылки, или из ее копии, не суть.
хотя это не по "проблеме", так для информации.

> Как сделать так, чтобы в поле сохранялись данные именно в таком виде, в каком я их передал туда?
поле в базе (а следовательно и в рекордсете после) должно быть типа varchar, а не char. char хранится в виде дополненного пробелами до полной длины, при чтении делается соответственно rtrim. т.е. это нормальное поведение, и обработка конкретного типа в большинстве движков.


 
harisma ©   (2010-11-05 10:45) [2]

Хорошо, тогда вопрос: как в коде описать такое поле? Ведь я создаю таблицу в базе не средствами SQL, а программно, и если я указываю тип поля ftString и указываю длину, то естественно создается поле с типом Char (или я не прав?)
Как программно сказать, чтобы было создано поле с типом varchar?


 
_Юрий   (2010-11-05 11:21) [3]


> я создаю таблицу в базе не средствами SQL, а программно


Лучше  все таки создавать средствами SQL, запущенными программно


 
harisma ©   (2010-11-05 11:23) [4]

Увы, это невозможно. Поэтому вопрос остается актуальным :(


 
Anatoly Podgoretsky ©   (2010-11-05 12:10) [5]


> harisma ©   (05.11.10 10:45) [2]

А средствами какого сервера ты смог бы это сделать?
Ты же как партизан молчишь обо всем.


 
Плохиш ©   (2010-11-05 13:12) [6]


> harisma ©   (05.11.10 11:23) [4]
>
> Увы, это невозможно.

Найми программиста.


 
harisma ©   (2010-11-05 16:18) [7]

Ну, сервер то MS SQL (версия не важна). Но в данном конкретном случае я работаю с компонентой TClientDataSet и не привязываю ее ни к каому реальному датасету. Просто есть такой компонент. У него есть одно поле типа стринга. Присваиваю ему некоторое значение с пробелами в конце, а после этого считываю его - в результате пробелов нет :( а как сделать так, чтобы они оставались?


 
Anatoly Podgoretsky ©   (2010-11-05 16:33) [8]

> harisma  (05.11.2010 16:18:07)  [7]

Проверяй настройки сервера.


 
Amoeba_   (2010-11-05 17:32) [9]


> Присваиваю ему некоторое значение с пробелами в конце, а
> после этого считываю его - в результате пробелов нет :(
> а как сделать так, чтобы они оставались?

А зачем они так необходимы, эти пробелы? Наоборот, радоваться надо, что они удаляются сами, а не приходится добавлять код для их удаления.


 
sniknik ©   (2010-11-05 18:37) [10]

> TClientDataSet и не привязываю ее ни к каому реальному датасету.
блин, слов нет, откуда такая общая, идиотская уверенность что везде все одинаково, и именно так как они думают... ВАЖНЫЕ детали, меняющие ВСЕ, раскрываются потом, и то может быть, а то и не раскрываются, вместо этого уверения "там все правильно"...
это, не конкретно тебе, это в общем... но частично и тебе тоже.

и только тебе, по секрету - свойства у компонента внимательно посмотри...


 
harisma ©   (2010-11-05 18:58) [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 19:26) [12]

> О каком свойстве идет речь то?
published

> Вот собственно код:
поздно, его б сразу...  а так "ложечки нашлись, но осадочек остался".


 
harisma ©   (2010-11-05 19:48) [13]

> О каком свойстве идет речь то?
published

Все равно не понял :(


 
harisma ©   (2010-11-05 19:49) [14]

И к томиу же когда я задавал вопрос, этого кода у меня не ыло тогда :(


 
harisma ©   (2010-11-12 12:21) [15]

Вв господа бы не прикалывались почем зря, а на версию моей дельфы посмотрели бы внимательнее: Delphi 5. А в этой версии еще не было той паблишед проперти, которая отвечает за завершающие пробелы (DisableStringTrim). Но в общем я нашел вариант победить эту проблему.


 
Sha ©   (2010-11-12 15:37) [16]

> harisma ©   (12.11.10 12:21) [15]
> я нашел вариант победить эту проблему.

Почему бы не сказать, как?


 
Anatoly Podgoretsky ©   (2010-11-12 15:45) [17]

> Sha  (12.11.2010 15:37:16)  [16]

Я не халявщик, я партнер.


 
Sha ©   (2010-11-12 15:54) [18]

> Anatoly Podgoretsky ©   (12.11.10 15:45) [17]

На форуме все чаще стал встречаться тип, который я называю Диодом.
Принадлежащие к нему личности искренне считают, что информация должна течь только в одну сторону - к ним.
В запущенных случаях объектом становится вообще все хорошее с точки зрения больного.


 
harisma ©   (2010-11-12 17:48) [19]

А вариант решения простой: переписать компоненту TClientDataSet от Delphi 5, добавив в нее нужный функционал (а именно это свойство) и использовать ее вместо стандартной дельфовой, если уж нет возможности перейти на более высокую версию Дельфы (как у меня) :)


 
sniknik ©   (2010-11-12 19:29) [20]

> А вариант решения простой: переписать компоненту TClientDataSet
решение впечатляет своей "простотой"...


 
harisma ©   (2010-11-15 14:04) [21]


> переписать компоненту TClientDataSet

А там ничего сложного не оказалось - только добавить нужную новую пропертю да пару констант, чтоб обрабатівалась установка этой проперти - вот собственно и все :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.004 c
3-1251978558
Sergey2
2009-09-03 15:49
2011.02.06
top2 по каждому значению условия


15-1288100292
vrem
2010-10-26 17:38
2011.02.06
То, где ты работаешь - продаётся


6-1233941498
FireMan_Alexey
2009-02-06 20:31
2011.02.06
По какому протоколу ИЕ автоматически определяет настройки прокси?


2-1289810551
Евгений07
2010-11-15 11:42
2011.02.06
наследование


2-1289799666
antsa
2010-11-15 08:41
2011.02.06
Чтение цвета символа в консоли





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский