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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2016, 15:23   #11
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Serge_Bliznykov, спасибо, буду пробовать!

Цитата:
в запросе нужно добавить Order By Фамилия
Этот момент обязателен? Если да - то поясните, пожалуйста, зачем.
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 15:40   #12
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Пока курил понял, что сортировка обязательна
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 16:01   #13
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Сделал вот так:
Код:
  PrevFio := '';
  x:=1;
  while not ADOQuery1.EOF do begin
    if ADOQuery1.FieldByName('a').AsString<>PrevFio then begin
     PrevFio := ADOQuery1.FieldByName('a').AsString;
     sg[x,1] := PrevFio;
     Inc(x);
    end;
    sg[x,1] := ADOQuery1.FieldByName('b').AsString;
    sg[x,2] := ADOQuery1.FieldByName('c').AsString;
    sg[x,3] := ADOQuery1.FieldByName('d').AsString;
    sg[x,4] := ADOQuery1.FieldByName('e').AsString;
    sg[x,5] := ADOQuery1.FieldByName('f').AsString;
    sg[x,6] := ADOQuery1.FieldByName('g').AsString;
    Inc(x);
    ADOQuery1.Next;
  end;

  for i:=1 to StringGrid1.RowCount do
for j:=1 to StringGrid1.ColCount do
StringGrid1.Cells[i,j]:=sg[j,i];
Хотел посмотреть в стрингриде сперва что получится, прежде чем выводить в эксель. Ошибка выскакивает на этой строке:
Код:
sg[x,1] := PrevFio;
Что я делаю не так?

Объявил массив таким образом:
Код:
sg: array of array of string;
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 16:13   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Что я делаю не так?
рискну предположить, что забываете выделить память (динамические массивы нужно обязательно задавать размер перед использованием см. SetLength)
// и, кстати, индексация там от нуля
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.03.2016, 16:36   #15
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Да, плюс еще как обычно была мутотня с тем, что в стринггриде [столбец, строка], а не как у людей :D

Такой вопрос тебе: если в изначальном варианте я конкретно знал сколько будет строк в массиве и сколько будет столбцом. Теперь же я знаю только количество столбцов. Как динамически выделять память что ли или по-другому как с этим работать?
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 16:42   #16
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

ADOQuery1.RecordCount?
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 31.03.2016, 16:47   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
ADOQuery1.RecordCount?
не, на каждую НОВУЮ фамилию надо новую строку.

nactyx, либо сделайте ещё один запрос, который возвращает количество различных фамилий,
либо пройдитесь первый раз, просто подсчитайте, сколько разных фамилий в вашем датасете,
либо, при появлении каждой новой фамилии увеличивайте размер на единицу (кстати, последний вариант самый не эффективный, несмотря на простоту).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.03.2016, 16:50   #18
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
nactyx, либо сделайте ещё один запрос, который возвращает количество различных фамилий
Кажется оптимальным вариантом. И потом к этому числу прибавить число записей в первоначальном запросе. Я правильно понял?
nactyx вне форума Ответить с цитированием
Старый 01.04.2016, 09:53   #19
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

А теперь самое последнее осталось:
как сделать вывод таким образом, что на каждые сутки из периода - создавалась в экселе новая страничка с названием вида "ДД.ММ.ГГГГ" и с записями, которые принадлежат этому числу. В котором месте и что примерно надо исправлять в выводе?
nactyx вне форума Ответить с цитированием
Старый 01.04.2016, 10:27   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
создавалась в экселе новая страничка
гуглите по WorkSheets.Add
пример:
Код:
Sheet:=XL.ActiveWorkbook.WorkSheets.Add;
Цитата:
и с записями, которые принадлежат этому числу. В котором месте и что примерно надо исправлять в выводе?
добавить в запрос нужное поле с датой.
добавить в запрос сортировку сначала по дате, потом по фамилии
Код:
... ORDER BY MyDate, FIO
дальше можно по разному действовать.
можно, например, примерно так:

Код:
ADOQuery1.Open; 
PrevDate := 0;
Массив обнулить.
while Not ADOQuery1.EOF do begin 
   if ADOQuery1.FieldByName('MyDate').AsDateTime<>PrevDate then begin
        <если массив с данными не пуст - вывести его в текущую страницу MS Excel>
        PrevDate := ADOQuery1.FieldByName('MyDate').AsDateTime; 
        создать новую страницу в MS Excel с именем PrevDate
        Обнулить массив и выделить нужную память под массив 
        PrevFio := '';
        x:=1;
   end;
   
   далее работаем с данной новой страницей
   if ADOQuery1.FieldByName('a').AsString<>PrevFio then begin
     PrevFio := ADOQuery1.FieldByName('a').AsString;
     sg[x,1] := PrevFio;
     Inc(x);
   end;
    
   <заполнение массива данными>
   ADOQuery1.Next;
end;  
 
<если массив с данными не пуст - вывести его в текущую страницу MS Excel>
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из Excel в MS SQL Server 2008 с помощью Delphi XE7 TimurUfa БД в Delphi 0 16.01.2015 12:20
Delphi + Excel+ MS SQL Server bobik47 БД в Delphi 4 30.08.2013 15:07
Экспорт в Excel из Delphi через SQL запрос betirsolt БД в Delphi 1 19.05.2013 18:11
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
Delphi c SQL и выгрузка в Excel или word girl23 БД в Delphi 7 24.10.2007 17:56