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

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

лишние символы в записи таблицы БД (firebird, delphi7) [D1, D7, IB4.x, Firebird]


Kabazoo ©   (2006-01-16 00:21:00) 

Народ проблема следующая ...

есть база данных на firebird 1.5. В ней таблица, в таблице - поле Name,  типа Char (win1251) длинной 50 символов.

1.Делаю выборку : SELECT * FROM TABLE_A
2.Cчитываю значения поля командой fieldbyname и присваиваю edit'у значение поля...
edit1.text:=ibsql.sql.fieldbyname('Name').asstring;

Результат:  к значению поля непонятно откуда "прилепливается" еще ~40 пробелов.
такой же результат если просто воспользоваться DBEdit и зассигнить его к полю Name.

Есть предположение ,что это как то связано с незаконченной транзакцией. Прошу помочь ..


DSKalugin   (2006-01-16 14:17:00) [1]

После изменения типа данных с CHAR(50) на VARCHAR(50) на лету(с имеющимися данными), обязательно рекомендую выполнить такой запрос

update TABLE_A set name=name


evvcom   (2006-01-16 12:27:00) [2]


> Только в [1] советуют ПЕРЕСОЗДАть таблицу, а по мне так
> лучше просто тип поля сменить.

Ну я не знаю особенностей птицы, поэтому к словам
> sniknik ©   (16.01.06 00:51) [1]
цепляться не стал. :)


КиТаЯц   (2006-01-16 12:15:00) [3]


> evvcom ©   (16.01.06 10:58) [6]
>
> > КиТаЯц ©   (16.01.06 10:52) [5]
> > Два решения:
> > 1. [2]
> > 2. Изменить тип поля на VARchar
>
> 1. [2]
> 2. [1]
> :)

:)))
Да. Только в [1] советуют ПЕРЕСОЗДАть таблицу, а по мне так лучше просто тип поля сменить.


kabazoo   (2006-01-16 11:33:00) [4]

Johnmen ©

Возможно....... делфи  сейчас от меня далеко :)))


Johnmen   (2006-01-16 11:17:00) [5]

>но выборка не возвращает никакого результата...

Конечно. Ведь 'name' <> значение в var1

>....parambyname('s1'):=var1;

А это даже компилироваться небудет...


Desdechado   (2006-01-16 11:16:00) [6]

CHAR(50) - это ВСЕГДА 50 символов (дополняется пробелами автоматически)
VARCHAR(50) - это НЕ БОЛЕЕ 50 символов (что записал, то и будет)


Плохиш   (2006-01-16 11:14:00) [7]


> в таблице table2 запись со значением ,которое я получаю
> в 1), 100% есть , но выборка не возвращает никакого результата

'blablabla           ' <> 'blablabla' - это понятно?


Sergey13   (2006-01-16 11:04:00) [8]

А по мне так [2] - это не решение, а обход проблемы при невозможности менять структуру. 8-)


kabazoo   (2006-01-16 11:02:00) [9]

ну trim это половина решения :)

приведу свой код ..

1. var1:=trim(fieldbyname('name').asstring);
2. sql1.sql.text:='select * from table2 where 'name'=:s1';
....parambyname('s1'):=var1;

в таблице table2 запись со значением ,которое я получаю в 1), 100% есть , но выборка не возвращает никакого результата...

сегодня попытаюсь изменить на varchar


evvcom   (2006-01-16 10:58:00) [10]


> КиТаЯц ©   (16.01.06 10:52) [5]
> Два решения:
> 1. [2]
> 2. Изменить тип поля на VARchar

1. [2]
2. [1]
:)


КиТаЯц   (2006-01-16 10:52:00) [11]

Два решения:
1. [2]
2. Изменить тип поля на VARchar


evvcom   (2006-01-16 10:32:00) [12]


> Виталий Панасенко   (16.01.06 10:29) [3]

:-))))))))


Виталий Панасенко   (2006-01-16 10:29:00) [13]


> Результат:  к значению поля непонятно откуда "прилепливается"
> еще ~40 пробелов.
> такой же результат если просто воспользоваться DBEdit и
> зассигнить его к полю Name.

"Не дирижбамбль, Василий Иванович, а стратоступ... Энциклопию читать нужно..."(с) Петька


Vemer   (2006-01-16 09:34:00) [14]

edit1.text := TRIM(ibsql.sql.fieldbyname('Name').asstring);


sniknik   (2006-01-16 00:51:00) [15]

никак не с транзакцией... это связано с обьявлением типа Char (50) т.е. массива символов 50 символов длинной (пересчитай так и будет. сколько бы символов в начало не записал размер массива неизменится)

есть другое обьявления - динамический массив - VarChar (должно быть. IB4.x не уверен а в файребирде должно), пересоздай таблицу с ним. это будет с переменной длинной (какую строку внесеш), но не более ограничения указанного при создании.


Наверх

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