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

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

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

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

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

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

Всем доброго времени суток! Нужна помощь, т.к. забыл как делаются подобные вещи.

Имеется вот такая программа:


Где осуществляется выбор мастера и выбор периода.
Далее, по SQL-запросу осуществляется некая выборка:
Код:
SELECT a, b, c, d, e, f, g
FROM [DB].[dbo].[Table]
where (OpenDate BETWEEN 'первая_дата'  AND 'вторая дата')
and ([Master] = 'выбранное_ФИО_мастера')
Первый вопрос: как в запросе использовать переменные? Чтобы брать значения с формы.

Второй вопрос: этот некий результат в определенном виде засунуть в EXCEL. Каким образом?
Например, чтобы в excel было так: первая строка - ФИО_ВЫБРАННОГО_МАСТЕРА
А со следующей строки вида a, b, c, d, e, f, g и т.д.
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 12:04   #2
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Работа с Excel
запрос с параметром
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 31.03.2016, 12:14   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

буквально несколько дней назад тут на форуме подобное обсуждалось:

http://programmersforum.ru/showthread.php?t=291080

http://programmersforum.ru/showthread.php?p=1589920
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.03.2016, 12:20   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
ADO.SQL.Text:= 'SELECT a, b, c, d, e, f, g '+
                        'FROM [DB].[dbo].[Table] '+
                        'where (OpenDate BETWEEN :firstdate  AND :lastdate) '
                        'and ([Master] = :mastername) ';

ADO.ParameterByname('firstdate').Value:=DataTimePictireFirst.AsDate;
ADO.ParameterByname('lastdate').Value:=DataTimePictireLast.AsDate;
ADO.ParameterByname('mastername').Value:=ComboboxMasterList.Text;
Выгрузка в Excel внизу страницы смотри похожие темы
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.03.2016, 12:40   #5
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Всем спасибо большое, вспомнил! С параметрами разобрался, всё чудесно. Сейчас с EXCEL будем разбираться.
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 14:08   #6
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Связал с excel, всё чудно. Но есть один момент и не понимаю, как его реализовать.

Получаю я в результате своего запроса примерно такую таблицу:


А мне нужно в excel получить что-то примерно такого вида:


Я так понимаю нужно запрос усовершенствовать, но как это можно сделать? Или все-таки работать непосредственно с выводом в excel уже? Подскажите, коллеги.

Вывожу в excel вот таким образом (откопал старый проект):
Код:
  // Размеры выводимого массива данных
  ColCount := ADOQuery1.FieldCount;
  RowCount := ADOQuery1.RecordCount;

  if ADOQuery1.RecordCount = 0 then ShowMessage('Нет записей в таблице')
  else begin
    ArrayData := VarArrayCreate([0, ADOQuery1.RecordCount, 0, ADOQuery1.FieldCount], varVariant);
    for i := 0 to ADOQuery1.RecordCount - 1 do begin
      for  j := 0 to ADOQuery1.FieldCount - 1 do
         ArrayData[i, j] := ADOQuery1.Fields[j].AsVariant;
      ADOQuery1.Next;
    end;
  ADOQuery1.Close;

  // Левая верхняя ячейка области в которую будем выводить данные
  Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
  // Правая нижняя
  Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + RowCount - 1, BeginCol + ColCount - 1];

  // Область в которую будем выводить данные
  Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];

  // Сам вывод данных
  Range.Value := ArrayData;

  // Делаем Эксель видимым
  ExcelApp.Visible := true;
  end;

Последний раз редактировалось nactyx; 31.03.2016 в 14:50.
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 14:50   #7
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Никто не подскажет?
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 14:59   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

я бы колдовал с выводом, сначала делал запрос на фамилию выводил первую потом по ней все данные затем следующую и Т.Д. в 2 запроса.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 31.03.2016, 15:02   #9
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Dvoishnik Посмотреть сообщение
я бы колдовал с выводом, сначала делал запрос на фамилию выводил первую потом по ней все данные затем следующую и Т.Д. в 2 запроса.
А конкретнее? Я понимаю, что надо колдовать с выводом, спасибо. А что конкретно?
nactyx вне форума Ответить с цитированием
Старый 31.03.2016, 15:06   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Или все-таки работать непосредственно с выводом в excel уже?
однозначно с выводом в Excel
в запросе нужно добавить Order By Фамилия

а в цикле вывода если фамилия не равна запомненной, то выводить на новую строчку фамилию и запоминать новую:
Код:
ADOQuery1.Open;
PrevFio := '######---previuous_FIO@@@@';
rownum:=0;
while not ADOQuery1.EOF do begin
   if ADOQuery1.FieldByName('FIO').AsString<>PrevFio then begin
     PrevFio:=ADOQuery1.FieldByName('FIO').AsString;
     Вывести в Excel в строку rownum фамилию PrevFIO
     Inc(rownum);
   end;
   Вывод значений в Excel в строчку rownum
   Inc(rownum);
   ADOQuery1.Next;
end;
вот примерно так...
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