Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-08-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Cargar un DBGrid a mano

Buenas, gente. A ver si alguien sabe si se puede hacer esto.

Tengo una DBGrid, pero la tengo que cargar desde un archivo de texto, no desde una consulta... (no me pregunten por qué )

A las StringGrid las llenaba a mano con toda naturalidad, pero ahora con las DB... no hay manera de entrarle a las celdas.

Gracias por el tiempo.
Responder Con Cita
  #2  
Antiguo 01-08-2008
Avatar de HombreGordo
HombreGordo HombreGordo is offline
Miembro
 
Registrado: jul 2008
Posts: 41
Poder: 0
HombreGordo Va por buen camino
Smile Quizás pueda ser que...

Quizás cabe la posibilidad de que el modo edición del DataSet está deshabilitado. Entonces cuando enlazas el DBGrid con el DataSet, no te permite editarlo por el simple hecho de que no está activo.

No estoy muy seguro, pero es mi experiencia. Cuando quería editar directamente con el DBGrid, simplemente ya estaba conectado con la tabla, y activa, por lo tanto, podía editar las entradas por ahí.
__________________
Aprendiz de Embarcadero RAD Studio...
Responder Con Cita
  #3  
Antiguo 01-08-2008
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
bueno, tal vez lo mejor sea llenar el dbgrid ligado con un ClientDataset el cual llenes "a mano" con los datos del archivo de texto, el clientdataset puedes guardarlo en formato XML (Texto) a lo mejor asi tambien te sirve y el codigo seria mucho menos...
Responder Con Cita
  #4  
Antiguo 01-08-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, ¿estás trabajando con algún Dataset como lo es el jvCsvDataSet de las JEDI que sólo maneja archivos de texto?

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #5  
Antiguo 01-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola,
puedes crear una consulta, cargar en ella mediante 'bulk insert' los datos, asociarlo a un datasource y este al dbgrid.

PD: parece ser que ya se ha tratado el tema, lo digo por los mensajes que aparecen abajo.
Responder Con Cita
  #6  
Antiguo 01-08-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Gracias por contestar, gente.

No estoy usando ningún componente de terceros.

La idea de usar un ClientDataset tampoco me sirve porque los únicos controles que tengo "permitido" (entiéndase: el cliente no tiene otra cosa que hacer que exigirme a mí, porque él me paga) son grids datasource y database. Ahí está el asunto... Encima la ventana es una plantilla, viene con lo que tiene y punto.

Lo del bulk tiene su gracia, lo admito, quizás me decante por esa solución.
Responder Con Cita
  #7  
Antiguo 01-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Tambien si puedes usar querys, existe el loadfromfile, aunque el texto tendria que estar en XML.
Responder Con Cita
  #8  
Antiguo 01-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Deberías especificar qué estructura tiene el archivo de texto. Tal vez puedas configurar la fuente de datos para acceder al TXT. Otra opción es "preprocesar" el archivo de texto para que el DBGrid lo entienda.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 01-08-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Pues el archivo de texto viene en seis formatos diferentes, pero todos son más o menos de la misma:

202548777102120545041 ESTO 1546564LOOTRO
202548777102120545041 ESTO 1546564LOOTRO
202548777102120545041 ESTO 1546564LOOTRO

Diez mil líneas de eso. Yo tengo que separar cada dato que sé que tienen, digamos un varchar(20), int, un varchar(8), 3 espacios, bla bla.

Todo un tema realmente. Con stringgrid sería tan fácil...

PD: ¿LoadFromFile? ¿Está en todas las versiones? Porque en Delphi 5 parece que no.
Responder Con Cita
  #10  
Antiguo 01-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
TAdoQuery.loadfromfile, pero solo carga XML. Tuve algo parecido...te lo muestro, y tu lo adaptas a tus necesidades...

Código Delphi [-]
procedure T_lectura.Interpretar_Families;
var
        buffer  : string;
        buf_tmp : PChar;
        codi_fam : integer;
        codi_gam,
        desc_fam : string;
        error_fam : boolean;
        k : cardinal;
        i : cardinal;
        tim : T_Timer;
begin
       _errors.Memo1.Clear;
       _errors.Memo1.Lines.Add('Inici d´interpretació de families.');
       _errors.Memo1.Lines.Add('_________________________________');

       error_fam := false;
