FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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 !! |
|
|
|