Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с длиной строки 
:(
    Опции темы
NieL
Дата 19.2.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 10.2.2008

Репутация: 1
Всего: 1



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

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 = '').
PM MAIL   Вверх
cemick
Дата 19.2.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 416
Регистрация: 6.7.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 6



а как тебя объявлена "s"?
PM MAIL WWW   Вверх
NieL
Дата 19.2.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 10.2.2008

Репутация: 1
Всего: 1



Цитата(cemick @ 19.2.2009,  18:25)
а как тебя объявлена "s"?

Код

var 
  s: string

PM MAIL   Вверх
Данкинг
Дата 19.2.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



А если брать trim (f1.AsString) ?

Это сообщение отредактировал(а) Данкинг - 19.2.2009, 19:35


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
NieL
Дата 19.2.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 10.2.2008

Репутация: 1
Всего: 1



Вот, в этом случае тоже возвращаетася пустая строка почему-то
Код

var
  s: String;
  i: Integer;
begin
  s := '';
  for i := 16000 to 30000 do
    s := s + IntToStr(i) + ',';

  ShowMessage(s + #13#10 + IntToStr(SizeOf(s)));

PM MAIL   Вверх
Christoph
Дата 19.2.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

Репутация: 1
Всего: 11



Цитата(NieL @ 19.2.2009,  22:51)
Вот, в этом случае тоже возвращаетася пустая строка почему-то
Код

var
  s: String;
  i: Integer;
begin
  s := '';
  for i := 16000 to 30000 do
    s := s + IntToStr(i) + ',';

  ShowMessage(s + #13#10 + IntToStr(SizeOf(s)));

Строка S не пустая, можешь проверить в отладке, или написать так
Код

Memo1.Text:=s;



--------------------
user posted image
PM MAIL ICQ   Вверх
NieL
Дата 20.2.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 10.2.2008

Репутация: 1
Всего: 1



Цитата(Christoph @  19.2.2009,  23:45 Найти цитируемый пост)
Строка S не пустая, можешь проверить в отладке, или написать таккод Pascal/Delphi1:Memo1.Text:=s;


Опа...!!! выводится. А можно ли как-нубудь передать строку в текст SQL:

Что-то типа вот этого только у меня при передаче s как string в sql передается пустая строка и запрос не выполняется, может нужно указать другой тип формата вывода?

Код

SQL.Text := Format(Select * from Item where ID in (%s)', [str])

PM MAIL   Вверх
Kbl4AH
Дата 20.2.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 1
Всего: 15



Цитата(NieL @  20.2.2009,  00:08 Найти цитируемый пост)
А можно ли как-нубудь передать строку в текст SQL:

не так - 
Код

'Select * from Item where ID in (%s)'

а так   - 
Код

Memo1.Text := s;
'Select * from Item where ID in (%' + Memo1.Text + ')'


Это сообщение отредактировал(а) Kbl4AH - 20.2.2009, 01:09
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1008 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.