// MemoFitxer.LoadFromFile(nombre_archivo);
       k := MemoFitxer.Lines.Count-1; // Nova linia amb EOF


       tim := T_Timer.Create(self);
       tim.Inicia(k,'Interpretació de families.');
       _lfam.Desactivar;

       // Obrim i borrem tota tFAM.

       dm.qFAM.Active := false;
       dm.qFAM.SQL.Text := 'delete from FAMILIES where id < 10000';
       dm.qFAM.ExecSQL;
       dm.qFAM.SQL.Text := 'select * from FAMILIES order by id asc';
       dm.qFAM.Active := true;;

       // Preparem variables.

       getmem(buf_tmp,115);

       i := 0;
       buf_tmp^ := chr(0);

       // Inici lectura del richedit

       codi_fam := -1;

       while (i < k) do
       begin
                Application.ProcessMessages;
                if tim.Abortat then break;

                buffer := MemoFitxer.Lines[0];

                Label4.Caption := inttostr(i);
                Update;
                MemoFitxer.Lines.Delete(0);

                // Carreguem les variables.

                strLcopy(buf_tmp,PChar(buffer),4);
                try
                codi_fam := strtoint(buf_tmp);
                except
                error_fam := true;
                _errors.Memo1.Lines.Add('línia ' + inttostr(i) + ': ' + 'No s''ha pogut interpretar ' + buf_tmp);
                continue;
                end;

                strLcopy(buf_tmp,PChar(buffer) + 4,35);
                desc_fam := buf_tmp;

                strLcopy(buf_tmp,PChar(buffer) + 39,2);
                codi_gam := buf_tmp;

                inc(i);
                tim.Seguent; // Augmentem curr_elem del timer.

                // insertem el nou registre.

                try
                dm.qFAM.Append;
                dm.qFAM.Fieldvalues['id'] := codi_fam;
                dm.qFAM.Fieldvalues['DESCR'] := _trim(desc_fam);
                dm.qFAM.Fieldvalues['id_linia'] := codi_gam;
                dm.qFAM.Post;
                except
                error_fam := true;
                _errors.Memo1.Lines.Add('línia ' + inttostr(i) +': ' +  'Error insertant ' + desc_fam + ' amb codi ' + inttostr(codi_fam));
                end;
       end;

       // Finalitzem finestra del timer.

       tim.Finalitza;

       // En el cas de cancelació.

       if tim.abortat then
       begin
         MessageDLG('Interpretació abortada',mtError,[mbOk],0);
         _errors.Memo1.Lines.Add('Interpretació abortada');
       end;
       tim.Destroy;

       // Tractament dels errors.

       if error_fam then
       begin
        MessageDLG('Hi han hagut errors d''interpretació.',mtInformation,[mbOk],0);
        _errors.Show;
       end;

       WindowState := wsNormal;

       _lfam.Activar;

       freemem(buf_tmp);
       Activada := false;
       close;
end;


aunque ponga memofitxer, es un richedit. Es curioso, pero me funcionaba mucho mas rapido que con un memo o un tstringlist.

Última edición por coso fecha: 01-08-2008 a las 19:42:19.
Responder Con Cita
  #11  
Antiguo 01-08-2008
[David] David is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Málaga
Posts: 417
Poder: 21
David Va por buen camino
coso, por que algunas variables empiezan por _ ??

saludos
Responder Con Cita
  #12  
Antiguo 01-08-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
todas mis forms empiezan con _, asi en el inspector de tareas siempre aparecen las primeras, aparte que luego es mas entendible a la hora de leer el codigo. trucos del almendruco
Responder Con Cita
  #13  
Antiguo 01-08-2008
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 Lord Delfos Ver Mensaje
Pues el archivo de texto viene en seis formatos diferentes, pero todos son más o menos de la misma:

202548777102120545041 ESTO 1546564LOOTRO
202548777102120545041 ESTO 1546564LOOTRO
202548777102120545041 ESTO 1546564LOOTRO

Diez mil líneas de eso. Yo tengo que separar cada dato que sé que tienen, digamos un varchar(20), int, un varchar(8), 3 espacios, bla bla.
Si la anchura de cada dato es fija o si hay un separador de campos, puedes usar ADO con el driver de texto para leer el archivo como si fuese una tabla de una base. Lo único que requieres es un archivo schema.ini que defina la longitud de cada campo o el separador. De eso hemos hablado aquí.

// Saludos
Responder Con Cita
  #14  
Antiguo 02-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que esto te puede servir. Sobre todo la parte del final del fichero SCHEMA.INI, donde puedes definir el ancho y tipo de cada uno de los campos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #15  
Antiguo 02-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is online now
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Acabo de comprobar que sí se puede. A esto me refería.
Archivos Adjuntos
Tipo de Archivo: zip ADO Fichero texto.zip (1,6 KB, 20 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 04-08-2008
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
¡Ajá! Eso de ADO parece interesantudo. Habrá que ojearlo, pues.

Gracias mil.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cargar DBGrid rohd Conexión con bases de datos 5 03-11-2010 00:30:59
¿Se puede cargar a mano un DBGrid de Jedi? fonx OOP 3 24-04-2008 16:32:00
Una Mano con QReport 4.06 y LX-300+ El_Raso Impresión 2 21-02-2007 16:34:51
Como cargar los datos de un arreglo en un dbgrid sin utilizar sql ilichhernandez Conexión con bases de datos 3 13-07-2006 19:17:20
Problemas al cargar el DBGrid Nathan Conexión con bases de datos 1 21-05-2006 10:23:26


La franja horaria es GMT +2. Ahora son las 13:28:46.


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