PDA

Ver la Versión Completa : Como enviar el resultado de una consulta con un Query al Word?


Ricsato
16-10-2003, 00:34:00
Hola a todos.

Quisiera que alguien me enviara un ejemplo de codigo de como enviar los campos de una base de datos de una consulta que arroja un Query y un DataSource al Word, de como conectar la aplicacion y todos los parametros requeridos para establecer contacto con la aplicacion de Word.

Gracias y saludos...

roman
16-10-2003, 06:54:55
Ejemplo:


procedure DumpWord(DataSet: TDataSet; WordDoc: TWordDocument);
var
WordTable: Table;
RowCount, ColCount: Integer;
RowIndex, ColIndex: Integer;

begin
DataSet.Open;
try
RowCount := DataSet.RecordCount;
ColCount := DataSet.Fields.Count;
WordTable := WordDoc.Tables.Add(WordDoc.Range, RowCount + 1, ColCount);

for ColIndex := 1 to ColCount do
begin
WordTable.Cell(1, ColIndex).Range.Font.Bold := 1;
WordTable.Cell(1, ColIndex).Range.Text :=
DataSet.Fields[ColIndex - 1].FieldName;
WordTable.Cell(1, ColIndex).Range.Paragraphs.Alignment :=
wdAlignParagraphCenter;
end;

RowIndex := 1;
while not DataSet.Eof do
begin
for ColIndex := 1 to ColCount do
WordTable.Cell(RowIndex, ColIndex).Range.Text :=
DataSet.Fields[ColIndex - 1].AsString;

Inc(RowIndex);
DataSet.Next;
end;
finally
DataSet.Close;
WordDoc.Application.Visible := true;
end;
end;


A este procedimiento le pasas cualquier DataSet (por ejemplo un Query) y una componente TWordDocument (de la paleta Servers). El procedimiento realiza lo siguiente:


Activa el DataSet.
Crea una tabla en el documento de Word con tantas columas y renglones como campos y registros haya en el DataSet.
Coloca un renglón de encabezados con los nombres de los campos dándoles formato de letra en negritas y centrados.
Llena la tabal en Word con los registros del DataSet.
Desactiva el DataSet y
Abre Word.


Funciona para Word97 pero no debe haber mayor problema para Word2000.

// Saludos

Ricsato
16-10-2003, 23:36:11
Gracias amigo, eres muy amable, voy a insertar tu codigo.

Saludos desde México-

Ricsato
03-11-2003, 05:26:20
Hola a todos!!.

Inserte este codigo en mi programa, pero me marco el error "No se ha podido llamar a CoInitialize" y me ignora el resto del codigo para poder enviar informacion al Word, esto lo marca a la hora de invocar la aplicacion, bueno espero que alguien me pueda ayudar con esto.

Saludos.

roman
03-11-2003, 16:02:42
El procedimiento DumpWord requeire un objeto de tipo TWordDocument. ¿Cómo estás creando este objeto?

CoInitialize es una rutina que inicializa el acceso a la librería COM y normalmente Delphi la llama él mismo cuando es necesario, y así debiera suceder si está utilizando los componentes de la paleta Servers. Si, por lo contrario, estás creando los objetos directamente con CoCreateInstance o algo asi entonces debes tú mismo llamar a CoInitialize que debe estar en la unidad ActiveX o ComObj, no recuerdo bien.

// Saludos

Enrike66666
14-12-2006, 06:48:10
Hola a todos, gracias roman lo de insertar campos de un query en una tabla de word me funcionó a la perfección. Ahora mi problema es que quiero insertar un campo que contiene una imagen a una celda de una tabla de word desde delphi y también un campo memo (este campo lo pone en la tabla com muchisimis signos raros). Si alguien sabe donde puedo leer sobre esto por favor les agradeceré mucho.

protector2020
27-07-2007, 06:48:48
hola roman, eres genial. es justamente el ejemplo que estaba buscando. felicidades x tus habilidades.

MaMu
28-07-2007, 22:43:16
WordTable := WordDoc.Tables.Add(WordDoc.Range, RowCount + 1, ColCount);


Me faltan parámetros?. Intente usar este procedimiento, pero me dice que me faltan parametros.

Deberian ser EmptyParam?

Saludos

MaMu
28-07-2007, 22:52:36
Hay algo para Word XP ?

Este procedimiento me da error:

"Interface no soportada"

Saludos