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 04-09-2008
Avatar de HombreGordo
HombreGordo HombreGordo is offline
Miembro
 
Registrado: jul 2008
Posts: 41
Poder: 0
HombreGordo Va por buen camino
Smile

Ah, sencillo es así:

Está la tabla de Clientes que contiene los datos de los clientes, pero ésta a su vez contiene para cada cliente, un número de referencia, como un identificador, quizás pueda ser su cédula de identidad, o RIF empresarial. A partir de ese número, se cargan sus movimientos según la tabla de Movimientos que contiene sus cuentas pendientes, como alquileres en progreso. A su vez, esas cuentas, tienen unas referencias que son los artículos que alquiló, son referencias que vienen de una tabla llamada Inventario.

Conozco los campos clave, que son aquellos en donde los registros no pueden repetir sus valores, conozco los tipos de campos, tengo nociones de SQL, unos conceptos básicos de BDE. Sin embargo, "empotrar" estas referencias en la tabla Movimientos es lo que necesito aprender. Y otra cosa primordial, es que así como inserto datos en una tabla usando sentencias SQL, me gustaría aprender a extraer los datos de un determinado campo, pero no para llevarlos a un DBGrid como he venido haciendo, si no que pueda agarrar la cadena directamente del registro que se muestra en un determinado campo.
__________________
Aprendiz de Embarcadero RAD Studio...
Responder Con Cita
  #2  
Antiguo 04-09-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por HombreGordo Ver Mensaje
Ah, sencillo es así:

Está la tabla de Clientes que contiene los datos de los clientes, pero ésta a su vez contiene para cada cliente, un número de referencia, como un identificador, quizás pueda ser su cédula de identidad, o RIF empresarial. A partir de ese número, se cargan sus movimientos según la tabla de Movimientos que contiene sus cuentas pendientes, como alquileres en progreso. A su vez, esas cuentas, tienen unas referencias que son los artículos que alquiló, son referencias que vienen de una tabla llamada Inventario.

Conozco los campos clave, que son aquellos en donde los registros no pueden repetir sus valores, conozco los tipos de campos, tengo nociones de SQL,
Hasta aquí vamos bien.

Cita:
Empezado por HombreGordo Ver Mensaje
unos conceptos básicos de BDE.
Y aquí la arruinas ¿DBE? Se desaconseja seguir usando, ya ha quedado un tanto obsoleto y practicamente ha quedado por una cuestión de compatibilidad hacia atrás.

Cita:
Empezado por HombreGordo Ver Mensaje
Sin embargo, "empotrar" estas referencias en la tabla Movimientos es lo que necesito aprender.
Disculpa, pero no comprendo lo que dijiste. ¿Podrías aclararlo por favor? ¿A que te refieres con "empotrar".

Cita:
Empezado por HombreGordo Ver Mensaje
Y otra cosa primordial, es que así como inserto datos en una tabla usando sentencias SQL, me gustaría aprender a extraer los datos de un determinado campo, pero no para llevarlos a un DBGrid como he venido haciendo, si no que pueda agarrar la cadena directamente del registro que se muestra en un determinado campo.
Por lo que entiendo, lo que haces es mediante instrucciones SQL del tipo INSERT insertas elementos a tus tablas.

¿Tu pregunta al respecto para extraer datos viene a por saber como consultar algunos campos de forma "individual"? La verdad es que no logro comprenderte. Dime si entiendo bien: ¿Dices que para consultar información lanzas una instrucción SQL del tipo SELECT y muestras los datos en un DBGrid? ¿Quieres leer estos datos sin tener que usar DBGrid?

Veamos como te puedo explicar el acceso a campos.
Como dices que usas DBE basaré la explicación en ellos.

Mediante un TTable podemos acceder a los campos de las siguientes formas:

1. Forma Directa

Consiste en armar los campos persistentes, es decir creados en tiempo de diseño. Para ello solo hay que tener previamente establecido la tabla y la base de datos a la que vamos a acceder. Luego, con solo presionar el botón secundario sobre el componente y pulsar "Fields Editor" nos aparece un cuadro de díalogo. Luego volvemos a presionar el botón secundario y ahora en "Add Fields".

De esta forma conseguimos añadir ya los campos de forma persistente.

Si te fijas en Objet TreeView notarás que dentro de la rama Fields correspondiente a la tabla aparecen listados dichos campos. Notarás que a cada uno Delphi le ha asignado un nombre. Este nombre obedece a una simple regla:

Nombre del TTable + Nombre del Campo en la DB

Por ejemplo, si el TTable se llama tbCliente y el campo es ID, el nombre que se obtiene es tbClienteID.

Ahora para hacer uso de este campo podemos hacer algo como esto:

Código Delphi [-]
MiTablaMiCampo.Value := ...... // para establecer el valor
variable := MiTablaMiCampo.Value; // para leer el valor

Tanto el valor leído como el a ingresar o modificar corresponderá al registro en el cual esté parado.

