Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-06-2005
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Un problema con COLNITIALIZE

Tengo un problema que no sé como resolverlo.....bueno mas bien es un error que no sé como corregirlo, espero que alguno de uds., que tiene mas experiencia en la programación con delphi, y particularmente en el uso de codigo para exportar información de Interbase a Excel, me pueda ayudar a corregirlo, ya que anteriormente funcionaba pero le agrege un componente y eso hizo que restructura el código un poco, no hubo grandes cambios.

Bueno el error es este.....cuando corro la aplicación (mis sistema), y selecciono del menu principal el proceso para exportar, se detiene en la linea :

Excel:=CreateOleObject('Excel.Application');

Y marca el siguiente error: raised exception class EOleSysError with message 'No se ha llamado a Colnitialize'. De que esta hablando?....le mando el código completo para un mayor analisis.
unit Exportar;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IBExtract, Buttons, ToolWin, ComCtrls, ExtCtrls, StdCtrls,
DB, IBCustomDataSet, kds2dbf, OleServer, Excel2000, ComObj, IBQuery,
DataExport, DataToDbf, Mask, DataToXLS;

type
TfrmExportar = class(TForm)
pnlEncabezado: TPanel;
ToolBar1: TToolBar;
sBtnExit: TSpeedButton;
pnlDatos: TPanel;
pnlBotones: TPanel;
SpeedButton1: TSpeedButton;
sBtnExportar: TBitBtn;
pnlPeriodo: TPanel;
Label1: TLabel;
Label2: TLabel;
mskMes: TMaskEdit;
mskAnio: TMaskEdit;
pnlTabla: TPanel;
cbxTablas: TComboBox;
Label3: TLabel;
Label4: TLabel;
qryExportarExcel: TIBQuery;
dXls: TDataToXLS;
procedure sBtnExportarClick(Sender: TObject);
procedure sBtnExitClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure pnlPeriodoExit(Sender: TObject);
procedure pnlTablaEnter(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmExportar: TfrmExportar;

implementation
uses Modulo;
{$R *.dfm}

procedure TfrmExportar.sBtnExportarClick(Sender: TObject);
Var
Excel, Libro: Variant;
i,nRuta,nRuta2,nHoja,nMes,nAnio,nCveLec, nFrec :Integer;
nTotFrec, nTotKmsVis, nTotKmsMes,nTotImp,nKmsVis, nKmsMes, nImp : Double;
nDesc, nTotPagar : Double;
Nombre, cRuta, cDescrip, cDias,cFichero, cSuma, cMarcaVehiculo,cModelo : String;
cPlacas, cAseguradora, cPoliza, cSede : String;
cLun1,cLun2,cLun3,cLun4,cLun5,cMar1,cMar2,cMar3,cMar4,cMar5 : TMemo;
cMie1,cMie2,cMie3,cMie4,cMie5,cJue1,cJue2,cJue3,cJue4,cJue5 : TMemo;
cVie1,cVie2,cVie3,cVie4,cVie5 : TMemo;

begin
case cbxTablas.ItemIndex of
0: Begin
qryExportarExcel.Close;
qryExportarExcel.SQL.Clear;
qryExportarExcel.SQL.Add('Select a.mes_periodo,a.anio_periodo,a.clave_ruta,a.lun1,a.lun2,a.lun3,');
qryExportarExcel.SQL.Add('a.lun4,a.lun5,a.mar1,a.mar2,a.mar3,a.mar4,a.mar5,a.mie1,a.mie2,');
qryExportarExcel.SQL.Add('a.mie3,a.mie4,a.mie5,a.jue1,a.jue2,a.jue3,a.jue4,a.jue5,a.vie1,a.vie2,');
qryExportarExcel.SQL.Add('a.vie3,a.vie4,a.vie5,a.sede,a.lecherias,a.lecherias2,a.lecherias3,');
qryExportarExcel.SQL.Add('a.lecherias4,a.comentarios,c.nombre');
qryExportarExcel.SQL.Add('from CALENDARIO a, RUTA b, PROMOTOR c');
qryExportarExcel.SQL.Add('where MES_PERIODO=:MES');
qryExportarExcel.SQL.Add(' and ANIO_PERIODO=:ANIO');
qryExportarExcel.SQL.Add(' and a.clave_ruta=b.clave_ruta');
qryExportarExcel.SQL.Add(' and b.clave_promotor=c.clave_promotor');
qryExportarExcel.SQL.Add('order by a.CLAVE_RUTA');
qryExportarExcel.ParamByName('MES').AsInteger:=StrToInt(mskMes.Text);
qryExportarExcel.ParamByName('ANIO').AsInteger:=StrToInt(mskAnio.Text);
qryExportarExcel.Open;

Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=False;
Excel.DisplayAlerts:=False;
Excel.WorkBooks.Add('c:\Atencion\Plantillas\Calendario.xlt');
qryExportarExcel.First;
nHoja:=1;
// nTotPagar:=0;
While not (qryExportarExcel.Eof) do
begin
i:=10;
nRuta:=qryExportarExcel.FieldValues['CLAVE_RUTA'];
nRuta2:=qryExportarExcel.FieldValues['CLAVE_RUTA'];
cRuta:='Ruta '+IntToStr(nRuta);
Nombre:=qryExportarExcel.FieldValues['NOMBRE'];
nMes:=qryExportarExcel.FieldValues['MES_PERIODO'];
nAnio:=qryExportarExcel.FieldValues['ANIO_PERIODO'];
cSede:=qryExportarExcel.FieldValues['SEDE'];
Excel.WorkBooks[1].WorkSheets[nHoja].Name:=cRuta;
Libro:=Excel.WorkBooks[1].WorkSheets[cRuta];
Libro.Cells[6,1]:='Ruta:'+IntToStr(nRuta)+' '+Nombre;
Libro.Cells[6,3]:='SEDE:'+cSede;
Libro.Cells[6,5]:='Periodo:'+IntToStr(nMes)+' '+IntToStr(nAnio);
While (nRuta=nRuta2) and not (qryExportarExcel.Eof) do
begin
cLun1.Text:=qryExportarExcel.FieldValues['LUN1'];
Libro.Cells[i,1]:=cLun1.Text;
qryExportarExcel.Next;
inc(i);
end;
inc(nHoja);
end;
cFichero:='c:\Atencion\XLS\Calendario_'+mskMes.Text+mskAnio.Text+'.xls';
Libro.SaveAs(cFichero);
ShowMessage('El Archivo '+cFichero+' ha sido creado');
Excel.quit;
cbxTablas.SetFocus;
end;
1: Begin
qryExportarExcel.Close;
qryExportarExcel.SQL.Clear;
qryExportarExcel.SQL.Add('SELECT a.clave_ruta,a.mes_periodo, a.anio_periodo, a.clave_lec,');
qryExportarExcel.SQL.Add('a.lec_descripcion, a.frecuencia, a.kms_visitas, a.kms_mensual,a.importe, c.nombre,');
qryExportarExcel.SQL.Add('d.descripcion, c.placas,c.modelo,c.aseguradora,c.poliza,');
qryExportarExcel.SQL.Add('a.dias_visita, c.clave_promotor, a.descuento,a.COMENTARIO');
qryExportarExcel.SQL.Add('FROM costo_ruta a, ruta b, promotor c, vehiculo d');
qryExportarExcel.SQL.Add('WHERE a.mes_periodo=:MES');
qryExportarExcel.SQL.Add('AND a.anio_periodo=:ANIO');
qryExportarExcel.SQL.Add('AND a.clave_ruta=b.clave_ruta');
qryExportarExcel.SQL.Add('AND b.clave_promotor=c.clave_promotor');
qryExportarExcel.SQL.Add('AND c.clave_coche=d.clave_coche');
qryExportarExcel.SQL.Add('ORDER BY a.clave_ruta, a.clave_lec');
qryExportarExcel.ParamByName('MES').AsInteger:=StrToInt(mskMes.Text);
qryExportarExcel.ParamByName('ANIO').AsInteger:=StrToInt(mskAnio.Text);
qryExportarExcel.Open;
Excel:=CreateOleObject('Excel.Application');
Excel.Visible:=False;
Excel.DisplayAlerts:=False;
Excel.WorkBooks.Add('c:\Atencion\Plantillas\costos.xlt');
qryExportarExcel.First;
nHoja:=1;
nTotPagar:=0;
While not (qryExportarExcel.Eof) do
begin
i:=12;
nRuta:=qryExportarExcel.FieldValues['CLAVE_RUTA'];
nRuta2:=qryExportarExcel.FieldValues['CLAVE_RUTA'];
cRuta:='Ruta '+IntToStr(nRuta);
Nombre:=qryExportarExcel.FieldValues['NOMBRE'];
nMes:=qryExportarExcel.FieldValues['MES_PERIODO'];
nAnio:=qryExportarExcel.FieldValues['ANIO_PERIODO'];
Excel.WorkBooks[1].WorkSheets[nHoja].Name:=cRuta;
Libro:=Excel.WorkBooks[1].WorkSheets[cRuta];
Libro.Cells[7,3]:=Nombre;
Libro.Cells[7,13]:=nMes;
Libro.Cells[8,3]:=nRuta;
Libro.Cells[8,13]:=nAnio;
nTotImp:=0;
nTotFrec:=0;
nTotKmsVis:=0;
nTotKmsMes:=0;
nDesc:=0;
While (nRuta=nRuta2) and not (qryExportarExcel.Eof) do
begin
nCveLec :=qryExportarExcel.FieldValues['CLAVE_LEC'];
cDescrip:=qryExportarExcel.FieldValues['LEC_DESCRIPCION'];
nFrec :=qryExportarExcel.FieldValues['FRECUENCIA'];
nKmsVis :=qryExportarExcel.FieldValues['KMS_VISITAS'];
nKmsMes :=qryExportarExcel.FieldValues['KMS_MENSUAL'];
nImp :=qryExportarExcel.FieldValues['IMPORTE'];
cDias :=qryExportarExcel.FieldValues['DIAS_VISITA'];
cMarcaVehiculo:=qryExportarExcel.FieldValues['DESCRIPCION'];
if qryExportarExcel.FieldByName('DESCUENTO').IsNull then begin
nDesc:=0;
end Else Begin
nDesc:=qryExportarExcel.FieldValues['DESCUENTO'];
end;
if cMarcaVehiculo='NINGUNO' then begin
cMarcaVehiculo:='';
cModelo:='';
cPlacas:='';
cAseguradora:='';
cPoliza:='';
end Else Begin
cMarcaVehiculo:=qryExportarExcel.FieldValues['DESCRIPCION'];
cModelo :=qryExportarExcel.FieldValues['MODELO'];
cPlacas :=qryExportarExcel.FieldValues['PLACAS'];
cAseguradora :=qryExportarExcel.FieldValues['ASEGURADORA'];
cPoliza :=qryExportarExcel.FieldValues['POLIZA'];
end;
Libro.Cells[i,1] :=nCveLec;
Libro.Cells[i,3] :=cDescrip;
Libro.Cells[i,5] :=cDias;
Libro.Cells[i,7] :=nFrec;
Libro.Cells[i,9] :=nKmsVis;
Libro.Cells[i,11]:=nKmsMes;
Libro.Cells[i,13]:=nImp;
inc(i);
nTotFrec:=nTotFrec+nFrec;
nTotKmsVis:=nTotKmsVis+nKmsVis;
nTotKmsMes:=nTotKmsMes+nKmsMes;
nTotImp :=nTotImp+nImp;
qryExportarExcel.Next;
nRuta:=qryExportarExcel.FieldValues['CLAVE_RUTA'];
end;
inc(i);
Libro.Cells[i,5]:='SubTotal';
Libro.Cells[i,7]:=nTotFrec;
Libro.Cells[i,9]:=nTotKmsVis;
Libro.Cells[i,11]:=nTotKmsMes;
Libro.Cells[i,13]:=nTotImp;
Libro.Cells[i+1,11]:='*Descuento';
Libro.Cells[i+1,13]:=nDesc;
Libro.Cells[i+2,11]:='TOTAL A PAGAR';
nTotPagar:=nTotImp-nDesc;
Libro.Cells[i+2,13]:=nTotPagar;
Libro.Cells[i+4,1]:='CARACTERISCTAS DEL VEHICULO';
Libro.Cells[i+5,1]:='Marca Vehiculo:';
Libro.Cells[i+5,2]:=cMarcaVehiculo;
Libro.Cells[i+6,1]:='Modelo:';
Libro.Cells[i+6,2]:=cModelo;
Libro.Cells[i+7,1]:='Placas:';
Libro.Cells[i+7,2]:=cPlacas;
Libro.Cells[i+5,5]:='Aseguradora:';
Libro.Cells[i+5,7]:=cAseguradora;
Libro.Cells[i+6,5]:='Numero Poliza:';
Libro.Cells[i+6,7]:=cPoliza;
Libro.Cells[i+20,1]:=Nombre;
Libro.Cells[i+21,1]:='PROMOTOR SOCIAL';
Libro.Cells[i+22,1]:='(FIRMA)';
Libro.Cells[i+20,8]:='ING. VICTOR MARIO FLORES RUBIO';
Libro.Cells[i+21,8]:='SUBGERENTE DE PADRON DE BENEFICIARIOS';
Libro.Cells[i+22,8]:='(FIRMA)';
inc(nHoja);
end;
cFichero:='c:\Atencion\XLS\costo_'+mskMes.Text+mskAnio.Text+'.xls';
Libro.SaveAs(cFichero);
ShowMessage('El Archivo '+cFichero+' ha sido creado');
Excel.quit;
cbxTablas.SetFocus;
// ShowMessage('En proceso');
end;
end; //Fin del CASE
end;

procedure TfrmExportar.sBtnExitClick(Sender: TObject);
begin
Close;
end;

procedure TfrmExportar.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=caFree;
end;

procedure TfrmExportar.pnlPeriodoExit(Sender: TObject);
begin
if (mskMes.Text='') or (mskAnio.Text='') then begin
Application.MessageBox('Digita un periodo valido','Error',mb_ok+mb_IconError);
cbxTablas.SetFocus;
end Else Begin
if cbxTablas.ItemIndex = 0 then begin
qryExportarExcel.Close;
qryExportarExcel.SQL.Clear;
qryExportarExcel.SQL.Add('SELECT * FROM CALENDARIO');
qryExportarExcel.SQL.Add('WHERE MES_PERIODO=:MES AND ANIO_PERIODO=:ANIO');
qryExportarExcel.ParamByName('MES').AsInteger:=StrToInt(mskMes.Text);
qryExportarExcel.ParamByName('ANIO').AsInteger:=StrToInt(mskAnio.Text);
qryExportarExcel.Open;
end Else Begin
qryExportarExcel.Close;
qryExportarExcel.SQL.Clear;
qryExportarExcel.SQL.Add('SELECT * FROM costo_ruta');
qryExportarExcel.SQL.Add('WHERE MES_PERIODO=:MES AND ANIO_PERIODO=:ANIO');
qryExportarExcel.ParamByName('MES').AsInteger:=StrToInt(mskMes.Text);
qryExportarExcel.ParamByName('ANIO').AsInteger:=StrToInt(mskAnio.Text);
qryExportarExcel.Open;
end;
if qryExportarExcel.IsEmpty then begin
Application.MessageBox('No existen movimientos para este periodo','Error',mb_ok+mb_IconError);
cbxTablas.SetFocus;
end;
qryExportarExcel.Active:=true;
end;// Fin del IF
end;

procedure TfrmExportar.pnlTablaEnter(Sender: TObject);
begin
qryExportarExcel.Active:=False;
qryExportarExcel.Close;
mskMes.Text:='';
mskAnio.Text:='';
cbxTablas.Text:='';
end;

end.

DE ANTEMANO GRACIAS POR SUS COMENTARIOS AL RESPECTO, y ojala y me puedan ayudar.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #2  
Antiguo 22-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.109
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

RAP de la etiqueta DELPHI (léase el texto en tono cántico-festivo-rapero)

La etiqueta DELPHi está aquí,
y te ayuda a ti y a mí,
con ella podrás el código mostrar,
para que de mejor forma te pueda ayudar,
RAP, RAP, RAP, la etiqueta DELPHI está aquí.

Si la etiqueta DELPHi no quieres usar,
yo no pienso molestarme en contestar,
porque no se puede el código leer,
porque cuesta mucho más de comprender,
RAP, RAP, RAP, usa la etiqueta DELPHI YA.

El RAP no da para mucho más: hay que repetir los dos párrafos y ya está... por cierto, echa un vistazo a la guía de estilo del Foro que habla sobre la nunca como se debe alabada etiqueta DELPHI y otros interesantes temas.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 22-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Hola mRoman. Te recomiendo aprender a usar la etiqueta [ code ], [ delphi ], etc. para publicar trozos de código, ya que sin ellas es muy dificil de leer dado que pierde la indentación.

Cita:
Empezado por Win32 Developers Reference
The CoInitialize function initializes the Component Object Model(COM) library. You must initialize the library before you can call its functions. Applications must call CoInitialize before they make any other COM library calls with two exceptions: the CoGetMalloc function, and memory allocation calls.
En otras palabras, falta llamar a coInitialize(nil) antes de iniciar y luego llamar a CoUninitialize; después de terminar.

Para mas información consultá el Win32 Developer's reference del SDK de windows (instalado en le menú Help de tu instalación de delphi).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 22-06-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.933
Poder: 27
delphi.com.ar Va por buen camino
Se ejecuta la línea Application.Initialize en el DPR de tu proyecto?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 22-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jachguate
Te recomiendo aprender a usar la etiqueta [ code ], [ delphi ], etc. para publicar trozos de código
Y yo enfatizaría la palabra trozos.

// Saludos
Responder Con Cita
  #6  
Antiguo 23-06-2005
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Para Delphi.com.ar

No, en el dpr no se ejecuta ese linea (Application.initialize), que tengo que hacer...?, donde hay que agregar esa linea?....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #7  
Antiguo 23-06-2005
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.933
Poder: 27
delphi.com.ar Va por buen camino
Agregala antes de que se creen tus forms y antes del Application.Run...
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 23-06-2005
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Intialize

Ok Delphi !....ya funciono GRACIAS.....ya aprendi algo mas !!. Aprovechando la oportunidad, no sé si me puedas auxiliar en esta otra cosa, tengo una tabla con varios campos memos y la quiero exportar a Excel, ¿Se puede exportar los campos memos a una hoja de excel?, ahora el contenido de los memos se puede almacenar en una celda o combinación de estas?.

Gracias nuevamente por tu ayuda.

Que este bien.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #9  
Antiguo 23-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mRoman
Aprovechando la oportunidad, no sé si me puedas auxiliar en esta otra cosa
Para esa otra cosa por favor abre otro hilo en el foro que corresponda.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:30:34.


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
Copyright 1996-2007 Club Delphi