|
#16
|
|||
|
|||
Еще раз спасибо, но мне нужно как просто вызвать и открыть на экране экселевский документ из дельфи. Макросы там все сами сделают...
|
#17
|
||||
|
||||
Так тебе нужно открыть файл готовый?
Тогда делай так: ShellExecute(Application.Handle,nil,PChar(DocPath) ,nil,nil,SW_SHOWMAXIMIZED); Хорошо написанная программа не требует документации ICQ 9-184-668. |
#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;//Выводим результат суммирования в Label 2. Напишу частный случай. Код:
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
|
|||
|
|||
Спасибо, но это не совсем то, что мне нужно... Особенно не знаю как сделать это в ситуации, которую я описал в начале предыдущего моего поста...
|