Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
llenar array con consulta

BUENAS AMIGOS....

tengo una aplicacion y para evitarme tener tantos componentes tengo una consulta generica que llamo c_generica cuyo sentencias sql(dinamicas creadas en tiempo de ejecucion) uso para borrar tablas y otras cosas que pretendo hacer con ella ....el problema es el siguiente ...

uno de los usos para dicha consulta es una consulta a una tabla pequeña de pocos registros ....quiero pasar en el inicio de la aplicacion la informacion de la tabla a una matriz de registros predefinida con los mismo campos de la tabla , cosa de llenar la matriz y desactivar la tabla para su uso posterior con otras sentencias...

el problema es que para cargar dichos valores de la tabla (digamos campo1,campo2,campo3) en el arreglo no logro llegar a dichos valores como tradicionalmente se hace

matriz(i).campo1:=c_genericaCampo1.value
etc
etc

para hacer esto deberia en tiempo de diseño creo los items disponibles en la consulta pero esto no es lo que quiero porque que deseo es que sea "GENERICA" para todo uso y no predefinida

intente esto pero no funciona

matriz(i).campo1:=C_Generica.fields.fields[i].value
etc
etc

esto no funciona pero creo que la idea general esta bien....es acceder a los campos activos de la consulta llamense como se llamen y asignarlos a variables sean arrays o lo que sean .....

gracias una vez mas por su ayuda ........
Responder Con Cita
  #2  
