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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 20:51   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это не повод так убирать в формы компоненты )
И кстати я рекомендую вообще обойтись одним квериком на все отчеты.
А еще лучше в самом документе экзеля на VBA запрограммировать наполнение страниц.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2013, 21:14   #12
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это не повод так убирать в формы компоненты )
И кстати я рекомендую вообще обойтись одним квериком на все отчеты.
А еще лучше в самом документе экзеля на VBA запрограммировать наполнение страниц.
Строка select у меня длиннее 4096 символов) Сильно много разбивать придется если делать через одну кверю)
Я уже 2 недели долбусь с эти заданием. Уже пробовал реализовать и через хранимые процедуры и через excel, но везде какие-то грабли. Была проблема из за битностей (система и sql 64 bit, а офис 32 bit) и постоянно вылетают ошибки по этому поводу.
И честно говоря с VBA очень плохо дружу и не представляю даже примерно как это реализовать...

Пошел уже самым прямым для меня путем - через delphi, который хоть в какой-то мере знаю))

Если можете дать какие-то примеры подобных выгрузок, буду очень признателен, по тому что все сроки уже прошли(((
8tomat8 вне форума Ответить с цитированием
Старый 03.11.2013, 21:46   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Строка select у меня длиннее 4096 символов)
Это говорит только о том что у тебя совершенно неудачная структура базы, раз такой селект огромный идет от клиента. Сделай из него вьюшку или хранимую процедуру, возвращающую таблицу или наполняющую данными временную таблицу.
Цитата:
везде какие-то грабли
Опиши. Не стесняйся.
Цитата:
какие-то примеры подобных выгрузок
Не могу. Я же не в курсе твоей задачи и ее особенностей )
Я лично как уже и сказал такие запросы, пусть даже они с фетчами заворачиваю в хранимые процедуры, а на клиенте их только вызываю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2013, 22:40   #14
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

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

Опиши. Не стесняйся.

Не могу. Я же не в курсе твоей задачи и ее особенностей )
Я лично как уже и сказал такие запросы, пусть даже они с фетчами заворачиваю в хранимые процедуры, а на клиенте их только вызываю.
Базу строил не я, и не осилил бы такое) Запрос у нас длинный по тому что отчеты огромные. Например у 1го 47колонок, у остальных примерно столько же. И берутся отчеты тоже из огромного массива данных...

Я могу все подробности скинуть в аську либо по почте, не хочу на форумах выкладывать все)


PS Вот например то что я пытался делать через хранимую процедуру
Код:
USE [DATA]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CreateExcelDocs]

AS
insert into openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0; Database=C:\TestBook.xlsx', 'SELECT * From [Sheet1$]')
select FUSER from [TREG]
RETURN
На что хватаю ошибку
Цитата:
Не удалось обработать объект "SELECT * From [Sheet1$]". Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)"
обнаружил, что у объекта либо нет ни одного столбца, либо текущий пользователь не имеет разрешения на доступ к объекту.
Поборол 1 раз каким-то чудом и то у меня вывалилась ошибка о том что неверные имена колонок...

Последний раз редактировалось Stilet; 04.11.2013 в 11:38.
8tomat8 вне форума Ответить с цитированием
Старый 04.11.2013, 01:09   #15
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Решил проблему с длинными запросами. Занес все запросы в отдельную таблицу в SQL и беру их от туда.
Код:
unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ComObj, Data.DB, Data.Win.ADODB,
  Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    Query1: TADOQuery;
    Button1: TButton;
    Label1: TLabel;
    Query2: TADOQuery;
    Label2: TLabel;
    Label3: TLabel;
    Date1: TDateTimePicker;
    Date2: TDateTimePicker;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    procedure Button1Click(Sender: TObject);
  private
    //Query: array [1..10] of TADOQuery;
  public
  end;

var
  Form1: TForm1;
  i: integer;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var XL,Sheet: Variant;
j: integer;
Col: integer;
s, po : string;
Where: string;
Otch: integer;
begin
Otch:=1;
case Otch of
 10:
    Where:='W';
 else
   Where:='WHERE TCL_FIC_PER_V_.FCOD='+char(39)+'прибуття'+char(39)
      +' AND FOP_DATE >= '+char(39)+s+char(39)+' AND FOP_DATE <= '+char(39)
      +po+char(39)+' AND FEND_FILE = '+char(39)+''+char(39)
      +' AND (TCL_FIC_NMK_.FCOD LIKE '+char(39)+'316%'+char(39)
      +' and (FOP_DATE BETWEEN '+char(39)+'20121001'+char(39)
      +' AND '+char(39)+'20131130'+char(39)+'))';