Esta forma al ser la más directa es la más segura para acceder al campo. Como desventaja se podría decir que hace más grande al archivo dfm y ocupandonos más memoria.

2. Forma intermedia


La forma intermedia (si se lo puede llamar asi) es emplear la propiedad Fields del TTable tanto para leer como para asignar:
Código Delphi [-]
MiTabla.Fields[IndiceCampo].Value := .... 
variable := MiTabla.Fields[IndiceCampo].Value;

Siendo IndiceCampo un valor, constante, o una variable entera mayor o igual a cero y menor a la cantidad de campos.
IndiceCampo indica en forma numérica al campo al que deseamos acceder. Los campos se comienzan a contar en el orden en que fueron descriptos en en la tabla. Supongamos que el campo ID fue definido en la primera posición, por tanto el valor que le corresponde es el 0.

Esta segunda forma es menos directa, el compilador debe hacer un poco más de trabajo para localizar el campo. Se accede mediante el índice y esto implica posicionarse en la lista del los campos. Como desventaja de este método se puede decir que ante algún cambio en la tabla corremos el riesgo de acceder al campo erroneo si no tenemos cuidado.

Fields[] nos regresa un objeto TField. En el ejemplo asumí que no nos interesa guardar en una variable el objeto y nos ponemos a hacer uso de dicho objeto (propiedad Value).

3. Forma Indirecta

Esta última forma de acceder al campo es la más "lenta" de todas. Consiste en buscar al campo dentro de la lista por el nombre, en vez del índice, mediante el método FieldByName:

Código Delphi [-]
MiCampo := MiTabla.FieldByName('NombreCampo');
MiCampo.Value := .....
variable := MiCampo.Value;

Código Delphi [-]
MiTabla.FieldByName('NombreCampo').Value := ....
variable := MiTabla.FieldByName('Nombrecampo');

FieldByName devuelve la referencia al objeto TField que representa al campo buscado. Si lo encuentra nos los regresa, en otro caso, conseguiremos una excepción. Notarás que mostré dos ejemplos parecidos: en el primero guardo en una variable MiCampo del tipo TField el resultado de FieldByName y luego trabajo con ella. En el segundo, simplemente me evito dicha variable y hago todo al vuelo.

Las necesidades te dirán que hacer... en algunos casos será necesario guardar dicha referencia, en otros no.

Como ventaja de esta forma se puede decir que es las más flexible puesto que nos evita posibles líos ante los cambios en la estructura de la tabla: si se mueven los campos de lugar no interesa. Si el campo existe, FieldByName siempre lo encontrará.

Del mismo modo que se usa el TTable, podemos acceder a los campos mediante un TQuery. La diferencia está en que ahora es necesario contar con una instrucción SQL válida indicando la/s tabla/s a las que deseamos consultar.
También disponemos de campos persistentes, Fields y FieldByName.

Hay otra alternativa para acceder a un campo que no he mencionado: FindField(). Este método (función) nos regresa el objeto que representa al campo en caso de encontrarlo, de otra manera nos devuelve vacio (nil). Ha diferencia de FieldByName este método no arroja excepción.

No se si con acceder a los campos te refieres a lo que he dicho. Te agradecería que me hicieras saber si te ha sido de utilidad.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 05-09-2008
Avatar de HombreGordo
HombreGordo HombreGordo is offline
Miembro
 
Registrado: jul 2008
Posts: 41
Poder: 0
HombreGordo Va por buen camino
Smile

Sí, ha sido justo a lo que me refería Gracias Delphius. Sin embargo, el problema que se presenta, es a la hora de cargar dichas "Cuentas" por usuario, debido a que la tabla Movimientos es la que conserva las referencias a las cuentas pendientes, en ese caso, yo no tendría problema en que cada cuenta de alquiler, fuesen tablas también creadas con sentencias SQL, con otra estructura, que permita contabilizar las mismas. Espero que de esta manera no se vuelva muy pesado el programa . A menos que alguien me pueda sugerir una forma diferente de cómo hacer esto, jejeje, creo que soy un poco rústico con las bases de datos al no saber como optimizar el trabajo de las mismas, por lo menos al momento de aligerar la carga.

EDITADO: Utilicé la forma intermedia para obtener los datos.
__________________
Aprendiz de Embarcadero RAD Studio...

Última edición por HombreGordo fecha: 07-09-2008 a las 05:38:33.
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
Validar Cuentas de usuario ajromero Conexión con bases de datos 5 20-10-2007 00:53:05
Cuentas de Usuario vs Cuentas de Usuario Deiv Windows 8 18-01-2006 03:56:37
49 Cuentas de Gmail santiago22 Noticias 0 17-02-2005 02:25:08
cuentas x cobrar por edades ernestocs666 SQL 1 12-10-2004 21:26:19
Problemas con las cuentas en sql plus 8 y forms 6 !! gunshit Oracle 3 26-08-2004 20:24:11


La franja horaria es GMT +2. Ahora son las 07:55:39.


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