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
  #21  
Antiguo 12-01-2007
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Cita:
... por Lepe
Lo de Error catastrófico lo he vivido también. Busca Updates de delphi.

Di la versión que tienes de delphi y si tienes algún Update pack instalado.

Creo recordar que había problemas al tener instalado C++ y Delphi al mismo tiempo en las versiones 6, tenías que bajar un parche de Borland.

Excelente Lepe. Yo tenia instalado el Borland C++ Builder 6 y el Delphi 7. Lo he probado en otra PC con solo el C++ y funciona perfectamente. Muchas gracias y disculpen la demora pero es que estaba de vacaciones muy lejos...ah y muchas felicidades en este nuevo año a todos...

Saludos
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #22  
Antiguo 12-01-2007
roraclau roraclau is offline
Registrado
 
Registrado: ene 2007
Posts: 5
Poder: 0
roraclau Va por buen camino
como activar un componente ADODataSet en tiempo de ejecución.

Bicho Hola,

Perdón que hasta ahorita te conteste dormi un poco de las 5 a estas horas, ahora te digo:

¿Puedes indicarnos que problema exactamente te sucede?
si, según creo es porque tenia el Componente ADODataSet en su propiedad active en True, pero ya lo deje en false y de todas maneras sigo con el error
Hice los pasos hasta el 9 y aquí puse un componente DbGrid para ver la info del archivo excel ligandolo con un componente DataSurce, corrir el proyecto y bolas el error aunque el en modo de diseño si puedo ver la info


¿Aparece algún mensaje de error?

si, el error que me marca es:
El motor de base de datos Microsoft Jet no puede abrir el archivo”. Está abierto en modo exclusivo por otro usuario o bien necesita permiso para ver sus datos.

Y eso de que no has podido ver la aplicación funcionando, ¿a que te refieres?
Cuantos más datos des, más posibilidades habrá de que entre todos encontremos una solucion.


Bueno, por el error no he podido ver el proyecto en tiempo de ejecución, como te comento solo en diseño me funciona. Me gustaría verlo en ejecución para poder continuar ahora con el traspaso de datos a tablita de paradox, tal como lo explica Roman.

muchisimas gracias por tu apoyo Bicho. Saludos
Ojalá sea buena esta explicación para que me puedan ayudar.

p.d. según yo intente activar así: puse un Botón para que en su evento OnClick activara el componente ADODataSet lo hice así:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
TADODataSet.True;
end;


pero tambien me marco error: Undeclared identifier: True
este es mi problema no se como va la instrucción.
Responder Con Cita
  #23  
Antiguo 12-01-2007
roraclau roraclau is offline
Registrado
 
Registrado: ene 2007
Posts: 5
Poder: 0
roraclau Va por buen camino
Bicho

Hola ya te conteste, pero no supe como, no se manejar bien las respuestas enseguidita de lo que me contestan, y quien sabe a donde se fue lo que te conteste, porque no los veo.
Me podrás ayudar. Gracias.
Responder Con Cita
  #24  
Antiguo 12-01-2007
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
Cita:
Empezado por Clau
Hola ya te conteste, pero no supe como, no se manejar bien las respuestas enseguidita de lo que me contestan, y quien sabe a donde se fue lo que te conteste, porque no los veo.
No se a que te refieres, pero bueno.

Cita:
Empezado por Clau
si, según creo es porque tenia el Componente ADODataSet en su propiedad active en True, pero ya lo deje en false y de todas maneras sigo con el error
Hice los pasos hasta el 9 y aquí puse un componente DbGrid para ver la info del archivo excel ligandolo con un componente DataSurce, corrir el proyecto y bolas el error aunque el en modo de diseño si puedo ver la info
Es lo que comenta Roman, que da muchos problemas si lo tienes activado en tiempo de diseño y no de ejecución. Procura tenerlo desactivado o desconectado y conectarlo al ejecutar la aplicación, en los eventos OnCreate o OnActivate o un Click de botón sino no necesitas la conexión desde el inicio de la ejecución de la aplicación.
Yo lo he estado probando, como te comenté. Y no he visto la manera en diseño de conectar el DBGrid a un AdoDataSet. Es decir, tenía que hacerlo "a mano", recorrer el DataSet y asignar los datos a un StringGrid.

