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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 11:18   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А активизацию ZQuery3 вынесли из прорисовки канвы? Напоминаю - он должен быть активизирован только один раз
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.12.2011, 11:27   #12
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А активизацию ZQuery3 вынесли из прорисовки канвы? Напоминаю - он должен быть активизирован только один раз
да, конечно, в прорисовке осталось только
Код:
if ZQuery3.Locate('cid;fid',VarArrayOf([ZQuery1.FieldByName('cid').AsInteger,ZQuery1.FieldByName('fid').AsInteger]),[]) then
    while not ZQuery3.eof and
          (ZQuery3.FieldByName('cid').AsInteger=ZQuery1.FieldByName('cid').AsInteger) and
          (ZQuery3.FieldByName('fid').AsInteger=ZQuery1.FieldByName('fid').AsInteger) do
          begin

    str:=ZQuery3.FieldByName('who').AsString;
    if str='' then str:=' ' else str:=str+': ';
    st:=st+str+'8 '+'('+ZQuery3.FieldByName('code').AsString+') '+ZQuery3.FieldByName('phone').AsString+'; ';
    ZQuery3.Next;
   end;
{Shadowevil} вне форума Ответить с цитированием
Старый 22.12.2011, 12:27   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Циклы подобного рода
Код:
for k:=1 to i-1 do
  st2:=st2+st[k];
можно заменить одной функцией Copy
2. Вместо ZQuery3 можно попробовать ADOTable с индексом и поиск не Locate, а по индексу методом Seek. Он точно будет быстрее Locate
3. Можно информацию из ZQuery3 выгрузить в динамический массив символьных строк, в каждой из которых уже сформирован список телефонов. Индекс строки массива должен совпадать с ZQuery1.RecNo и при прорисовке просто по этому индексу дергать нужную строку. Если телефонов нет, то должна быть пустая строка с соответствующим индексом в массиве
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.12.2011, 13:39   #14
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
1. Циклы подобного рода
Код:
for k:=1 to i-1 do
  st2:=st2+st[k];
можно заменить одной функцией Copy
2. Вместо ZQuery3 можно попробовать ADOTable с индексом и поиск не Locate, а по индексу методом Seek. Он точно будет быстрее Locate
3. Можно информацию из ZQuery3 выгрузить в динамический массив символьных строк, в каждой из которых уже сформирован список телефонов. Индекс строки массива должен совпадать с ZQuery1.RecNo и при прорисовке просто по этому индексу дергать нужную строку. Если телефонов нет, то должна быть пустая строка с соответствующим индексом в массиве
вот, именно 3-м способом я и хотел попробовать сделать, только вот как реализовать это пока не знаю
{Shadowevil} вне форума Ответить с цитированием
Старый 22.12.2011, 14:14   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var xTelefons: array of String;
    xCount: Integer;
...
  ZQuery1.First;
  while not ZQuery1.Eof do begin
    s:='';
    if ZQuery3.Locate('cid;fid',VarArrayOf([ZQuery1.FieldByName('cid').AsInteger,ZQuery1.FieldByName('fid').AsInteger]),[]) then
      while not ZQuery3.eof and
            (ZQuery3.FieldByName('cid').AsInteger=ZQuery1.FieldByName('cid').AsInteger) and
            (ZQuery3.FieldByName('fid').AsInteger=ZQuery1.FieldByName('fid').AsInteger) do begin
        s:=s+...
        ZQuery3.Next;      
      end;
    Inc(xCount);
    SetLength(xTelefons,xCount);
    xTelefons[xCount-1]:=s;
    ZQuery1.Next;
  end;
Индекс у xTelefons начинается с 0. RecNo у ZQuery1 не помню. Или с 0 или с 1. Если с 1, то к массиву обращение с RecNo-1
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.12.2011, 14:50   #16
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
var xTelefons: array of String;
    xCount: Integer;
...
  ZQuery1.First;
  while not ZQuery1.Eof do begin
    s:='';
    if ZQuery3.Locate('cid;fid',VarArrayOf([ZQuery1.FieldByName('cid').AsInteger,ZQuery1.FieldByName('fid').AsInteger]),[]) then
      while not ZQuery3.eof and
            (ZQuery3.FieldByName('cid').AsInteger=ZQuery1.FieldByName('cid').AsInteger) and
            (ZQuery3.FieldByName('fid').AsInteger=ZQuery1.FieldByName('fid').AsInteger) do begin
        s:=s+...
        ZQuery3.Next;      
      end;
    Inc(xCount);
    SetLength(xTelefons,xCount);
    xTelefons[xCount-1]:=s;
    ZQuery1.Next;
  end;
Индекс у xTelefons начинается с 0. RecNo у ZQuery1 не помню. Или с 0 или с 1. Если с 1, то к массиву обращение с RecNo-1
Большое спасибо, попробую сделать

*****************************

Сделал) сейчас вообще все летает как доктор прописал)) Аватар спасибо огромное за помощь!

Последний раз редактировалось {Shadowevil}; 23.12.2011 в 06:55.
{Shadowevil} вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBImage загрузка из Таблицы Elementery Общие вопросы Delphi 9 13.06.2013 21:52
Загрузка программы в память CodeNOT Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 13.12.2011 23:58
Загрузка данных из таблицы Vladuk БД в Delphi 1 24.04.2011 20:16
Набор данных и загрузка другой таблицы Turbine БД в Delphi 1 21.03.2011 14:26
Загрузка данных и построение таблицы. Lisichka Microsoft Office Word 12 04.02.2009 15:31