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

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

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

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

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

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

Будем пробовать. Спасибо большое! Принцип похожий как и в случае с фамилиями, если я правильно понял.
nactyx вне форума Ответить с цитированием
Старый 01.04.2016, 12:05   #22
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от nactyx Посмотреть сообщение
Принцип похожий как и в случае с фамилиями, если я правильно понял.
ну да, можно решить данную задачу аналогично предыдущей.

Но можно было и по другому.
Например, получить отдельным запросом все нужные даты, потом в цикле выбирать данные за один день (запрос с параметром).
Просто смотрите, как Вам лично проще и понятней.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2016, 09:56   #23
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Но можно было и по другому.
Например, получить отдельным запросом все нужные даты, потом в цикле выбирать данные за один день (запрос с параметром).
Просто смотрите, как Вам лично проще и понятней.
Такой вариант кажется проще и понятней, если честно. Надо поэкспериментировать.
nactyx вне форума Ответить с цитированием
Старый 05.04.2016, 10:37   #24
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от nactyx Посмотреть сообщение
Такой вариант кажется проще и понятней, если честно. Надо поэкспериментировать.
Так всё в ваших руках. Пробуйте. Экспериментируйте.
Выбирайте лучшее.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2016, 11:17   #25
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Не могу понять, почему зацикливается. Хочу в качестве теста заполнить массив для вывода только по одной конкретной дате. И на первых двух зацикливается.
Код:
  while not ADOQuery1.EOF do begin
    if ADOQuery1.FieldByName('Date').AsString = '24.03.2016' then
  begin
    if ADOQuery1.FieldByName('a').AsString <> PrevFio then begin
     PrevFio := ADOQuery1.FieldByName('a').AsString;
     sg[x,0] := 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;
    sg[x,7] := Copy(ADOQuery1.FieldByName('Date').AsString, 1, 10);
    Inc(x);
    ADOQuery1.Next;
  end;
  end;
Запрос:
Код:
SELECT a, b, c, d, e, f, g, Date
  FROM dbo.table
  where (Date BETWEEN '01.03.2016'  AND '31.03.2016')
  and ([Master] = 'Иванов Петр Сидорович')
  order by Date, a
ADOQuery1 выглядит так после запроса:

Последний раз редактировалось nactyx; 05.04.2016 в 11:33.
nactyx вне форума Ответить с цитированием
Старый 05.04.2016, 11:34   #26
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 if ADOQuery1.FieldByName('Date').AsString = '24.03.2016'
а вот сразу НЕТ!
приучайте себя, пожалуйста, что переводить дату в строковый вид нужно (если без этого нельзя обойтись) ТОЛЬКО для вывода это даты (в отчёт, на экран, в лейбл и т.п.)! Внутри надо работать только с типом данных TDateTime


p.s. а зацикливается, потому что Вы ADOQuery1.Next;
поместили в блок, где выполняется код при выполнении условия (проверки).
Подумайте, сколько раз выполнится цикл, в котором условие входа в блок не выполняется. а переход на следующую запись внутри этого блока!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2016, 11:39   #27
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Так вот он дальше этих двух строк не идет, хотя должен. Или меня совсем глючит.
Ну вот на первом же шаге дата совпала, далее мне нужно заполнить массив. А он дальше и не идет, хотя результат сравнения True.

Про строковый вид учту.

Upd: Вынес ADOQuery1.Next; на "уровень" выше, отработало. Но результат пустой почему-то теперь стал.
nactyx вне форума Ответить с цитированием
Старый 05.04.2016, 11:42   #28
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я вообще имел в виду другое
в одном запросе - все даты.
другой запрос - параметрический. его получаем в цикле по нужной дате.

ну, этот код будет выглядеть примерно так:
Код:
ADOQueryAllDates.Close;
ADOQueryAllDates.SQL.Text := 'select MyDate from table1 where ... group by MyDate';
ADOQueryAllDates.Open;
while Not ADOQueryAllDates.EOF do begin
   dt := ADOQueryAllDates.FieldByName('MyDate').AsDateTime;
   
   // создать нужную страницу в Excel с именем = даты, взятой из dt
   .....
   
   // выполняем параметрический запрос
   ADOQuery2.Close;
   ADOQuery2.ParamByName('dt').Value := dt;
   ADOQuery2.Open;
   while Not ADOQuery2.EOF do begin
      заполняем массив данными из ADOQuery2
 
     ADOQuery2.Next;
   end;

  // вывести полученный массив на страницу Excel
  .......

  ADOQueryAllDates.Next;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.04.2016, 11:44   #29
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Сделал так:
Код:
while not ADOQuery1.EOF do begin
    if ADOQuery1.FieldByName('Date').AsString = '24.03.2016' then
  begin
    if ADOQuery1.FieldByName('a').AsString <> PrevFio then begin
     PrevFio := ADOQuery1.FieldByName('a').AsString;
     sg[x,0] := 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;
    sg[x,7] := Copy(ADOQuery1.FieldByName('Date').AsString, 1, 10);
    Inc(x);
  end;
    ADOQuery1.Next;
  end;
И получается хрень. Отрабатывают судя по всему только две первые строки и две последние.
nactyx вне форума Ответить с цитированием
Старый 05.04.2016, 11:46   #30
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я вообще имел в виду другое
в одном запросе - все даты.
другой запрос - параметрический. его получаем в цикле по нужной дате.
Попробую. Пока плохо понимаю, если честно.
nactyx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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