Cita:
Empezado por Clau
si, el error que me marca es:
El motor de base de datos Microsoft Jet no puede abrir el archivo”. Está abierto en modo exclusivo por otro usuario o bien necesita permiso para ver sus datos.
Quizá sea por lo de tener activado en tiempo de diseño.

Cita:
Empezado por Clau
p.d. según yo intente activar así: puse un Botón para que en su evento OnClick activara el componente ADODataSet lo hice así:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
TADODataSet.True;
end;


pero tambien me marco error: Undeclared identifier: True
este es mi problema no se como va la instrucción.
La forma correcta es así:

Código Delphi [-]
 ADODataSet1.Active := True; //ADODataSet1, es el name que aparece en eobjeto que has arrastrado en el formulario, mientras que TADODataSet es el nombre de la clase a la que pertenece ese objeto.
//Active es la propiedad que tiene el dataset para conectarse. y el ":=" es para realizar una asignación
  
//Seguramente tambien deberías hacer antes conectar el ADOConnection de la misma forma.
  AdoConnection1.Connected := True; //En este caso la propiedad para activar o conectar el AdoConnection es Connected

Espero te sirva para avanzar. Ya nos comentas que tal.

En cuanto a tu experiencia en los foros, cuando escribas un hilo tienes una barra arriba que te permite encerrar el texto y formatearlo para hacerlo más legible. Échales un vistazo te ayudarán mucho. Son etiquetas muy sencillas.
Tienes [quote] para envolver citas, para escribir lo que ha dicho alguien.
Y etiquetas [delphi] y [code] para encerrar el código que escribas.

Saludos y suerte.
Responder Con Cita
  #25  
Antiguo 12-01-2007
Avatar de oracle
oracle oracle is offline
Miembro
 
Registrado: feb 2005
Posts: 99
Poder: 20
oracle Va por buen camino
Bueno primero: Clau quizas no ves las respuestas nuevas porque hay mas de una pagina en la vista que tienes del foro y tienes que mirar en las otras para ver los nuevo mensajes u ordenarlos en otro orden.

Por lo otro, creo que la forma de conectar el DBgrid al AdoDataSet es a traves de un DataSource, al menos asi es como lo hago yo. O sea la propiedad "DataSource" de nuestro DBGrid debe tener el DataSource del que les hablo, y a su ves este DataSource, en su propiedad "DataSet" debe tener el ADODataSet y asi ya estan conectados. Lo de la coneccion en tiempo de diseño o en tiempo de ejecucion es a discricion de uds, igual funciona...

Y por el otro error, ademas de lo que comenta Bicho asegurate de tener la coneccion que estableciste con el Excel, (pasos 6-7 u 8) en la ventana donde te pide el modo de lectura tener marcado read solamente, a mi eso me dio ese error...

Saludos
__________________
El único hombre que no se equivoca es el que nunca hace nada.
Responder Con Cita
  #26  
Antiguo 02-02-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Retomando el tema

Hola compañeros

Estoy con el tema de abrir una hoja de excel con ADO, seguí las indicaciones que se mostraron en este tema y funciona perfectamente.

Resulta que este procedimiento se hace en tiempo de diseño y funciona muy bien, ahora el punto es que necesito hacerlo en tiempo de ejecución y abrir cualquier archivo excel y cualquier hoja dentro del archivo.

En este momento he logrado abrir un archivo excel cualquiera desde un OpenDialog, pero según las instrucciones proporcionadas en tiempo de diseño al momento que se indica al ADODataSet.CommandType = cmdTableDirect, automaticamente muestra en la propiedad CommandText las hojas que están dentro de ese archivo.

Mi pregunta es la siguiente:

