![]() |
|
|
#16
|
|||
|
|||
|
Еще раз спасибо, но мне нужно как просто вызвать и открыть на экране экселевский документ из дельфи. Макросы там все сами сделают...
|
|
#17
|
||||
|
||||
|
Так тебе нужно открыть файл готовый?
Тогда делай так: ShellExecute(Application.Handle,nil,PChar(DocPath) ,nil,nil,SW_SHOWMAXIMIZED); |
|
#18
|
|||
|
|||
|
Он ругается на ShellExecute... Нужно что-то в uses добавить? или еще что?
И что вместо nil можно написать? |
|
#19
|
|||
|
|||
|
uses
ShellAPI; |
|
#20
|
|||
|
|||
|
большое спасибо!
|
|
#21
|
|||
|
|||
|
У меня еще два вопроса.
1. Предположим есть простенькая табличка dbgrid, связанная с аксэссовской базой. В ней пять строк и два столбца - число и количество. Каким способом можно посчитать сумму элементов в столбце количество? SQL - запросом или кодом дельфи? Можно кратенько объяснить? 2. Каким образом извлечь из столбца "число" (в смысле там дата) только месяц, чтобы потом вывести на экран результаты только за май, например? Надеюсь на вашу помощь... |
|
#22
|
|||
|
|||
|
1. Кидаете на форму ADOQuery и пишем такой код.
Код:
With ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT SUM(kol) FROM main');//поле kol - количество (пишете ваше название)
Open;
end;
Label1.Caption:=ADOQuery1.Fields[0].AsString;//Выводим результат суммирования в Label2. Напишу частный случай. Код:
With ADOQuery2 do
begin
Close;
SQL.Clear;
With Parameters.AddParameter do
begin
Name:= 'dt1';
DataType:=ftDateTime;
Value:='01.05.2004';
end;
With Parameters.AddParameter do
begin
Name:= 'dt2';
DataType:=ftDateTime;
Value:='31.05.2004';
end;
SQL.Add('SELECT * FROM main WHERE date> :dt1 AND date< :dt2');
Open;
end;А потом можно довести это безобразие до ума. |
|
#23
|
|||
|
|||
|
Огромное спасибо! Помогло!
И еще последний вопрос. На основании второго случая, что вы написали, у меня получилась вторая таблица, которая, судя по всему нигде не хранится, в которой выводятся результаты за выбранный в комбобоксе месяц. Теперь на основании этого мне нужно сделать отчет именно за выбранный месяц. Отчеты я делал, но здесь я в тупике. Не знаю что указывать в DataSet QuickRep'a и его компонентов. Подскажите плиз! И вот еще - не подскажете почему объект TQRExpr не видет никаких таблиц при нажатии на кнопку Database Field? Как мне сделать так, чтобы он в отчете в каждой строчке суммировал значения в 10 столбцах слева от самого объекта? Последний раз редактировалось niqx, 17.05.2008 в 13:47. |
|
#24
|
|||
|
|||
|
Цитата:
Вот пример в дополнение к вышепоказанным. Код:
procedure TFind.ExButClick(Sender: TObject);
var
XL, Cell1, Cell2, ArrayData: Variant;
RowCount: integer;
BeginCol, BeginRow,i,ColCount:byte;
begin
BeginCol := 1; // Начальные координаты ячейки
BeginRow := 3;
RowCount := DM.Query1.RecordCount; //Количество строк
ColCount := 3; //Количество столбцов
XL := CreateOleObject('Excel.Application'); //создаем Excel
XL.Application.EnableEvents := false; // Отключаем реакцию Excel на события (для ускорения)
XL.WorkBooks.Add; // Добавляем книгу
XL.Rows.Rows[2].Font.Bold:=true; //жирный шрифт
XL.Rows.Rows[2].Font.Size:=10; //размер шрифта
XL.Rows.Rows[2].WrapText := True; //перенос текста по словам
XL.Rows.Rows[2].HorizontalAlignment := 3;//Выравнивание по центру по горизонтали
XL.Rows.Rows[2].VerticalAlignment := 2;//Выравнивание по центру по вертикали
XL.Cells[2,1]:= '№';//делаем шапку таблицы
XL.Cells[2,2]:='Наименование';
XL.Cells[2,3]:='Примечание’;
XL.Columns.Columns[1].ColumnWidth:=7;//устанавливаем ширину столбцов
XL.Columns.Columns[2].ColumnWidth:=29;
XL.Columns.Columns[3].ColumnWidth:=29;
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant); // созданем вариантный массив для заполнения данных из запроса
DM.Query1.First;
for i := 1 to RowCount do
begin
ArrayData[i,1] := DM.Query1['id'];
ArrayData[i,2] := DM.Query1['name'];
ArrayData[i,3] := DM.Query1['note'];
DM.Query1.Next;
end;
Cell1 := XL.Cells[BeginRow-1, BeginCol]; // левая верхняя ячейка области в которую будем выводить данные
Cell2 := XL.Cells[BeginRow+RowCount-1, BeginCol + ColCount-1];//Правая нижняя ячейка области
XL.Range[XL.Cells[BeginRow, BeginCol], Cell2].Value := ArrayData; //вывод данных
XL.Visible := true;
end;
Последний раз редактировалось MegaPiha, 19.05.2008 в 22:18. |
|
#25
|
|||
|
|||
|
Спасибо, но это не совсем то, что мне нужно... Особенно не знаю как сделать это в ситуации, которую я описал в начале предыдущего моего поста...
|