end;
Label2.Caption:=(TimeToStr(Time));
s:= formatdatetime('dd-mm-yyyy', Date1.Date);
po:= formatdatetime('dd-mm-yyyy', Date2.Date);
Where:='WHERE TCL_FIC_PER_V_.FCOD='+char(39)+'прибуття'+char(39)
      +' AND FOP_DATE >= '+char(39)+s+char(39)+' AND FOP_DATE <= '+char(39)
      +po+char(39)+' AND FEND_FILE = '+char(39)+''+char(39)
      +' AND (TCL_FIC_NMK_.FCOD LIKE '+char(39)+'316%'+char(39)
      +' and (FOP_DATE BETWEEN '+char(39)+'20121001'+char(39)
      +' AND '+char(39)+'20131130'+char(39)+'))';
Query1.Active:=False;
Query1.SQL.Clear;
Query1.SQL.Add('Select FSELECT,FTHIRD From [GDPDATA].[dbo].[TSELECTS] WHERE FID='+IntToStr(Otch));
Query1.Active:=True;
//QUery2.SQL.Add:=('SELECT  FROM [GDPDATA].[dbo].[TSELECTS] WHERE FID='+IntToSTR(1));
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add(Query1.FieldByName('FSELECT').AsString+Where+Query1.FieldByName('FTHIRD').AsString);
Query2.Open;
XL:= CreateOleObject('Excel.Application');
XL.Workbooks.Open('C:\template.xlsx',0,True);
i:= 2;
Sheet:= XL.ActiveWorkBook.Sheets[Otch];
Query2.First;
Col := Query2.FieldCount;
while not Query2.Eof do
begin
for j := 1 to Col do
begin
Sheet.Cells[i,j]:= Query2.Fields[j-1].AsString;
end;
inc(i);
Query2.Next;
Label1.Caption:=IntToStr(i-1);
end;
Label3.Caption:=(TimeTostr(Time));
XL.Visible:= true;
XL.ActiveWorkbook.SaveAS('C:\TestBook1.xlsx');
Sheet:= UnAssigned;
XL:= UnAssigned;
end;

end.
8tomat8 вне форума Ответить с цитированием
Старый 04.11.2013, 11:41   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Например у 1го 47колонок, у остальных примерно столько же
Ну это еще мелочи. Мне и покруче попадались отчетности с иерархией.
Цитата:
insert into openrowset('Microsoft.ACE.OLEDB.12. 0','Excel 12.0; Database=C:\TestBook.xlsx', 'SELECT * From [Sheet1$]')
select FUSER from [TREG]
Ну это наверное не лучший вариант. Я в свое время тоже пробовал (но в ворде) - оказалось нужно не из СУБД формировать отчет, а из Ворда считывать из базы, подключившись. Потому и посоветовал VBA.
Цитата:
Занес все запросы в отдельную таблицу в SQL и беру их от туда.
Можно и так, но твоя проблема не в этом была, а в том что ты кверики на форме подтер неаккуратно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2013, 12:26   #17
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну это еще мелочи. Мне и покруче попадались отчетности с иерархией.

Ну это наверное не лучший вариант. Я в свое время тоже пробовал (но в ворде) - оказалось нужно не из СУБД формировать отчет, а из Ворда считывать из базы, подключившись. Потому и посоветовал VBA.

Можно и так, но твоя проблема не в этом была, а в том что ты кверики на форме подтер неаккуратно.
Я оставил только 2 квери и сейчас на них нормально работает) Сейчас доделаю эту избушку и попробую к ней прикрутить много поточность... заодно попробую как оно)
8tomat8 вне форума Ответить с цитированием
Старый 04.11.2013, 13:55   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Попробуй. Почему бы нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2013, 17:46   #19
8tomat8
Пользователь
 
Регистрация: 14.09.2013
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Попробуй. Почему бы нет.
Спасибо за пинки) Проклял писать это на delphi и реализовал через excel))) Работает на ура)
8tomat8 вне форума Ответить с цитированием
Старый 06.11.2013, 19:45   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вотож. И я тоже. Только не в Экзеле а в HTML отчеты делаю. Хотя раньше в Ворде делал, но там были на то основания.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADOQuery, Delphi Антон Лысенко Помощь студентам 2 24.11.2012 23:04
COmboBox Items from ADOQuery Delphi 7 detalik Компоненты Delphi 3 04.05.2011 20:38
DElphi 7 Инструкция по работе с ADOQuery? insense Помощь студентам 1 01.07.2010 15:27
[delphi] ADOQuery Проблема sPan4eZ БД в Delphi 14 17.09.2009 15:44
Помогите с запросом ADOQuery в Delphi 7 Wolverine БД в Delphi 21 25.05.2009 15:03