Como puedo obtener en un ComboBox o un ListBox los nombres de las hojas que están dentro del archivo.

Aqui pego lo que ya he hecho, aún me faltan algunas validaciones que ya agregaré posteriormente.

Código Delphi [-]
 
unit ULeeSalientes;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DB, ADODB, Grids, DBGrids, ExtCtrls;
 
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    Panel2: TPanel;
    BitBtn1: TBitBtn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ADOConnection1BeforeConnect(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Archivo: String;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
begin
   ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
                                      'Data Source='+Archivo+
                                      ';Extended Properties=Excel 8.0;'+
                                      'Persist Security Info=False';
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  If OpenDialog1.Execute then begin
     Archivo := OpenDialog1.FileName;
     ADODataSet1.CommandText  := 'Dic 06$'; //Aqui estoy asignando el nombre de la hoja
     ADOConnection1.Connected := True;
     AdoDataSet1.Open;
  end;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  AdoDataSet1.Close;
  ADOConnection1.Connected := False;
end;
 
end.

Gracias anticipadas.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #27  
Antiguo 02-02-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Problema Resuelto

Pues actualizando la duda que tenia, ya encontré la manera de obtener el nombre de las hojas.

Código Delphi [-]
 
ADOConnection1.GetTablesNames(ComboBox1.Items,False);

Resulta que el archivo excel lo debía haber considerado como una base de datos y las hojas como las tablas que contiene.

Pues nada, creo que con esto ya quedó resuelto mi problema.

Aqui pego el código completo espero que sirva para alguien mas.

Código Delphi [-]
 
unit ULeeSalientes;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, DB, ADODB, Grids, DBGrids, ExtCtrls;
 
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    OpenDialog1: TOpenDialog;
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    ComboBox1: TComboBox;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure ADOConnection1BeforeConnect(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Archivo,Hoja: String;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.ADOConnection1BeforeConnect(Sender: TObject);
begin
   ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
                                      'Data Source='+Archivo+
                                      ';Extended Properties=Excel 8.0;'+
                                      'Persist Security Info=False';
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  If OpenDialog1.Execute then begin
     Archivo := OpenDialog1.FileName;
     ADOConnection1.Connected := True;
     ADOConnection1.GetTableNames(ComboBox1.Items,False);
  end;
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  ADODataSet1.CommandText  := ComboBox1.Text;
  AdoDataSet1.Open;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  AdoDataSet1.Close;
  ADOConnection1.Connected := False;
end;
 
end.

Saludos.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #28  
Antiguo 06-02-2007
Dalmine Dalmine is offline
No confirmado
 
Registrado: ago 2006
Ubicación: Argentina Campana Buenos Aires
Posts: 19
Poder: 0
Dalmine Va por buen camino
que tal una pregunta se puede seguir agregando datos al archivo excel abierto y guardar los cambios


saludos
Responder Con Cita
  #29  
Antiguo 05-02-2008
ozegarra ozegarra is offline
Miembro
 
Registrado: nov 2007
Ubicación: Lima - Peru
Posts: 35
Poder: 0
ozegarra Va por buen camino
Buenas estuve chekeando este hilo para saber como pasar una tabla excel a firebird.
He seguido todos los pasos pero no me graba los datos en mi tabla firebird, quiza me falta algo (soy nuevo en esto asi que perdonen mi ingenuidad). Les paso las lineas de codigo que tengo.

Código Delphi [-]
AdoDataSet1.Active :=True;
  while not AdoDataSet1.Eof do
  begin
    Table_Importado.Active := True;
    Table_Importado.Append;
    Table_Importado.Fields[0].Value := AdoDataSet1.Fields[0].Value;
    Table_Importado.Fields[1].Value := AdoDataSet1.Fields[1].Value;
    Table_Importado.Fields[2].Value := AdoDataSet1.Fields[2].Value;
    Table_Importado.Active := False;
    AdoDataSet1.Next;
  end;

esto no me marca ningun error, entra al bucle y recorreo todo el excel pero no me graba nada, que es lo que me falta?.

Gracias de antemano por su ayuda.
Responder Con Cita
  #30  
Antiguo 06-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Prueba así:

Código Delphi [-]
AdoDataSet1.Active :=True;
Table_Importado.Active := True;

while not AdoDataSet1.Eof do
begin
  Table_Importado.Append;

  Table_Importado.Fields[0].Value := AdoDataSet1.Fields[0].Value;
  Table_Importado.Fields[1].Value := AdoDataSet1.Fields[1].Value;
  Table_Importado.Fields[2].Value := AdoDataSet1.Fields[2].Value;

  AdoDataSet1.Next;
end;

Table_Importado.Active := False;

No es necesario activar el AdoDataset en cada vuelta. Y al desactivarlo, no le das tiempo a que se guarden los datos.

Bye
Responder Con Cita
  #31  
Antiguo 06-02-2008
Avatar de DarkSide
DarkSide DarkSide is offline
Miembro
 
Registrado: jun 2003
Ubicación: La Serena - Chile
Posts: 91
Poder: 21
DarkSide Va por buen camino
Como te dijo keyboy, no es necesario activar y desactivar la tabla en cada ciclo de ingreso, lo que si debes hacer es agregar el metodo "post", para forzar que grabe los datos, asi te deberia funcionar.

Código Delphi [-]
  Table_Importado.Active := True;
  AdoDataSet1.Active :=True;

  while not AdoDataSet1.Eof do
  begin
    Table_Importado.Append;
    Table_Importado.Fields[0].Value := AdoDataSet1.Fields[0].Value;
    Table_Importado.Fields[1].Value := AdoDataSet1.Fields[1].Value;
    Table_Importado.Fields[2].Value := AdoDataSet1.Fields[2].Value;

    Table_Importado.Post;
    
    AdoDataSet1.Next;
  end;
  
  Table_Importado.Active := False;
  AdoDataSet1.Active :=False;

Saludos.
__________________
De los sueños se construye la realidad...
Responder Con Cita
  #32  
Antiguo 06-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Yo ttiendo a poner ese post que indicas, pero en realidad es innecesario. Un dataset hace un post automático cada vez que nos movemos de registro, de manera que en cada vuelta se guarda el registro de la vuelta anterior.

Bye
Responder Con Cita
  #33  
Antiguo 06-02-2008
ozegarra ozegarra is offline
Miembro
 
Registrado: nov 2007
Ubicación: Lima - Peru
Posts: 35
Poder: 0
ozegarra Va por buen camino
Gracias por las respuestas, cambie un poco la logica para poder ejecutar un procedimiento almacenado que haga la insercion ya que no era tan simple como grabar una tabla directa. Ya pude realizar la tarea que requeria que era grabar dos tablas con ese excel.

De todas maneras probaré lo mencionado para cuando lo requiera, cada dia se aprende mas asi que muchas gracias por el apoyo y lo anotare en el libro...

Saludos
Oscar
Responder Con Cita
  #34  
Antiguo 05-03-2008
faustofabian faustofabian is offline
Registrado
 
Registrado: oct 2007
Posts: 4
Poder: 0
faustofabian Va por buen camino
Paleta Servers

hola genta me interesaria saber si alguien tiene conocimiento de la paleta SERVER en realidad me interesa manejar formatos en exel desde delphi5 como ser, combinar seldas, darle un formato de fuente especial, recuadros, manejo de colores. todo lo que es formatos en exel desde delphi. Gracias, a la espera de alguna respuesta.
Responder Con Cita
  #35  
Antiguo 15-07-2008
ledesmarc ledesmarc is offline
Miembro
 
Registrado: jun 2008
Posts: 24
Poder: 0
ledesmarc Va por buen camino
Excel

Roman gracias por la info, pero tengo un problema cuando quiero importar desde el excel (usando Ado) lo hace bien cuando se trata de una columna que sean todos del mismo tipo para mi caso(son todos numeros) el tema es que cuando en la columna hay mesclados numeros y letras en una misma celda, la importacion se corta (osea importa hasta esa celda)y la verdad me he cansado de buscar pero no encuentro el porque.
Te agredecere cualquier sugerencia
Saludos.
Marcos
Responder Con Cita
  #36  
Antiguo 17-06-2011
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
tengo problemas con hojas de excel .xlsx
Código Delphi [-]
error .  la tabla externa no tiene el formato esperado
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #37  
Antiguo 23-06-2011
Avatar de kapcomx
kapcomx kapcomx is offline
Miembro
 
Registrado: jun 2007
Ubicación: Puebla México
Posts: 350
Poder: 17
kapcomx Va por buen camino
Cool

veo ke ya solucionaste el problema, nada mas te recomendaria cambiar el paradox por otra base de datos con el numero de registros que mencionas, yo utilizaba paradox con tablas de medianas a grandes y era una autentica pesadilla, ahora con mysql 5.0 todo es felicidad....

Saludos...
Responder Con Cita
  #38  
Antiguo 28-08-2011
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Cita:
Empezado por ledesmarc Ver Mensaje
Roman gracias por la info, pero tengo un problema cuando quiero importar desde el excel (usando Ado) lo hace bien cuando se trata de una columna que sean todos del mismo tipo para mi caso(son todos numeros) el tema es que cuando en la columna hay mesclados numeros y letras en una misma celda, la importacion se corta (osea importa hasta esa celda)y la verdad me he cansado de buscar pero no encuentro el porque.
Te agredecere cualquier sugerencia
Saludos.
Marcos
Hola!

Estuve siguiendo el hilo para hacer la conexión...

Pero tuve un inconveniente, en mi archivo de excel tengo celdas que inician con una letra y otros donde son puros números, al hacer la importación el DBGrid solo me muestra los valores que inician con letra y los que solo son números se los saltea dejando la celda vacia...

La verdad no se porque pasa esto, ni como solucionar el problema...

Si alguien me puede ayudar se lo agradecería...
Responder Con Cita
  #39  
Antiguo 03-09-2011
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Pudiste solucionar este problema de alguna forma?
Responder Con Cita
  #40  
Antiguo 08-09-2011
Avatar de juanlaplata
juanlaplata juanlaplata is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Plata, Bs. As. (Argentina)
Posts: 212
Poder: 18
juanlaplata Va por buen camino
Importar Excel:
Código Delphi [-]
procedure TForm80.ExcelClick(Sender: TObject);
var
 Excel, Sheet: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz: Variant;
 FileName :string ;
begin

      OpenDialog.Title := 'Excel a Importar ...';
      OpenDialog.DefaultExt := 'xls';
      OpenDialog.InitialDir := ExtractFilePath(Application.ExeName);
      OpenDialog.FileName := '';
      OpenDialog.Filter:='Archivos Excel (*.xls)|*.xls';
      OpenDialog.FilterIndex:=1;
      if(OpenDialog.Execute)then
           begin
           if(OpenDialog.FileName <> '')then
              begin  

              FileName := OpenDialog.FileName;
              Excel := CreateOleObject('Excel.Application');
              Excel.Workbooks.Open(FileName);

              Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
              Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

              CantRow := Excel.ActiveCell.Row;
              CantCol := Excel.ActiveCell.Column;

              RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;

              for i:=1 to CantRow do
                 begin
                      for j:=1 to CantCol do
                       begin

                            Table1.Append;
                            Table1Campo.AsString := trim(RangoMatriz[i,j]);
                            Table1.Post;

                       end; // for j
                 end;//for i
              Excel.quit;
              end;
           end;
end;

Este Codigo, no es de mi autoria, deberia colocar la fuente, que la verdad, no la tengo en este momento.
Lo que hace es recorrer todas las celdas del Excel y cargar en una tabla.
La idea es ver como se hace y q cada uno lo reprograme a gusto y necesidad.
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 18:06:27.


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