Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Внизлишние символы в записи таблицы БД (firebird, delphi7) Найти похожие ветки
← →
Kabazoo (2006-01-16 00:21) [0]Народ проблема следующая ...
есть база данных на 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.
Есть предположение ,что это как то связано с незаконченной транзакцией. Прошу помочь ..
← →
sniknik © (2006-01-16 00:51) [1]никак не с транзакцией... это связано с обьявлением типа Char (50) т.е. массива символов 50 символов длинной (пересчитай так и будет. сколько бы символов в начало не записал размер массива неизменится)
есть другое обьявления - динамический массив - VarChar (должно быть. IB4.x не уверен а в файребирде должно), пересоздай таблицу с ним. это будет с переменной длинной (какую строку внесеш), но не более ограничения указанного при создании.
← →
Vemer © (2006-01-16 09:34) [2]edit1.text := TRIM(ibsql.sql.fieldbyname("Name").asstring);
← →
Виталий Панасенко (2006-01-16 10:29) [3]
> Результат: к значению поля непонятно откуда "прилепливается"
> еще ~40 пробелов.
> такой же результат если просто воспользоваться DBEdit и
> зассигнить его к полю Name.
"Не дирижбамбль, Василий Иванович, а стратоступ... Энциклопию читать нужно..."(с) Петька
← →
evvcom © (2006-01-16 10:32) [4]
> Виталий Панасенко (16.01.06 10:29) [3]
:-))))))))
← →
КиТаЯц © (2006-01-16 10:52) [5]Два решения:
1. [2]
2. Изменить тип поля на VARchar
← →
evvcom © (2006-01-16 10:58) [6]
> КиТаЯц © (16.01.06 10:52) [5]
> Два решения:
> 1. [2]
> 2. Изменить тип поля на VARchar
1. [2]
2. [1]
:)
← →
kabazoo (2006-01-16 11:02) [7]ну trim это половина решения :)
приведу свой код ..
1. var1:=trim(fieldbyname("name").asstring);
2. sql1.sql.text:="select * from table2 where "name"=:s1";
....parambyname("s1"):=var1;
в таблице table2 запись со значением ,которое я получаю в 1), 100% есть , но выборка не возвращает никакого результата...
сегодня попытаюсь изменить на varchar
← →
Sergey13 © (2006-01-16 11:04) [8]А по мне так [2] - это не решение, а обход проблемы при невозможности менять структуру. 8-)
← →
Плохиш © (2006-01-16 11:14) [9]
> в таблице table2 запись со значением ,которое я получаю
> в 1), 100% есть , но выборка не возвращает никакого результата
"blablabla " <> "blablabla" - это понятно?
← →
Desdechado © (2006-01-16 11:16) [10]CHAR(50) - это ВСЕГДА 50 символов (дополняется пробелами автоматически)
VARCHAR(50) - это НЕ БОЛЕЕ 50 символов (что записал, то и будет)
← →
Johnmen © (2006-01-16 11:17) [11]>но выборка не возвращает никакого результата...
Конечно. Ведь "name" <> значение в var1
>....parambyname("s1"):=var1;
А это даже компилироваться небудет...
← →
kabazoo (2006-01-16 11:33) [12]Johnmen ©
Возможно....... делфи сейчас от меня далеко :)))
← →
КиТаЯц © (2006-01-16 12:15) [13]
> evvcom © (16.01.06 10:58) [6]
>
> > КиТаЯц © (16.01.06 10:52) [5]
> > Два решения:
> > 1. [2]
> > 2. Изменить тип поля на VARchar
>
> 1. [2]
> 2. [1]
> :)
:)))
Да. Только в [1] советуют ПЕРЕСОЗДАть таблицу, а по мне так лучше просто тип поля сменить.
← →
evvcom © (2006-01-16 12:27) [14]
> Только в [1] советуют ПЕРЕСОЗДАть таблицу, а по мне так
> лучше просто тип поля сменить.
Ну я не знаю особенностей птицы, поэтому к словам
> sniknik © (16.01.06 00:51) [1]
цепляться не стал. :)
← →
DSKalugin © (2006-01-16 14:17) [15]После изменения типа данных с CHAR(50) на VARCHAR(50) на лету(с имеющимися данными), обязательно рекомендую выполнить такой запрос
update TABLE_A set name=name
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c