![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Null в строке
AndreyAR © (2006-01-18 09:03:00)Всем доброго времени суток.
Проблема в следующем: в строковом поле забиты строчки с символом #0. При попытке взять значение AsString возвращается пустая строка (размер 0), если же брать AsVariant, размер ненулевой. Как преобразовать Variant в String, заменив #0, например, пробелами, сохранив остальные символы?
Заранее спасибо всем, кто ответит.
AndreyAR (2006-01-18 15:49:00) [1]
> А как же "Сделал выборку с использованием API первазива
> - все просто "летает"."?
Так ведь, батенька, я одну таблицу переделал, а их во-о-он сколько :)
Плохиш (2006-01-18 15:44:00) [2]
> AndreyAR (18.01.06 14:33) [43]
Мыло - мачало, начинай всё с начала :-(
А как же "Сделал выборку с использованием API первазива - все просто "летает"."?
PS. Что-то скушно мне в этой ветке.
AndreyAR (2006-01-18 14:33:00) [3]
> :-) да мне по фиг, да и автору я смотрю тоже.
:-) Я даже внимательно не вчитывался.
Вообще, надо разобраться с ODBC+ADO, потому что делать выгрузку каждой таблицы средствами API весьма долго и утомительно, а час моей работы стоит хоть и не 30 евро, но все же... :)
Johnmen (2006-01-18 13:54:00) [4]>Плохиш © (18.01.06 13:40) [40]
Да, с ГетДата вполне м.получиться...
evvcom (2006-01-18 13:53:00) [5]
> час моей работы стоит ...
Ух, ты! И де это? :?)
Плохиш (2006-01-18 13:40:00) [6]
> Johnmen © (18.01.06 13:35) [39]
:-) да мне по фиг, да и автору я смотрю тоже.
Отправил пост и вспомнил про GetData.
Johnmen (2006-01-18 13:35:00) [7]>Плохиш © (18.01.06 13:14) [35]
Иде я?
Идея не пройдёт...:)
Т.к. ключевые моменты (sizeof(myVar), myVar[lCount]) не "соотносятся" с действительностью..
AndreyAR (2006-01-18 13:29:00) [8]
> Надеюсь идея понятна?
интересная идея, жаль, не пригодится :)
AndreyAR (2006-01-18 13:26:00) [9]
> Пробуй TBinaryField, TBytesField...
Не хочу уже. Сделал выборку с использованием API первазива - все просто "летает".
Остальным "мастерам" спасибо за "помощь". :))
Плохиш (2006-01-18 13:17:00) [10]А ещё лучше прочитать про метод GetDataкласса TField?
Плохиш (2006-01-18 13:14:00) [11]
> AndreyAR (18.01.06 11:57) [29]
var
myVar: Variant;
lCount: Integer;
str: String;
begin
myVar := FieldByName('f_note').Value;
for lCount := 0 to sizeof(myVar) - 1 do
if myVar[lCount] = 0 then myVar[lCount] := 32;
str := myVar;
end;
Надеюсь идея понятна?
Виталий Панасенко (2006-01-18 12:51:00) [12]
> Johnmen © (18.01.06 12:20) [33]
> Пробуй TBinaryField, TBytesField...
А че пробовать ? В дизайнере полей создать поля и глянуть тип созданного поля
Johnmen (2006-01-18 12:20:00) [13]Пробуй TBinaryField, TBytesField...
AndreyAR (2006-01-18 12:18:00) [14]
> выбери из таблицы записи, у которых это занятное поле IS
> NULL (select * from table_name where field is null) и глянь,
> а не попала ли туда, случайно, запись, которую ты сейчас
> обсуждаешь.. Если да, то ...
Делать такой селект достаточно долго, таблица большая (это во-первых), во-вторых, where нормально отрабатывает (с приемлимой скоростью), если я точно попадаю в индексы Btriev-a (т.е. в where входят все поля, указанные в индексе).
Виталий Панасенко (2006-01-18 12:07:00) [15]выбери из таблицы записи, у которых это занятное поле IS NULL (select * from table_name where field is null) и глянь, а не попала ли туда, случайно, запись, которую ты сейчас обсуждаешь.. Если да, то ...
AndreyAR (2006-01-18 12:00:00) [16]
> понятно...
> действительно понятно, операторы TOP xxx, ограничения по
> WHERE xxx автору пожоже неизвестны... и пишет он похоже
> используя рабочую базу...
Ну конечно неизвестны, в нашей церковно-приходской школе о таком не упоминали!
> чтож, не будем мешать, флаг тебе в руки.
Всего Вам.
AndreyAR (2006-01-18 11:57:00) [17]
> Пора бы про строки нулём заканчивающиеся почитать.
> У тебё в поле хранится не строка а набор байт(символов)
> (в терминах делфи это называется динамический массив, про
> них то же пора бы почитать), вот и обрабатывай как массив
> символов.
> За определённую оплату я готов сделать эту работу за тебя,
> но учти, что час моей работы стоит 30 Евро + налоги + непредвиденные
> расходы.
если раскажешь, как заполнить массив байтами из этого поля, я тебе перешлю 30 Евро. Серьезно.
Пока что на
TBlobField(FieldByName('f_note')).SaveToFile('c:\str.txt');
пишет "Invalid Typecast".
Плохиш (2006-01-18 11:54:00) [18]
> Johnmen © (18.01.06 11:46) [26]
> + соцпакет + трёхразовый харч + медстрах полис кремлёвки
> :)))
С выездом, транспортные расходы + суточные входят в непредвиденные расходы.
А за напоминае про страховки спасибо :-)
Виталий Панасенко (2006-01-18 11:47:00) [19]
> AndreyAR (18.01.06 10:52) [17]
>
> > А в поле действительно что-то есть ?
>
> Есть, есть, не сомневайтесь :)).
> Null в смысле символ с ASCII-кодом 0. СУБД писалась задолго
> до появления винды, а там такое возможно.
А при чем тут Винда ? задолго до Винды были Unix, NetWare.. И почему не допускается такой вариант, что уже тогда было понятие "пусто"("не определено" точнее)? А то, как это значение реализовано.. В Paradox для Numeric/Currency полей используется специальное значение Double - NAN (Not A Numeric), для Short - -32768, Long Integer/Date - -2147483648, строка - "". и все это при просмотре в HEX будет отображаться соответсвующими байтами(а Short/LongInt/Date вообще обычное число, отрицательное)...Так что, да там что-то есть.. Но это "что-то" сигнализирует системе(СУБД) "ЗНАЧЕНИЕ НЕ ОПРЕДЕЛЕНО" (Null)
Johnmen (2006-01-18 11:46:00) [20]+ соцпакет + трёхразовый харч + медстрах полис кремлёвки
:)))