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

Вниз

непонятный   Найти похожие ветки 

 
den777   (2004-01-27 15:31) [0]

В таблице поле объявлено как CHAR(20).Может принимать значение NULL.Если в этом поле записана пустота, т.е. не NULL а именно пустота, то BDE и FibPlus на AsString у этого поля и возвращают пустоту т.е. "", а при использовании DbExpress AsString возвращает " ", т.е. непонятно откуда взявщийся пробел. Если в поле что-то записано или оно NULL, то все работает как и должно быть.Если посмотреть по кодам Delphi, то пробел возвращается в строке 3364 файла SqlExpr.При подключении у SqlConnection параметр Trim Char установлен в True. Возникновение ненужного пробела - это ошибка конкретной реализации Dbexpressовского драйвера под Interbase(dbexpint.dll) или в чем-то другом? Есть ли какой-то разумный выход из данной ситуации.


 
Sandman25   (2004-01-27 15:37) [1]

Я пишу select trim(myfield) from mytable.


 
den777   (2004-01-27 15:43) [2]

Не подойдет.Если в базе данных в этом поле реально лежит пробел и он несет какую-то смысловую нагрузку, то данный вариант использовать нельзя. Есть ли другие варианты.


 
VAleksey   (2004-01-27 15:56) [3]

не использовать char(20).
используй varchar, например.


 
Sandman25   (2004-01-27 15:57) [4]

>Есть ли другие варианты

Изменить SqlExpr.pas и соответственно dbrtl.bpl.
Я так и сделал однажды. Правда, потом вернул все на место.
Судя по строке 3364, Вы работаете с Blob. Тогда зачем использовать AsString? Читайте из BlobStream.


 
Sandman25   (2004-01-27 15:59) [5]

[4] Sandman25 © (27.01.04 15:57)

Упс. Не посмотрел на версию Delphi. Что в строке 3364 происходит?


 
den777   (2004-01-27 16:13) [6]

строка 3364:Status:=FSQLCursor.GetString(FieldNo,Buffer,FBlank);
FSQLCursor = Interface и вызывает Getstring скорее всего из DbExpressовского драйвера dbexpint.dll, исходников которого у меня нет и подправить в котором я к сожалению ничего не могу. При работе с VARCHAR действительно все нормально, но база существует давно, и неизвестно всплывут ли еще какие-либо гадости если грубо переправить в базе все CHAR на VARCHAR. Но как вариант принять можно, но только в самую последнюю очередь.


 
Sandman25   (2004-01-27 16:28) [7]

[6] den777 (27.01.04 16:13)

Вряд ли можно что-то сделать. О значении поля ничего не известно. Если бы знать длину, то можно было бы как-то выкрутиться. Но она неизвестна.


 
Johnmen   (2004-01-27 16:47) [8]

>den777

Если поле CHAR, то оно дополнено справа пробелами до размерности.
И какая м.б. смысловая нагрузка на пробел в конце ? :)))))


 
den777   (2004-01-27 16:55) [9]

Вопрос снят, действительно просто пробел в InterBase в поле записать нельзя, так что " " это тоже самое что и "".Остается переписать(перекрыть) нужный метод у TSqlQuery.Ступил немного.Бывает.


 
den777   (2004-01-27 17:08) [10]

Может кому пригодится.Выглядит это примерно так:
TQryDbx = class(TSqlQuery)
public
function GetFieldData(FieldNo: Integer; Buffer: Pointer): Boolean; overload; override;
end;

function TQryDbx.GetFieldData(FieldNo: Integer;
Buffer: Pointer): Boolean;
begin
result:=inherited GetFieldData(FieldNo,Buffer);
if ( ( Fields[FieldNo-1].DataType=ftString ) and
( strlen(Buffer)=1 ) and ( StrPas(Buffer)=" " ) ) then
StrPcopy(buffer,"");
end;

Если где-то не прав, поправьте.



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

Форум: "Базы";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.015 c
14-53743
syte_ser78
2004-01-28 08:58
2004.02.17
Коаксиал и витая пара


3-53379
Пубертанец
2004-01-28 09:54
2004.02.17
Как в Firebird в хранимой процедуре обратиться к таблице по имени


1-53589
mao
2004-02-08 13:32
2004.02.17
RichEdit


1-53570
Del2
2004-02-09 06:30
2004.02.17
выделение ячеек в Grid компонентах


14-53734
kull
2004-01-30 13:00
2004.02.17
Этолт безумный мир...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский