FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Contrastando mi forma de trabajar con el tuto de Caral
Bueno, soy semi-nuevo en Delphi jaja, se oye feo... pero el caso jaja es que estaba leyendo el mini-tutorial de Caral (http://www.clubdelphi.com/foros/showthread.php?t=44763) y descubrí una forma muy distinta de trabajar a la mía, y quisiera que me dijeran cual es mejor.
Primero que nada yo he usado paradox con el database desktop del delphi 6, y Firebird con Interbase Manager Lite con turbo delphi. Digo esto para explicar como me conecté a mi BD en ambos casos. Con Delphi 6 solo cree el alias, y en el datamodule puse componentes "Ttable" y "Tdatasource". Con Turbo Delphi batallé un poco más y tuve que crear un ODBC y pegar ademas de los componentes "Ttable" y "Tdatasource" un componente "Tdatabase" que es con la que hice la conexión. 1. Hasta aquí, ¿es mejor esa forma de conexión o es mejor con ADOconnection? ¿qué diferencias o que utilidad tiene ADOconnection? Luego, yo nunca he usado Querys, de hecho mi conocimiento de SQL es bastante básico, si no es que menos que eso. Mi forma de guardar en la base de datos es algo así:
A diferencia de en el tuto de Caral en el que se hace referencia a los campos (o eso creo) de la siguiente forma: Tabla.Fields[numero].Tipo¿? ... la verdad no se, no conozco estos comandos. No se si alguien me pueda aclarar por qué se hace referencia a los campos de esa forma. Y otra cosa, cuando yo comencé me dijeron que no usara los DBEdit y DBLabel, no se por qué, pero me lo dijo alguien con más experiencia y le hice caso, y es por eso que trabajo de esa manera en vez de accesar directamente a la BD. Igual para mostrar algún registro primero lo localizo utilizando:
y después hago lo inverso a lo que describí arriba: 2. ¿Tiene alguien idea de que de malo pueda tener usar los DBEdit o DBLabel? ¿se puede corromper la BD por un mal uso de estos o algo así? 3. Creen que se pueda combinar el estilo que yo uso con este otro para lo que son las Querys por ejemplo, ya que los ADOQuerys que veo en ese tutorial ahorran mucho trabajo (que yo hacía usando ciclos y cosas así x_X) PD. Como un extra, y que tal vez debí postear en el tema del tutorial, alguien sería tan amable de explicarme detalladamente esta query?: que es DistinctRow? Sum es un método para sumar todos los registros en el que se pone [Tabla].[Campo] ??? en la parte:
Suma De Depósitos, qué es? una variable? un especie de nombre? ... Bueno, espero me puedan ayudar a sacar esas dudas. Gracias. |
#2
|
|||
|
|||
Hola,
1.- Adoconnection se conecta a bases de datos usando tansolo connectionstring, y pudiendose cambiar esta en tiempo de ejecución.
lo que significa que te olvidas de los alias y del ODBC Cita:
Cita:
DBLabel? ¿se puede corromper la BD por un mal uso de estos o algo así? No tienen nada malo...lo unico que si no los controlas, pues es quiza mas facil trabajar con los edits y luego postear los cambios. 3. Creen que se pueda combinar el estilo que yo uso con este otro para lo que son las Querys por ejemplo, ya que los ADOQuerys que veo en ese tutorial ahorran mucho trabajo (que yo hacía usando ciclos y cosas así x_X) Puedes asignarle a un datasource una query, incluso, sin tener que trabajar con tablas ya Prueba de hacer, siendo q una TAdoQuery,
Estos campos quedaran en la query hasta que se haga una nueva consulta: al seleccionar, estas seleccionando esos 2 campos (suma y numero_registros) y ninguno mas en ese momento,por lo que seria como tener una tabla con solo dos campos creados a partir de BANCOS. en ese contexto, distinctrow estaria mal. Aqui un tutorial SQL basico Última edición por coso fecha: 17-08-2008 a las 17:13:43. |
#3
|
||||
|
||||
Cita:
Con ADO puedes armar una conexión con mucha facilidad y conectarse a muchas bases de datos. Necesitarás un proveedor de acceso, un ODBC. Y esta manera de acceder a tus bases de datos suele ser más "lenta" que una directa o nativa. No se como explicarte mejor el tema... no me salen mucho las palabras. A ver si alguien más puede ser más detallista en este aspecto. Cita:
A diferencia de una query solo traemos los datos necesarios. Por el tema de que diferencia hay entre esos modos de acceder a los campos, creo que este hilo puede ser de ayuda. Cita:
Me arriesgo al decir que el problema (mejor dicho, riesgo) que corremos al usar estos componentes es que es posible modificar el cursor y posicionarnos en un registro distinto con el que estamos operando. El uso de data-ware puede hacernos más fácil el realizar las operaciones contra las tabla de nuestras bases de datos, pero puede que esa libertad de acceder tan fácil a los datos y modificarlos puede ser contraproducente si no se controla adecuadamente la situación. Cita:
el trabajo y ofrecer al mismo tiempo los controles adecuados para ofrecer las medidas que garanticen la integridad de información, y no olvidar el criterio de la perfomance. De cualquier modo, no soy un buen crítico para decirte que esta bien o mal, por lo que si esta bien combinar las cosas es correcto o no, mejor dejarlo a criterio de uno. Mientras mantengas el orden en tu código está bien. Saludos, |
#4
|
||||
|
||||
Hola
Lo único que podría agregar a lo dicho es: ADO es mas sencillo que BDE, la conexión es directa y fácil de hacer. Los Query son básicos en una buena aplicación. DISTINCTROW es usado (que yo sepa) únicamente por access, en tal caso se puede usar DISTINCT en cualquier base de datos. Los corchetes también son usados en access, en otras no los necesita. El tutorial esta hecho para access, pero se puede trasladar a otras bases de datos, haciendo ciertas modificaciones. Que yo sepa no se puede combinar ADO con BDE, si es a eso a lo que te refieres. Si lo que pides es una recomendación yo te diría que uses ADO (tambien hay otro que no me acuerdo como se llama) y te olvides de BDE. Saludos
__________________
Siempre Novato |
#5
|
||||
|
||||
No estoy de acuerdo con todo lo que se dice por aquí y como esto es un foro, doy mi opinión.
La verdad es que todos llevan razón, incluso tu amigo que dijo que no usaras DBEdits, pero hay que explicar el por qué no usarlos y también cuando sí usarlos. Cita:
Tienes varios métodos para acceder a los campos: 1- campos persistentes (doble clic al TTable y después en el Field editor boton derecho y Add All Fileds). Así accedes al campo: NombreTablaNombreCampo.AsXXX Ésta si cabe, es la forma más rápida y eficiente de acceder al campo. Fíjate que no hay un punto entre el nombre de la tabla y el nombre del campo, el nombre es todo uno (es la forma de delphi de nombrar los campos). 2- Por el índice de la lista de campos, es casi igual de rápido que el método anterior, solo ha de accederse a la lista Fields, ver que el índice (en este caso el cuarto campo) es válido, y se accede a él: Fields[3].AsXXX 3- Por el nombre del campo, aquí primero se ha de buscar si ese campo existe y después se accede a él: Tabla.Fields['NombreCampo'].Asxxxx Y por último, otro que se usa mucho: 4- tabla.FieldByName('NombreCampo').Asxxx que también implica hacer una búsqueda para ver si ese campo existe en tiempo de ejecución. Puedes usar el que te sea más cómodo. Cita:
Tienes una agenda y en la base de datos lo guardas así: Código:
fecha hora tarea 01/01/2008 15:00 Ver la novela :-P 01/01/2008 17:00 Ver Barrio Sésamo :-P 02/01/2008 15:00 leer el periodico Código:
01/01/2008 02/01/2008 03/01/2008 15:00 Ver la novela :-P leer el periodico 17:00 Ver Barrio Sésamo :-P Dentro de un programa, puedes tener una ventana donde usas DBEdits y en otra ventana no usarlos. No hay ningún problema en mezclar las filosofías de trabajo. 2. ¿Tiene alguien idea de que de malo pueda tener usar los DBEdit o DBLabel? ¿se puede corromper la BD por un mal uso de estos o algo así? No usar DBEdits supone más trabajo. Estas 4 líneas lo hace automáticamente los DBEdits junto con un TDBNavigator:
Pones los DBEdits en el form, configuras su propiedad Datasource y Field, pones un TDBNavigator en el form, configuras su propiedad DataSource. Listo. Abres la tabla en el formCreate y ya puedes: - añadir registros - modificar registros - borrar registros - moverte entre registros ¡¡ sin escribir ni una sola línea de código !! Desventajas de usar DBEdits: - Todo lo que haces se graba directamente en la Base de datos, puede que en algún caso no te interese, quizás puedas usar Cache Updates (busca en el foro por ApplyUpdates) es un método intermedio entre usar DBEdits y usar Edits. 3. Creen que se pueda combinar el estilo que yo uso con este otro para lo que son las Querys por ejemplo, ya que los ADOQuerys que veo en ese tutorial ahorran mucho trabajo (que yo hacía usando ciclos y cosas así x_X) [/quote] Por supuesto, Todo los ciclos que haces en paradox puedes sustituirlo por un TQuery. Busca en internet un manual de SQL, en menos de 2 horas verás que son muy potentes y flexibles. PD. Como un extra, y que tal vez debí postear en el tema del tutorial, alguien sería tan amable de explicarme detalladamente esta query?: Como ya te han dicho, eso equivale a recorrer todos los registros de la tabla Banco, sumar el campo deposito de todos ellos (para saber el monto total) y por último devuelve el total en un campo que se llama "Suma De Depósitos" como bien dices es un "nombre", un Alias que se le da a la suma total. Cuando un campo lleva espacios en su nombre, se debe agregar los corchetes para que el SQL sepa donde empieza el nombre del campo y donde termina. Access usa corchetes, el SQL estandard usa dobles comillas por lo que puedes escribir ese campo de diversas formas, según el motor de bases de datos que uses. La palabra "Sum" es una función del lenguaje SQL, también puedes hacer promedios, medias, contar registros, etc con el mismo campo de todos los registros de la tabla. El TQuery es una forma de filtrar registros de una forma más flexible que la propiedad Filter del TTable.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
Unas precisiones a la estupenda explicación de Lepe en cuanto a la forma de acceder a los campos:
En la primera forma -los campos persistentes- si bien pueden usarse las propiedades AsXXXX, de hecho puede directamente usarse la propiedad Value. En otros casos, Value no sería recomendable porque a nivel de TField, se trata de un tipo genérico Variant, cuyo acceso no es óptimo; pero en el caso de campos persistentes, cada campo se crea del tipo adecuado: TIntegerField, TStringField, TBooleanField, etc. En la tercera forma: Tabla.Fields['NombreCampo'].Asxxxx más bien sería Tabla['NombreCampo'].Asxxxx o Tabla.FieldValues['NombreCampo'].Asxxxx // Saludos |
#7
|
|||
|
|||
Que tiene de malo o ineficiente hacerlo asi ....pregunto ?
Despues de ver este interesante hilo, me doy cuenta que yo estoy haciendo las cosas distinto a la mayoria (sera por mi pasado foxPro .. no se)a lo cual pregunto ...
yo accedo a los campos asi . edit.text:=TablaCampo.value; digo es rapido de escribir menos codigo que ... edit.text:=TablaCampo.AsTipo Jajaja es una letra menos .... no en serio que tiene de malo mi forma para cambiarla ya .... Gracias .... |
#8
|
|||
|
|||
Cita:
Genéricamente te puedo comentar que un Tedit solo almacenará datos de tipo texto, por tal motivo si tu campo es un entero y asignas con .Value te saltará una hermosa carita de error , en cambio si asignas al Tedit el valor como .AsString, aunque tu campo sea entero esta forma lo 'pasa' a texto. Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney |
#9
|
|||
|
|||
Que tiene de malo o ineficiente hacerlo asi ....pregunto ?
Claro tienes razon egostar, por supuesto que en caso de un numero pues
edit1.text:=InttoStr(TablaCampo.value); por supuesto que si no lo hago asi pues bummm ahora entiendo que con .AsXXX no lo haria pues a probar ... Gracias ... Última edición por Kenobi fecha: 07-10-2008 a las 17:32:58. |
#10
|
||||
|
||||
Cita:
No estoy de acuerdo de que sean buenas las formas: Campo[1] Campo[nombre] Campo.value ya que con esto el peligro es que trabajamos con campos variant los cuales no se comprueban en el copilado si no en ejecucion con lo cual nos podemos encontrar con mas de un problema. Código Delphi [-]var1: integer; var2: string; CampoEntero1[nombre] := var1; //CampoEntero1 contiene nil CampoEntero1.asinteger := var1; //CampoEntero1 contiene 0 CampoEntero1[nombre] := var2; //Con esto revienta la aplicación CampoEntero1.asinteger := var2; //Con esto no copila la aplicacion Ademas no es lo mismo escribir Código Delphi [-]'La fecha es '+DateTimeToStr( CampoFecha[nombre] ); Lo cual ademas si no tiene un valor el campo revienta la aplicacion. que Código Delphi [-]'La fecha es '+CampoFecha.AsString; Espero sea util, Saludos. |
#11
|
||||
|
||||
A veces, es preferible que la aplicación reviente.
Imagina que el usuario no ha escrito la fecha para un registro. Si usas fecha.AsString, nos devolverá un valor 31/12/1900 y el programa sigue corriendo con "total alegría", si hacemos cálculos con esa fecha, nos dará un error en nuestro código, pero muy alejado del origen (quizás al imprimir el registro, al abrir una consulta que hasta ahora funcionaba correctamente, etc), tendrás que buscar durante mucho tiempo esa "avería". Si el programa revienta en la linea "DateTimeToStr( CampoFecha[nombre]" inmediatamente le dices al usuario: "ah!!, es que tienes que poner una fecha válida." y no te da dolores de cabeza. Por cierto, una precisión: Si una variable Variant no tiene asignado un valor, su valor es precisamente "unassigned" que no tiene nada que ver con "nil". Como siempre, todo depende de qué resultado quieras tener. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar Variables de Forma a Forma con delphi.net ASP | ASAPLTDA | .NET | 5 | 05-07-2007 21:51:31 |
Como Pasar Variables de Forma a Forma con delphi.net ASP | ASAPLTDA | Internet | 2 | 02-07-2007 17:26:41 |
Tuto en Flash de Windows | alex212 | PHP | 0 | 07-06-2007 18:07:10 |
De que forma trabajar con firebird y dbExpress | fedelphi | Conexión con bases de datos | 2 | 25-11-2006 00:17:01 |
tuto de Indy? | unko! | Internet | 4 | 09-02-2005 05:08:57 |
|