Antiguo 28-02-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[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
Cita:
Empezado por JULIOCTORRESG
...uno de los usos para dicha consulta es una consulta a una tabla pequeña de pocos registros ....quiero pasar en el inicio de la aplicacion la informacion de la tabla a una matriz de registros predefinida con los mismo campos de la tabla , cosa de llenar la matriz y desactivar la tabla para su uso posterior con otras sentencias...
No es exactamente lo que preguntas, pero está relacionado y creo que te evitaría muchos problemas y mucha codificación "manual". Lo que estás haciendo digamos que ya está inventado y se puede hacer con un TClienTDataSet. Creo que deberías mirarlo.

Se "engancha" a una tabla/consulta y al abrir la tabla recupera los registros al ClientDataSet(en memoria); A partir de ahí pueder cerrar la tabla y tienes "una copia" en memoria en el ClientDataSet, que viene a ser muy similar al Array que tú estás creando, con la diferencia que este tiene "formato" de tabla y puedes tratarlo con las operaciones estandard de una tabla e incluso utilizar con el los controles estandard de Delphi.

Discupa por haber desviado el tema.
__________________
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
  #3  
Antiguo 28-02-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
Esta bien pero es un control mas y ya tengo bastantes

Ese componente no me lo conocia y mira que es util, que ignorancia la mia...pero bueno, en todo caso lo que quiero es tener una consulta para realizar borrados llenar arreglos hacer varias cosas y esta solucion que me propones me obligaria a tener un componente mas en mi ya bastante llena aplicacion, sin embargo tomare tu consejo y estudiare este componente que hasta ahora no usaba....

gracias ....
Responder Con Cita
  #4  
Antiguo 01-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[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
Cita:
Empezado por JULIOCTORRESG
...esta solucion que me propones me obligaria a tener un componente mas en mi ya bastante llena aplicacion
Bueno, si son los que necesitas no son demasiados. Lo que encuentro que no tiene sentido es, no poner un componente que hace un trabajo que necesitas y en su lugar realizar mucho trabajo "a mano" con el consiguiente aumento del trabajo y del riesgo de errores.
De todas formas era un comentario.

Cita:
Empezado por JULIOCTORRESG
...para hacer esto deberia en tiempo de diseño creo los items disponibles en la consulta pero esto no es lo que quiero porque que deseo es que sea "GENERICA" para todo uso y no predefinida
La idea me surgió por este tema, ya que este componente coge de forma automática y dinámica la definición de los campos de la tabla, de forma que el tema de rellenarlos está solventado.
En cuanto ha realizarlo "a mano" la solución que se me ocurre es que tu estructura (matriz) tuviera TFields (genérico), de forma que podrías almacenar los valores de la tabla segun el tipo; Aunque no estoy seguro de que te sirviera el tipo genérico o si al final necesitarías los tipos específivcos (string, integer,...)
__________________
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
  #5  
Antiguo 01-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
sin duda lo tomare en cuenta

hola amigos, los comentarios anteriores me obligan a reflexionar y llego a la siguiente conclusion .... antes de conocer delphi tenia como lenguaje a Visual Fox pro en este lenguaje al menos en la forma que aprendi tenia como caracteristicas 0 componente visuales para acceso a datos ,todo estaba organizado en un administrador de proyectos en el cual uno veia y manipulaba tablas consulta etc ......eso me acostumbro a trabajar con formularios " limpios" y disculpen el termino pero asi lo veia uno solo los componentes que acceden a dichos datos o sea tedit label etc ....por eso quizas me costo delphi al principio y aun ahora extraño no ver tantos componentes regados aun en el contenedor de datos aun en el data modulo ....

otra de mis manias heredadas de fox pro es tratar en lo posible de no mantener tablas abiertas en la aplicacion , en otras palabras si mi aplicacion tiene por ejemplo 10 tablas y/o consultas tratare de abrir solo aquellas que uso y si puedo aquellas que cumplen ciertas condiciones(pequeñas con pocos registros y que no varian constantemente ) busco alternativas tales como los array de registros para guardar esos datos para luego liberar los recursos y solo mantengo en memoria los arrreglos ....

si esto es bueno o no me gustaria que opinen , pero sin duda que me obliga a meter mas codigo por ejemplo un procedure para llenar el arreglo que se ejecuta al inicio de la aplicacion y una Function para buscar datos dentro de ella (por cierto para buscar datos dentro del arreglo lo hago de forma secuencial 1 a 1 hasta encontrarlo claro son arreglos pequeños de no mas de 50 registros pero si se les ocurre una idea mejor bienvenida sea)

bueno esta es mi historia(triste, sensata , o tonta no lo se ) lo que si se es que quiero aprender a programar mas que nada en este mundo y ademas de delphi quiero aprender otros lenguajes PHP , JAVA por ejemplo pero esto lo preguntare despues .....

gracias amigo y en serio estudiare el componente que me sugiere a ver si de una vez borro los arreglos de mi vida jejejejej

hasta luego y saludos desde Venezuela...........
Responder Con Cita
  #6  
Antiguo 01-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
sin duda lo tomare en cuenta

hola amigos, los comentarios anteriores me obligan a reflexionar y llego a la siguiente conclusion .... antes de conocer delphi tenia como lenguaje a Visual Fox pro en este lenguaje al menos en la forma que aprendi tenia como caracteristicas 0 componente visuales para acceso a datos ,todo estaba organizado en un administrador de proyectos en el cual uno veia y manipulaba tablas consulta etc ......eso me acostumbro a trabajar con formularios " limpios" y disculpen el termino pero asi lo veia uno solo los componentes que acceden a dichos datos o sea tedit label etc ....por eso quizas me costo delphi al principio y aun ahora extraño no ver tantos componentes regados aun en el contenedor de datos aun en el data modulo ....

otra de mis manias heredadas de fox pro es tratar en lo posible de no mantener tablas abiertas en la aplicacion , en otras palabras si mi aplicacion tiene por ejemplo 10 tablas y/o consultas tratare de abrir solo aquellas que uso y si puedo aquellas que cumplen ciertas condiciones(pequeñas con pocos registros y que no varian constantemente ) busco alternativas tales como los array de registros para guardar esos datos para luego liberar los recursos y solo mantengo en memoria los arrreglos ....

si esto es bueno o no me gustaria que opinen , pero sin duda que me obliga a meter mas codigo por ejemplo un procedure para llenar el arreglo que se ejecuta al inicio de la aplicacion y una Function para buscar datos dentro de ella (por cierto para buscar datos dentro del arreglo lo hago de forma secuencial 1 a 1 hasta encontrarlo claro son arreglos pequeños de no mas de 50 registros pero si se les ocurre una idea mejor bienvenida sea)

bueno esta es mi historia(triste, sensata , o tonta no lo se ) lo que si se es que quiero aprender a programar mas que nada en este mundo y ademas de delphi quiero aprender otros lenguajes PHP , JAVA por ejemplo pero esto lo preguntare despues .....

gracias amigo y en serio estudiare el componente que me sugiere a ver si de una vez borro los arreglos de mi vida jejejejej

hasta luego y saludos desde Venezuela...........

P.D algunos diran si te gusto tanto foxpro porque estas con delphi ....la respuesta es un componente y sus capacidades que me enamoro DBLookupComboBox

Última edición por JULIOCTORRESG fecha: 01-03-2007 a las 19:03:46.
Responder Con Cita
  #7  
Antiguo 01-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[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
Cita:
Empezado por JULIOCTORRESG
otra de mis manias heredadas de fox pro es tratar en lo posible de no mantener tablas abiertas en la aplicacion , en otras palabras si mi aplicacion tiene por ejemplo 10 tablas y/o consultas tratare de abrir solo aquellas que uso y si puedo aquellas que cumplen ciertas condiciones(pequeñas con pocos registros y que no varian constantemente ) busco alternativas tales como los array de registros para guardar esos datos para luego liberar los recursos y solo mantengo en memoria los arrreglos ....
Me parece un buen consejo. Abrir y cerrar las tablas cuando las necesites.
En el caso de guardar en memoria tablas pequeñas y de pocos (o nulos) cambios, es también una solución que utilizo a veces. En nuestro caso hablamos de "tablas en caché" o "tablas en memoria"; Lo que sí me parece ineficiente es volcar eso a arreglos, como ya te he comentado cuando tienes componentes que te hacen ese trabajo.
Si el TClientDataSet no te convence, otra opción es lo que se conocen como "MemoryTables"; El nombre creo que lo dice todo. Y la idea fundamentamente es la misma que la tuya y que la de TClentDataSet.

Cita:
Empezado por JULIOCTORRESG
y una Function para buscar datos dentro de ella (por cierto para buscar datos dentro del arreglo lo hago de forma secuencial 1 a 1 hasta encontrarlo claro son arreglos pequeños de no mas de 50 registros pero si se les ocurre una idea mejor bienvenida sea)
El tema de búsquedas es algo que también tienes solventado (y seguramente de forma más eficiente) en los métodos anteriores. Otra opción si decides seguir haciendolo tú es utilizar por ejemplo TStringList. Si utilizas el campo clave para la lista y luego tus Registros/objetos colgando de la propiedad Objects, puedes buscar por la clave utilizando búsqueda dicotómica/binaria (que es la que implementa TStringList si lo usas ordenado).[/quote]
__________________
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
  #8  
Antiguo 01-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
Esta Bien Amigo

Me rindo a tu experiencia y no voy yo a salir a decir que los arreglos son la mejor solucion ....

explorare tus alternativas pero perdona la duda , que es eso de MemoryTables es una propiedad un componente a usar que es y donde esta ...por otro lado con lo del clientdataset ya lo vi y lo estoy probando pero perdona sabes de un hilo por alli para aprender a usarlo, ya se que se manipula igual que un data set normal pero lo que quiero es en tiempo de ejecucion cargarlo con un query y luego eliminar dicho query para usarlo en otra cosa, se que me entiendes pero por sia un ejemplo

coloco en la aplicacion un objeto query y 2(o mas) clientdataset

entonces en el on activate del form principal digo ....

query.close;
query.sql.clear;
query.sql.add('SELECT campo1,campo2,campo3 from tabla1');
query.open;

// aca cargo este resultado al clientdataset
//pero seria algo asi como

clientdataset1.datasourse:=query; //esto que escribo seguro es una barbaridad.....


//y eso es lo que no se hacer.......

//luego de cargado
query.close;

//para despues ..................

query.close;
query.sql.clear;
query.sql.add('SELECT elemento1,elemento2,elemento3 from OtraTabla');
query.open;

clientdataset2.datasourse:=query; // segunda vez que escribo la barbaridad esta.....

//y al fin tataaaaaaaaaaaaaa.....
query.close;

//y me queda libre para usarlo despues como de hecho ya lo usa mi aplicacion para borrar conjuntos de datos ......

la linea de asignacion para enganchar, colgar, asociar el clientdataset al query es lo que no se


ya me esta dando pena tanta preguntadera, pero citando al chavo del Ocho .....pos que hago si yo no sabo........

Última edición por JULIOCTORRESG fecha: 01-03-2007 a las 22:12:01.
Responder Con Cita
  #9  
Antiguo 02-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[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
Cita:
Empezado por JULIOCTORRESG
Me rindo a tu experiencia y no voy yo a salir a decir que los arreglos son la mejor solucion...
Tampoco vayas a tomar mis opiniones como "la verdad"; Ni mucho menos. Simplemente es que creo que este tema te puede ser útil. Pruébalo y evalua tú mismo. Al final tal vez llegues a la conclusión de que es mejor seguir con arreglos.
Yo soy el primero que te digo que no hay una solución "mejor" para todos los casos; A veces para un caso particular lo mejor es una solución "diferente".
Pero si puedes probarlo, así ya tendrás 2 opciones para decidir.

En cuanto a las MemoryTables, es un conepto similar al que estamos hablando. Son componentes que trabajan con tablas en memoria. Normalmente lo que hacen es cargar los datos de una consulta o una tabla a un DataSet en local y luego desconectarse de la Base de Datos.
Aquí puedes encontrar algunos; Las RxLib (no se si trabajas con ellas) también tienen uno y las Quantum (estan son de pago) tambien uno muy bueno.

Creo que engo algun ejemplo por aquí de TClientDataset de alguna vez que hemos estado hablando del tema, déjame que lo busque y lo subo.
__________________
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
  #10  
Antiguo 02-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Según tu último mensaje, quizás una función de este estilo te sirva:
Código Delphi [-]
function CreateQuery(sql:string):TQuery;
begin
  Result := TQuery.Create(nil);
  Result.DatabaseName := bla bla...
  Result.sql.text := sql;
end;
hecho esto, ahora tienes 2 formas de usarla:
Código Delphi [-]

var q :TQuery;
 q := CreateQuery('select * from tabla');
 q.Open;
 q.Free;

 q := CreateQuery('update tabla1 set campo1 = 32');
 q.ExecSql;
 q.Free;

En definitiva, puedes crear tantos querys como quieras, pero sin tener los componentes en tu ventana dando la lata.

Edito otra vez más:

Si una query va a estar ligada a un Grid, por ejemplo, para mostrar datos al usuario, no reutilices esa query para nada, déjala para ese menester nada más.

Si quieres tener una query, que solo se usa en determinadas ocasiones, y sabes que nunca va a solaparse su ejecución con otras que usen esa misma query, podrías usar una variante de esa función:

Código Delphi [-]
function ChangeQuery(qry:TQuery; sql:string):TQuery;
begin
  if qry = nil then 
    Result := TQuery.Create(nil)
  else
  begin
    if qry.Active then 
      Qry.Close;
      Result := qry;
  end;
  
  Result.DatabaseName := bla bla...
  Result.sql.text := sql;
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 02-03-2007 a las 12:48:09.
Responder Con Cita
  #11  
Antiguo 02-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[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
Bueno, al final encontré el ejemplillo y modificándolo un poco ha quedado así.
Son varios (3) TClienDataSet que se cargan a partir de un único ADOQuery;
Además un par de ejempillos sencillos de cómo filtrar y ordenar.

El ejemplo completo lo tienes en el FTP público. Con el nombre:
[Ejemplo] Varios_ClientDataSet.zip

Espero que te sea últil.

NOTA: Si vas ejecutando los botones en orden de arriba hacia abajo, irás viendo los resultados.
__________________
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
  #12  
Antiguo 02-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
Que buen ejemplo muchas graciaas

Agradecido estoy y veo cosas que antes no usaba ....pero una vez mas la idea era no usar componentes para almacenar datos ....(un error mio segun veo) pero insisto y ahora tengo que usar ademas del clientdataset el objeto DataSetprovider ........caramba.....me persiguen los componentes, se que ya esta fuerte pero no puedo conectarme al query sin el DataSetprovider en tiempo de diseño se puede con boton secundario assing local data y pregunto acaso no se puede en ejecucion ....

si no es asi que caray a por cierto no quiero insertar muchos componentes ajenos porque mi intencion es migrar mi aplicacion a Delphi 2006 sin mayores problemas ...de hecho ya tengo uno para acceso a datos no uso BDE ni ADO uso uno de la gente de corelab .....SDAC ....
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
llenar un combobox fabian20s Conexión con bases de datos 13 30-11-2007 18:54:56
Consulta con array tgsistemas SQL 1 30-05-2005 20:23:41
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
Necesito llenar un DBGrid desde una consulta con dbexpresss vivim82 Varios 5 05-05-2004 18:31:02


La franja horaria es GMT +2. Ahora son las 20:12:23.


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