![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
лишние символы в записи таблицы БД (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 не уверен а в файребирде должно), пересоздай таблицу с ним. это будет с переменной длинной (какую строку внесеш), но не более ограничения указанного при создании.