![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola compañeros.
Me he quedado un poco más deshubicado con sus respuestas, pues no he comprendido muy bien. Voy a contestarle a los dos en el mismo post. Del post de Roman, No entiendo muy bien lo que dices, he estado pensando lo que comentas y a pesar que veo la ventaja de incluir esos "procedimientos sueltos" a la clase correspondiente, me daría más dolor de cabeza a la hora de cambiar la base de datos. A ver si me explico... Segun comentas, a la hora de crear el objeto, tengo que utilizar el constructor de la clase concreta, con lo cual si tengo 100 querys creados dinámicamente en el código, tendría que hacer 100 cambios, no? Cita:
... era horrible mantener el código, hasta que se me ocurrió esto. Tal vez no entendí bien lo que propones, si me equivoco en algo o no entendí bien algo, por favor dime... Tal vez lo que planteas tiene realmente ventaja con lo de las fabricas que comentas (que dicho sea de paso, no estoy seguro de lo que es ...).Del post de Lpmlpm, tampoco tengo claras algunas cosas ...Comentas que no sueles trabajar con TTable, que sueles trabajar con querys o con ClientDataset. Pero cómo haces si necesitas un TTable? Por qué no sueles usar TTables? Por que si cambias un campo de la BD, se ve muy afectado por errores a consecuencia de dicho cambio? No tengo idea sobre los ClientDataset. Qué ventajas aportan? Otra cosita, haces muchas referencias a la palabra "catálogo(s)". A qué te refieres cuando hablas de eso, a los metadatos de la base de datos (el diccionario de datos)? El código que adjuntas lo comprendo a medias, pues la parte final no la comprendo bien, es como una forma de agregar condiciones "OR" a la clausula "WHERE"? Y qué consigues con esto? Es como un método de búsqueda por todos los campos donde aparezca un determinado texto? Está interesante ese método, pero no termino de digerirlo ...Me gustaría poder hacer un DataModule genérico, de forma que sólo ponga las tablas y los campos, y al final en la ejecución como que se "transformen" los objetos a una clase más particular conservando los atributos base (como campos, consultas...). Es posible esto? Cómo? Parece mentira, pero estoy trabajando con MySQL, y no he conseguido componentes que no fallen. por ODBC los drivers fallan muchos, confunden los tipos de datos al agregar columnas, por ADO, 3/4 de lo mismo... por MySQLDac, bueno... conseguí una versión vieja que no era compatible con D2005, y retoqué el código... y kabooom... fallá por todos lados. con Zeos, tengo problemas con las transacciones, AutoCommit y todo eso... No sé qué componentes usar. Recuerdo haber probado unos drivers de SciBit que "aparentemente" funcionaban bien, pero caducaban a los 30 días ![]() Muchas gracias por su valioso tiempo y ayuda. Lástima que no está causando mucho debate este post, pensé que más gente se incorporaría pues es algo muy interesante que desde mi punto de vista, tiene muchas ventajas. Un cordial saludo... ![]() |
|
#2
|
|||||||
|
|||||||
|
Cita:
Cita:
Ahora los ClientDataset, estos son una especie de TQuery's especiales donde aparte de la propiedad SQL normal tambien tienen un UpdateSQL, InsertSQL y DeleteSQL, que te permite escribir sentencias SQL para cada una de las operaciones sobre los registros de tu Dataset, asi puedes controlar que cuando se cambie un registro en tu tabla el cambio afecte a solo x campos o bien que se refleje en otras tablas, etc... todo lo que se te ocurra que puedes hacer con sentencias SQL. Un ejemplo de esto es el componente IBDataset de la pestaña de Interbase. Creo que en zeos no existe algo similar, pero en suites como Asta, FIBPlus o IBObjects siempre vas a encontrar un componente que tengas estas características y es que realmente creo que es la forma adecuada de trabajar con componentes de datos. Cita:
Cita:
el resto del algoritmo es adecuar la sentencia a partir de una variable que es donde se especifica como es que el motor de BD utilizado puede interpretar la sentencia de busqueda, por ponerte un ejemplo en MySQL no existe la sentencia CONTAINING solo se puede usar LIKE, pero en Firebird CONTAINING funciona mejor pues busca sin tomar en cuenta mayusculas y minusculas con lo que la busqueda es aun mas genérica... cosas asi son las que resuelves con este tipo de variables de configuración... Cita:
Cita:
Cita:
Saludos ![]()
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."
|
|
#3
|
|||
|
|||
|
Hola de nuevo compañeros.
Muchisimas gracias por contestarme, de verdad aprecio la buena voluntad y el tiempo que dedican a leer lo que posteo, a pensar, y a responder. Que Dios se los pague y les multiplique su tiempo invertido. De nuevo les responderé a los dos en el mismo post, pero pueden contestar todos a lo que deseen. Roman: Creo que ya voy entendiendo el código que planteas, pero para serte sincero creo que necesitaré algo de tiempo para "hacer la digestión" de dicho código, y poder adaptarlo a los requerimientos del programa. Tengo una pequeña gran pregunta , y es... Esa técnica es compatible con desarrollo DB Aware? Porque en el la implementación que llevo a cabo, no es un desarrollo puro de clases/objetos, sino es un hibrido... Al comienzo era todo DB Aware, luego fuí viendo la ventaja de las clases, y ahora tengo una cosa rara hibrida DB Aware-clases/objetos que me tiene un poco despistado. La verdad es que no me termina de gustar la técnica DB Aware, pues no sé pero siempre me deja un sabor de boca de "estar haciendo algo mal"... No me parece una técnica buena como tal, pues cualquier cambio pequeño, supone muuucho tiempo para re-actualizar los campos de los DataSets.Explico un poco más... La linea que sigo en el proyecto es algo tal que así... (1) Cualquier entrada de datos, debe hacerse por clases... Tengo una clase llamada TOperaciones, donde estan métodos que me ayudan a realizar operacones, y las operaciones como tal, como son: CheckIn, CheckOut, Cambio de habitacion, Realizar un mantenimiento... Todos los datos de las operaciones se pasan como argumentos, en lugar de hacer asignaciones a propiedades... todavía no tengo claro si esto es lo correcto o no. Tambien me he planteado el hacer clases especificas para cada operacion, es decir, una clase general TOperacion (con lo "posiblemente generico" a todas las operaciones) y luego TOperacionCheckIn, TOperacionCheckOut... y que todas hereden de TOperacion. Todavía no sé cual es mejor, y estoy pensando en ventajas e inconvenientes, incluso para pruebas en DUnit y todo eso. (2) Cualquier SELECT, UPDATE, y DELETE se hace mediante DB Aware. Esto lo veo más como una sección de mantenimiento... En general, existe un formulario de listado para cada tabla, y dicho formulario tiene métodos para modificar (se muestra un editor asociado), y por último se puede eliminar también de ese mismo formulario. No tengo claro si esta técnica "hibrida" es correcta o no, y si me va a traer más dolores de cabeza que soluciones, si pudieran aportar también ideas sobre este tema, sería muy interesante (o tal vez deba abrir otro post para esto, para no mezclar ideas...)Lpmlpm: La verdad es que no sé si todo lo que hace un TTable, lo puede hacer un TQuery, pero por ejemplo, recuerdo que me confundía todo a la hora de hacer una actualización o un borrado con un Query, es decir, recuerdo que alguna vez probé a hacer todo desde un Query como si fuera un TTable, y me daba algunos errores. Nunca he probado los DataClient, pero tal y como comentas parece la forma más "natural" y lógica de trabajar, pues una actualización generalmente tiene dependencias y una eliminación también, y es posible que haya algún interés en hacer más cosas aparte de la simple operación como tal, como por ejemplo realizar operaciones en cascada y cosas así. La verdad es que me siento un poco abrumado y desorientado, pues me estoy enfrentando a algo más grande de lo que pensaba, y no tengo una "linea clara" a seguir... ![]() Disculpen si pregunto tanto, o si molesto tanto con algunas cosas, pero me gustaría intentar plantear todo lo mejor posible desde el comienzo pues ya he tenido que "retocar" y "reconstruir" muchas cosas por malos planteamientos de base, y eso no es agradable .Muchas gracias de nuevo por su ayuda, les estoy muy agradecido. Un cordial ShowMessage('Saludo '); |
|
#4
|
||||
|
||||
|
Cita:
Cita:
Por ejemplo me sucede con cierta regularidad que un cliente llega y me dice que tiene un sistema que alguien mas le hizo en digamos MySQL o en Access pero que hay muchas cosas que le gustaría saber a partir de la información que esta en su base de datos, osea me dicen "Quisiera poder sacar un listado de todos los clientes que me deben mas de tanto y que me los agrupara por colonia, y me diera asu vez subtotales por giro del cliente, etc... información que ahi esta pero que quien hizo la aplicación no se preocupo de poder mostrarle a su dueño... ese tipo de cosas ahora para mi son de lo mas sencillas, puedo montar una aplicación de reporteo donde el puede sacar el reporte que quiera y como lo quiera y que el cliente siga usando su aplicación original. eso creo que es un valor agregado que es padrisimo poder mantener basado en un nucleo e ir dandole mantenimiento a todo al mismo tiempo tanto a mis aplicaciones como a mis servicios de reporteo o de administracion de recursos y seguridad, etc... Si no fue para este tipo de cosas que se inventó la POO entonces que alguien me diga para que fue ![]() Y no solo eso sino que tambien el poder trabajar independientemente ya sea con Asta, IBO, ADO, etc... me permite poder agregar extensiones o complementaciones a sistemas de otras empresas, en fin, las posibilidades son infinitas... Yo te exhorto a que continues con esa labor de crear código genérico, pues por experiencia propia te puedo asegurar que te verás muy beneficiado de ello en el futuro, es una lástima que no haya habido la participación que se hubiera esperado en este hilo... igual en otra ocasión en que las conciencias esten un poco mas despiertas ![]()
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."
|
|
#5
|
|||
|
|||
|
Hola de nuevo
![]() Cita:
Por ejemplo, he estado pensando en un nucleo para el acceso a menús, acciones, componentes, etc. basado en un control de accesos configurable, es decir, por ejemplo poder crear un Rol (o perfil) de usuario, y asignarle varios permisos como por ejemplo "Mantenimiento de clientes", "Listar estado de ganancias", "Eliminar artículo", y después asignar dicho rol a uno o varios usuarios. Sé que eso existe ya, pero casi todo lo que he visto no es compatible con D2005 .Lo de los reportes que comentas me dejó impactado... La verdad no termino de imaginar cómo podría hacer eso... Mi meta es hacer algo que aunque lleve trabajo, sea muy bueno, y bien depurado para el futuro. Un cordial saludo, y muchas gracias por tu ayuda .Sí, es una lástima que no se una más gente ![]() |
|
#6
|
||||
|
||||
|
Cita:
Pero asi como te digo que lo genérico que tengo también es indistinto del reporteador que uses... al final de cuentas en todos pones componentes de unas clases determinadas sobre bandas o subcomponentes, asi que tambien independizar el nucleo del reporteador en cuestión tampoco esta muy guajiro... de hecho lo que tengo hecho es independiente del reporteador, pues habrá clientes y aplicaciones que no requieran el poder de ReportBuilder y con la misma tecnología empotrada sobre un FreeReports (la versión gratis de FastReports que tambien es muy bueno) es mas que suficiente... Cita:
Saludos
__________________
"Lo mejor de no saber hacer nada es que se tiene mucho tiempo libre."
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|