Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > проблемы с длиной строки


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

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 = '').

Автор: cemick 19.2.2009, 18:25
а как тебя объявлена "s"?

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

Код

var 
  s: string

Автор: Данкинг 19.2.2009, 19:35
А если брать trim (f1.AsString) ?

Автор: 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)));

Автор: Christoph 19.2.2009, 23:45
Цитата(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;

Автор: NieL 20.2.2009, 00:08
Цитата(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])

Автор: Kbl4AH 20.2.2009, 01:04
Цитата(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 + ')'

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)