Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cual es el error? (https://www.clubdelphi.com/foros/showthread.php?t=16586)

Alfredo 02-12-2004 18:54:01

Cual es el error?
 
Hola a todos.........., estoy tratando de probar el siguiente codigo que tome

de http://www.djpate.freeserve.co.uk/Au...htm#InsertText

Ejemplo de como usar mailmerge facilmente, pero no he podido hacer que funcione.... Tengo delphi 7, windows xp, office xp

al compilarlo se detiene en

Word.Quit(wdSaveChanges,EmptyParam, EmptyParam);

y el error es:
[Error] Unit1.pas(65): Types of actual and formal var parameters must be identical

Tendran alguna idea por favor:

Código:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Wordxp, StdCtrls, Db, DBTables;

type
  TMainForm = class(TForm)
    CreateMainDocBtn: TButton;
    GetDataSourceBtn: TButton;
    MergeBtn: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure CreateMainDocBtnClick(Sender: TObject);
    procedure GetDataSourceBtnClick(Sender: TObject);
    procedure MergeBtnClick(Sender: TObject);
  private
    Word: _Application;
    Doc: _Document;
    AliasPath: string;
    function GetAliasPath: string;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

uses ComObj, ActiveX;

procedure TMainForm.FormCreate(Sender: TObject);
var
  Unknown: IUnknown;
  Result: HResult;
begin

            // Delphi 5
  Result := GetActiveObject(CLASS_WordApplication, nil, Unknown);

  if (Result = MK_E_UNAVAILABLE) then

    Word := CoWordApplication.Create


  else begin
    { make sure no other error occurred during GetActiveObject }
    OleCheck(Result);
    OleCheck(Unknown.QueryInterface(_Application, Word));
  end;
  Word.Visible := True;
  AliasPath := GetAliasPath;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
var
  SaveChanges: OleVariant;
 begin
  SaveChanges := wdDoNotSaveChanges;
 Word.Quit(wdSaveChanges,EmptyParam, EmptyParam); // ******** Presenta error

  Doc := nil;
  Word := nil;
end;

procedure TMainForm.CreateMainDocBtnClick(Sender: TObject);
var
  R: Range;
  Direction: OleVariant;
begin
  Doc := Word.Documents.Add(EmptyParam, EmptyParam); // ****** presenta error
  R := Doc.Range(EmptyParam, EmptyParam);

  Direction := wdCollapseEnd;
  R.InsertAfter('Dear ');
  R.Collapse(Direction);

  { Insert a field with the name of the datasource field }
  Doc.MailMerge.Fields.Add(R, 'Company');
  R := Doc.Range(EmptyParam, EmptyParam);
  R.Collapse(Direction);
  R.InsertParagraphAfter;
  R.InsertAfter('We have yet to receive payment for our invoice of ');
  R.Collapse(Direction);
  Doc.MailMerge.Fields.Add(R, 'LastInvoiceDate');
  R := Doc.Range(EmptyParam, EmptyParam);
  R.Collapse(Direction);
  R.InsertAfter('.');
  R.InsertParagraphAfter;
  R.InsertAfter('Cough up or we''ll send the boys round.');
  R.InsertParagraphAfter;
  GetDatasourceBtn.Enabled := True;
end;

procedure TMainForm.GetDataSourceBtnClick(Sender: TObject);
var
  TblName: string;
  Connection, SQL: OleVariant;
begin
  { Open the customer table }
  TblName := AliasPath + '\' + 'customer.db';
  Connection := Format('DSN=Paradox Files;DBQ=%s;DefaultDir=%s;DriverId=538;MaxBufferSize=2048;PageTimeout=5;', [AliasPath, AliasPath]);
  SQL := 'SELECT * FROM customer.db';
  Doc.MailMerge.OpenDataSource(TblName, EmptyParam, EmptyParam, EmptyParam,
                              EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                              EmptyParam, EmptyParam, EmptyParam, Connection,
                              SQL, EmptyParam);
  MergeBtn.Enabled := True;
end;

function TMainForm.GetAliasPath: string;
const
  DemoAlias = 'DBDEMOS';
var
  AliasParams: TStrings;
begin
  Result := 'C:\';
  if Session.IsAlias(DemoAlias) then
  begin
    AliasParams := TStringList.Create;
    try
      Session.GetAliasParams(DemoAlias, AliasParams);
      Result := AliasParams.Values['PATH'];
    finally
      AliasParams.Free;
    end;
  end;
end;

procedure TMainForm.MergeBtnClick(Sender: TObject);
var
  Pause: OleVariant;
begin
  Pause := False;
  with Doc.MailMerge do
  begin
    Destination := wdSendToNewDocument;
    Datasource.FirstRecord := wdDefaultFirstRecord;
    Datasource.LastRecord := integer(wdDefaultLastRecord);
    Execute(Pause);
  end;
end;

end.


rcarrillom 03-12-2004 11:40:31

Este error significa que uno de los parametros pasados a la funcion no puede ser modificado debido a que es una propiedad o una constante y el parametro requerido es "var", por ejemplo

procedure AMayusculas(var Minusculas: string);
:
:
En otra parte del codigo:
AMayusculas(Edit1.Text) <- error de compilacion

Lo correcto es:
:
var
Cadena: string;
:
Cadena := Edit1.Text;
AMayusculas(Cadena);
Edit1.Text := Cadena

Alfredo 03-12-2004 15:20:27

muchas gracias amigo Rcarriom..

Me ha sido muy util tu comentario.... :D


La franja horaria es GMT +2. Ahora son las 08:44:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi