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

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

Непонятное поведение строк [D7, WinXP]


Woolen ©   (2005-11-03 14:52:00) 

В этом коде AsString возвращает все, что должен. В моем случае строку длинной 45 символов, но после где-то ~90 таких строк в QueryTxt начинает попадать всякая чушь. Ни ',', ни зачения из AsString больше там не появляется. В дельфи переодически помогают танцы с бубнами, но ни предварительная очистка, ни перенос переменной в глобальные не помогает.
Сейчас у меня создалось ощущение, что при превышении 4096 символов строку начинает глючить, хотя QueryTxt - это обычный string, который по документации обязан содержать 2 ГБ символов. В общем, я уже не знаю, что думаьб. Помогите, если кто в курсе. Спасибо
if DocContFilled or DocTextFilled then
       begin
       QueryTxt := 'QQQ in (' + FieldByName('QQQ').AsString;
       Next;
       while not Eof do
         begin
         QueryTxt := QueryTxt + ',' + FieldByName('QQQ').AsString;
         Next;
         end;
       QueryTxt := QueryTxt + ')';


Amoeba   (2005-11-03 18:59:00) [1]


> FieldByName('QQQ').AsString на NULL

Замечание относится лишь к тому что AsString имеет тип String, а не Variant и не может принимать значение NULL. Следовательно AsString можно проверить лищь на '', а если нужно на Null - то проверять AsVariant. Не надо "путать Бабеля с Бебелем".


Ольга   (2005-11-03 17:04:00) [2]

Так и я об этом. В данной конструкции запроса это критично.


Amoeba   (2005-11-03 16:33:00) [3]


> Ольга   (03.11.05 16:17) [11]
> Не помешало бы проверять FieldByName('QQQ').AsString на
> NULL

Если NULL, то AsString покажет '', т.е. пустую строку.


Ольга   (2005-11-03 16:17:00) [4]

Не помешало бы проверять FieldByName('QQQ').AsString на NULL


Leonid Troyanovsky   (2005-11-03 16:15:00) [5]


> Digitman ©   (03.11.05 15:40) [9]

> нехилые у тебя "запросы" - по 4к и более) ... что ж за запросы-
> то такие ? прямо монстры какие-то) ...


http://groups.google.com/group/fido7.ru.delphi.db/msg/73690ec3d4363922

--
Regards, LVT.


Digitman   (2005-11-03 15:40:00) [6]


> Какие варианты есть, кроме ShowMessage?


например, записать содержимое строки в файл и впоследствии анализировать его любым текст.редактором

с другой стороны, если речь идет (как я понял) о динамически формируемых текстах сиквэл-запросов, то на ту беду в многих пакетах компонентов доступа к СУБД есть компоненты а-ля SQLMonitor, позволяющие перехватывать тексты SQL-предложений непосредственно перд их отправкой СУБД-серверу


> при отправке запроса


нехилые у тебя "запросы" - по 4к и более) ... что ж за запросы-то такие ? прямо монстры какие-то) ...

ничего личного, просто любопытно ..


erika   (2005-11-03 15:29:00) [7]

MessageDLG


Woolen   (2005-11-03 15:27:00) [8]


> да, это известный "глюк" встроенного отладчика
>
> не обращай внимания, содержимое строки на самом деле то
> самое, что ты и ожидаешь

Спасибо.
Тогда возникает еще одна проблема: при отправке запроса в другую систему, она матерится и мне надо посмотреть содержимое этой строки (она и является параметрами запроса). Какие варианты есть, кроме ShowMessage?


Гаврила   (2005-11-03 15:23:00) [9]


> Какая смета?


Это я не то из буфферап вставил, сорри ))


Woolen   (2005-11-03 15:21:00) [10]

Какая смета?


Digitman   (2005-11-03 15:17:00) [11]


> при превышении 4096 символов строку начинает глючить


да, это известный "глюк" встроенного отладчика

не обращай внимания, содержимое строки на самом деле то самое, что ты и ожидаешь


Гаврила   (2005-11-03 15:08:00) [12]

Удалено модератором


Woolen   (2005-11-03 15:05:00) [13]

Я, наверное, не достаточно хорошо объяснил. Я не ищу там символов, я их туда кладу, а они там не появляются. Вместо них появляется вся, что угодно, только не то, что надо.


erika   (2005-11-03 14:57:00) [14]

попробуй отсекать все запятые   и по  средством pos  переходить на   следующий   символ, как  вариант, возможно  и   не  лучший


Наверх

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