![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Добрый день, уважаемые программисты!
У меня клиентское приложение "Телефонный справочник". С помощью запросов я должна выводить информацию об абонентах и их номера телефонов на экран с помощью DBGrid (с этим проблем не возникло) и записывать эту же информацию в отчёты (RvProject). На защиту преподаватель дал следующее задание: 1) результат запроса ADOQuery1 (а результатом является номер телефона абонента) должен дублироваться в Label. 2) все отчёты сделанные в среде Delphi нужно импортировать в MSWord, а ещё лучше сделать так чтобы они и открывались сразу же в MSWord. Никаких указаний и подсказок он не дал! Помогите пожалуйста! Вот текст программы: Код:
unit LAB5Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RpCon, RpConDS, RpDefine, RpRave, StdCtrls, RpRender,
RpRenderHTML, Grids, DBGrids, DB, ADODB;
type
TForm1 = class(TForm)
RvProject1: TRvProject;
RvDataSetConnection1: TRvDataSetConnection;
Button1: TButton;
DBGrid1: TDBGrid;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Button3: TButton;
Label3: TLabel;
RvRenderHTML1: TRvRenderHTML;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button4: TButton;
Button5: TButton;
Label8: TLabel;
Label9: TLabel;
RvProject2: TRvProject;
RvDataSetConnection2: TRvDataSetConnection;
Label10: TLabel;
Label11: TLabel;
Edit5: TEdit;
Label12: TLabel;
Edit6: TEdit;
Label13: TLabel;
Edit7: TEdit;
Button6: TButton;
Button7: TButton;
Label14: TLabel;
Label15: TLabel;
RvProject3: TRvProject;
RvDataSetConnection3: TRvDataSetConnection;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Edit8: TEdit;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); {Показать все записи}
begin
ADOQuery1.Active:=false;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT*From Таблица1');
ADOQuery1.Active:=true;
end;
procedure TForm1.Button2Click(Sender: TObject); {Запрос 2}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT FName,LName,PhName,City,Street,House,Kv,PhoneNum');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('WHERE PhoneNum='+' "'+ Edit8.Text+'"');
ADOQuery1.Open;
ADOQuery1.Active:=true;
end;
procedure TForm1.Button4Click(Sender: TObject); {Запрос 3}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT PhoneNum');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('WHERE City='+' "'+Edit1.Text+'"');
ADOQuery1.SQL.Add('AND Street='+' "'+Edit2.Text+'"');
ADOQuery1.SQL.Add('AND House='+' "'+Edit3.Text+'"');
ADOQuery1.SQL.Add('AND Kv='+' "'+Edit4.Text+'"');
ADOQuery1.Open;
ADOQuery1.Active:=true;
//Label9.Caption:=IntToStr
end;
procedure TForm1.Button6Click(Sender: TObject); {Запрос 4}
begin
ADOQuery1.Active:=False;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT PhoneNum');
ADOQuery1.SQL.Add('FROM Таблица1');
ADOQuery1.SQL.Add('WHERE FName='+' "'+Edit5.Text+'"');
ADOQuery1.SQL.Add('AND LName='+' "'+Edit6.Text+'"');
ADOQuery1.SQL.Add('AND PhName='+' "'+Edit7.Text+'"');
ADOQuery1.Open;
ADOQuery1.Active:=true;
//Label15.Caption:=IntToStr
end;
procedure TForm1.Button3Click(Sender: TObject); {Отчёт 2}
begin
RvProject1.Execute;
end;
procedure TForm1.Button5Click(Sender: TObject); {Отчёт 3}
begin
RvProject2.Execute;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
RvProject3.Execute;
end;
end. |
|
#2
|
||||
|
||||
|
Я щас переоденусь, и скину вам образец (свой вариант) работы с MsWord
тока с работы пришёл ) (для делфи 7 с панели Servers Надо вытащить WordApplication1 Так вот: (У меня задача немного другая. У меня предприятие ведёт учёт по некому товару. Месечный приход товара, и меченая реализция его) например надо создать отчёт с 1го января по 31 января 2009 года, реализации. Фильтрую (одно из полей содержит даные реализации в виде дд.мм.гггг) Table1.Filter:='Realisation_Date > ''01.01.2009'' AND Realisation_Date < ''31.01.2009''' Полусаю таблицу в DBGrid1. А дальше вот как: Код:
WordApplication1.Connect; (коннектимся к серверу Ворда. В данном случае сервер - это процесс, или ещё проще, запущенный Word)
WordApplication1.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); (добавляем в него пустой документ)
WordApplication1.Options.CheckSpellingAsYouType := False; (это оптимизация - отключаем синтаксис)
WordApplication1.Options.CheckGrammarAsYouType := False; (это оптимизация - отключаем грамматику)
WordApplication1.Selection.Font.Size:=12; (шрифт на 12 размер)
WordApplication1.Selection.Font.Name:='Tahoma'; (тахомой)
WordApplication1.Selection.Font.Bold:=Integer(true); (жирненький)
WordApplication1.Selection.ParagraphFormat.Alignment:=wdAlignParagraphRight; (центрирую вправо)
WordApplication1.Selection.InsertAfter('Отчёт о продажах'+#13); (Первое добавление + Enter в конце, чтоб попасть на новую строку)
WordApplication1.Selection.InsertAfter('в период с '+DateToStr(DateTimePicker3.Date)+' по '+DateToStr(DateTimePicker4.Date)+#13); (второе добавление и опять же ентер)
WordApplication1.Selection.Collapse(td); (вот тут внимание: InsertAfter - это процедура которая парарлельно вставке держит весь текст в выделении, чтобы если вдруг понадобиться назначить его новыми свойствами будь то размер шрифта или стиль. Collapse - снимает это выделение. td - переменная в которой храниться куда деть курсор после выделения. Я его пихнул в конец, ибо надо дальше работать...)
var
td:OleVariant;
tseparat:OleVariant;
tcolumn:OleVariant;
WFileName:OleVariant;
begin
...
td:=wdCollapseEnd;
tseparat:=wdSeparateByTabs;
tcolumn := 6;
WFileName:='отчёт.doc'
Дальше у меня создаётся таблица разделителем этой таблицы является символ Tab (#9)
таблица изначально выглядит как строка... а потом конвертируется стандартом: ConvertToTable(разделитель, пусто, кол-во колонок в таблице, пусто...)
WordApplication1.Selection.InsertAfter('Артикул'+#9);
WordApplication1.Selection.InsertAfter('Изделие'+#9);
WordApplication1.Selection.InsertAfter('Общий вес (г.)'+#9);
WordApplication1.Selection.InsertAfter('Цена покупки (руб.)'+#9);
WordApplication1.Selection.InsertAfter('Цена продажи (руб.)'+#9);
WordApplication1.Selection.InsertAfter('Прибыль (р.)'+#9);
WordApplication1.Selection.InsertAfter(str);
В str у меня храниться строка виде (Артикул1#9Изделие1#9Общийвес1 и так далее)
WordApplication1.Selection.ConvertToTable(tseparat,EmptyParam,tcolumn,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordApplication1.Selection.Collapse(td);
Снова снимаем выделение с таблмицы.
Сохраняем, с одним параметром "куда")
WordApplication1.ActiveDocument.SaveAs(WFileName,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordApplication1.ActiveDocument.Close(EmptyParam, EmptyParam, EmptyParam); (закрываем открытый документ)
WordApplication1.Disconnect; (отключаемся от сервера)Последний раз редактировалось Uniq!, 01.10.2010 в 19:04. |
|
#3
|
||||
|
||||
|
Не знаю, помогу или нет, но думаю следует посмотреть:
http://www.delphi.int.ru/articles/11/ - взаимодействие с вордом |
|
#4
|
||||
|
||||
|
Всё-всё, я разобралась, Вы мне очень помогли, спасибо =*
|