Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2009, 18:34   #1
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию проблемы с длиной строки (возврвщается пустая строка)

есть некий результат запроса, который имеет вид:

main_Id group_id
1 81
2 81
3 81
4 82

Нужно пробегая по записям формировать строки main_id, разделенные запятой с одинаковыми группами и выводить их скажем через ShowMessage

получается:

первая строка - 1,2,3
вторая строка - 4

Делаю так: (вроде как работает как надо)

Код:
cmp_QueryByField_.First;
_Result := 0;
id := f2.AsInteger;
s := '';
while not cmp_QueryByField_.Eof do
begin
  if f2.AsInteger = id then
   s := s + ' '
  else
  begin
    if s[1] = ',' then
     System.Delete(s, 1, 1);
   ShowMessage(S);
   s := '';
  end;
  s := s + f1.AsString;
  id := f2.AsInteger;
  cmp_QueryByField_.Next;
end;
ShowMessage(S);
Проблема в следующем, если результат запроса содержит порядка 3000 записей (строка будет состоять из порядка 2900 id' шников, разделенных запятыми) строка возвращается пустая (s = ''). Проверял длину возвращаемой строку - так она 0 не равна. Почему? Как исправить?

Последний раз редактировалось NieL; 19.02.2009 в 18:41.
NieL вне форума Ответить с цитированием
Старый 19.02.2009, 20:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вроде всё нормально..
Цитата:
строка возвращается пустая (s = '').
а куда строка возращается пустая? не DLL ли? или через ActiveX/COM? (это не межпрограммная передача данных?)

Для отладки сделайте просто примерчик вида:

Код:
var s : AnsiString;
  i : integer;
begin
  s := '';
  for i:=1 to 10000 do
    s := s+ IntToStr(i)+',';
  ShowMessage(s);

Так же особо обрати внимание и проверьте
как описана переменная S (: string, :ShortString, :AnsiString)
выполните
Код:
ShowMessage(IntToStr(sizeOf(s)))
(для AnsiString SizeOf вернёт 4 (т.к. это указатель), а для ShortString - размер будет 256...

Последний раз редактировалось mihali4; 19.02.2009 в 21:24. Причина: Подправил тэги
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2009, 08:13   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Если обьявить s : WideString то должно быть нормально.
FaTaL вне форума Ответить с цитированием
Старый 21.02.2009, 13:31   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Если обьявить s : WideString то должно быть нормально.
ты тысячу раз не прав!
WideString это строка, один символ которой занимает 2 байта
простого String'а вполне хватит

просто нужно учитывать как происходит в программе передача строк и все
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка S. Преобразовать строку, заменив в ней каждое многоточие одной точкой.Строки в C++ slog Помощь студентам 9 16.12.2008 20:14
Присвоить элементу значение текстовой строки так, чтоб строка была в два и более ряда, а не в один alex2008ean Паскаль, Turbo Pascal, PascalABC.NET 1 15.12.2008 05:31
Строка состаяния или загрузачная строка Sergeu Мультимедиа в Delphi 8 27.08.2008 10:32
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Получить вектор длиной N x M (Задачи в инсте) nblx Помощь студентам 4 11.01.2008 23:14