Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-09-2013
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Como cargar las tablas

Hola, normalize una base de datos, y me quedo una tabla de clientes,

La direccion es un atributo compuesto, para una mejor normalizacion, (que dos clientes viven en la misma ciudad o en la misma calle con distinto numero,) hice:

Código SQL [-]
DIRECCION(#Iddireccion, calle, numero, edificio{etc})

Y pones el campo Iddireccion en la tabla CLIENTES, pero el problema dentro de direccion es lo que te decia de las calles, por ejemplo, en vez de hacer lo anterior pondrias:

Código SQL [-]
CLIENTEDIRECCION(#Iddireccion,# Idcliente) Tabla de relacion
DIRECCION(#iddireccion,#Idcalle, numero, etc)
Enotnces:
CALLE(#Idcalle, Descripcion)

Y lo mismo para la ciudad, etc..

1- Pero en el formulario en Builder, como inserto los datos, recordando que solo tendria los edit, y el boton de insertar, me dirijo a la tabla directamente,
2- ¿Que sucederia con una valor de una campo que ya existe, ej: Dos clientes viven en la misma calle? Si lo compruebo como inserto si ya existen. Como muestro los ya existentes?


TELEFONO(#Idtel, Idtipo,Numero);
TIPOTEL(Idtipo,Descripcion) {Aqui es constante, o celular o fijo}

Y si deseas consultar de que cliente es un telefono, obtienes el Idtelefono y lo buscas en CLIENTE
Responder Con Cita
  #2  
Antiguo 04-10-2013
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Estoy tratando de entender el problema pero me lo pones muy difícil
1 - Qué SQL estas usando (MySQl , MSSQL, etc...)
2 - Qué componentes estas usando para conectarte ?
3 - Qué quieres hacer concretamente en una oración de ser posible
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #3  
Antiguo 04-10-2013
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
De paso no estaría mal que mostraras parte del código C++ que usas o al menos que este encaminado a lo que quieres lograr, eso generalmente da una mejor idea. Saludos
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #4  
Antiguo 04-10-2013
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Cita:
Empezado por giulichajari Ver Mensaje
1- Pero en el formulario en Builder, como inserto los datos, recordando que solo tendria los edit, y el boton de insertar, me dirijo a la tabla directamente,
Si quieres insertar datos siempre puedes hacerlo usando los componentes DATACONTROL que están especialmente diseñados para la conexión a las bases de datos. También puedes hacerlo manualmente en cuyo caso usarías un Query previamente conectado a la base de datos.


En el evento del Boton OnCLick
Código:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("INSERT INTO tabla1 VALUES (campo1, campo2)"
            "('"+ Edit1->Text +"' ,'"+ Edit2->Text +"' );");
ADOQuery1->ExecSQL();

Cita:
Empezado por giulichajari Ver Mensaje
2- ¿Que sucederia con una valor de una campo que ya existe, ej: Dos clientes viven en la misma calle? Si lo compruebo como inserto si ya existen. Como muestro los ya existentes?
Siempre puedes hacer una verificación antes de insertar pero eso te lo recomiendo para datos únicos como el número de identidad. De todas formas puedes hacer la verificación incluyendo uno o más campos para saber si ya se han insertado

Código:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("SELECT * FROM tabla1 WHERE campo1 = '"+ Edit1->Text +"'  AND campo2 = '"+ Edit2->Text +"';");
ADOQuery1->Open();


if (ADOQuery1->RecordCount == 0)
{

  ADOQuery1->Close(); 
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("INSERT INTO tabla1 VALUES (campo1, campo2)"
            "('"+ Edit1->Text +"' ,'"+ Edit2->Text +"' );");
  ADOQuery1->ExecSQL();
}
else
{
  // lo que quieras mostrarle para q sepa que ya esos datos han sido insertados en un mismo registro
  // recuerda que los datos consultados se mantendrán en el ADOQuery1
}
NOTA esto es MySQL ok, También hay otras formas de hacerlo incluso formas mucho mas eficientes pero creo que esta es la que mas rápido vas a entender ya que tu pregunta es mas de lógica que de código

PD esto lo he escrito directo aquí ok, no lo he probado con el compilador hehehehee así que igual te encuentras con algunos problemillas de sintaxis ... pero al menos te da la idea verdad?

Saludos
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________

Última edición por lmpadron fecha: 04-10-2013 a las 20:42:31.
Responder Con Cita
  #5  
Antiguo 05-10-2013
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Creo que el error esta desde el diseño de la tabla, no veo el caso de hacer el campo direccion un atributo compuesto puesto que un cliente solo tiene un mismo domicilio fiscal, aunque puedes tener otros domicilios de sucursales, tiendas, etc. Las tablas auxiliares que tienes (direcciones y ciudades) las tienes que gestionar directamente al editar el registro del cliente.
El ejemplo que mencionas 2 clientes en la misma calle, no tiene problema ya que lo que identifica al registro es la combinación (cliente,calle) esa tabla deberá tener como llave compuesta esos dos campos para que no permita meter mas que un cliente y calle diferente, pero aceptar 2 clientes con la misma calle. Esto no tiene problema en código pues al tratar de insertar un cliente con una calle que ya tiene asignada te saltará la excepción proveniente del motor de BD. Es decir programa tu código como si todo fuera a salir bien y solo coloca un try..except para capturar esa excepción (un cliente con una calle que ya tiene asignada), así no tienes que hacer chequeos adicionales por código.

Las tablas de relación normalmente deben tener una llave compuesta que no permita incluir registros duplicados pero para un mismo registro principal, es decir. Supongamos el ejemplo de teléfonos:
un cliente puede tener n teléfonos, la llave candidata seria cliente+teléfono para evitar duplicados
sin embargo puede darse el caso de que un mismo teléfono sea compartido por mas de un cliente (diferentes razones sociales, nombres comerciales, etc.), la misma llave nos funciona porque nos permitira poner un mismo teléfono siempre y cuando el cliente sea distinto.

Para buscar a quien pertenece un telefono basta:
Código SQL [-]
 SELECT CLIENTES.NOMBRE, TELEFONOS.NUMERO FROM CLIENTES
            JOIN TELEFONOS ON (TELEFONOS.IDCLIENTE=CLIENTES.IDCLIENTE)
           WHERE TELEFONOS.NUMERO=9999999 # este sería un parámetro

Espero te sirva
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 05-10-2013
giulichajari giulichajari is offline
Miembro
 
Registrado: nov 2012
Posts: 306
Poder: 12
giulichajari Va por buen camino
Gracias

Bueno gracias por tomarse el trabajo de responder, ahora entiendo que hay que normalizar bien para tener un buen sistema.

Saludos.
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 nombres de tablas en un ComboBox Paulao Varios 4 14-08-2011 01:49:00
Como hago para cargar el Socket Server como un servicio en cualquier windows ferdanjua Servers 1 07-09-2010 12:05:46
Como Crear un trazo al los Tlabel y como cargar imagenes PNG ColdFusion Gráficos 3 24-01-2009 18:51:10
Cargar campos de dos tablas en un procedimiento SQL Server Jose Roman SQL 2 04-07-2008 18:48:19
como cargar el titulo mendieta PHP 0 04-01-2005 13:36:11


La franja horaria es GMT +2. Ahora son las 19:22: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