Clarion y SQL (IV)

SQL, mySQL, postgreSQL y otros motores
Responder
Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Clarion y SQL (IV)

Mensaje por Mauricio » Lun Ago 15, 2011 9:37 pm

Manos a la obra. Como dije antes la intención no es hacer un sistema completo sino entender un poco la forma de trabajar. Lo que hice fue crear una base de datos y dentro de la misma 2 tablas, CLIENTES y FACTURAS (sí, ya sé, no soy muy original). Podemos usar el SQL Server Studio Management pero también existen otras herramientas útiles e interesantes, como SQL Lite Manager (lo pueden encontrar aquí: http://www.sqlmanager.net/).
Las DDL (Data Definition Language o Lenguaje de Definición de Datos) son:

CREATE TABLE [dbo].[CLIENTES] (
[CLI_ID] int IDENTITY(1, 1) NOT NULL,
[CLI_NUMERO] int NOT NULL,
[CLI_NOMBRE] varchar(100) COLLATE Modern_Spanish_CI_AS NOT NULL,
[CLI_DIRECCION] varchar(100) COLLATE Modern_Spanish_CI_AS NULL,
[CLI_CUIT] char(11) COLLATE Modern_Spanish_CI_AS NULL,
CONSTRAINT [CLI_X1] UNIQUE ([CLI_NOMBRE]),
CONSTRAINT [PK_CLIENTES] PRIMARY KEY CLUSTERED ([CLI_ID])
)
ON [PRIMARY]
GO

CREATE NONCLUSTERED INDEX [CLI_X2] ON [dbo].[CLIENTES]
([CLI_NOMBRE])
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO

CREATE UNIQUE NONCLUSTERED INDEX [CLI_X3] ON [dbo].[CLIENTES]
([CLI_CUIT])
WITH (
PAD_INDEX = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO

Y para FACTURAS
CREATE TABLE [dbo].[FACTURAS] (
[FAC_ID] int IDENTITY(1, 1) NOT NULL,
[FAC_NUMERO] int NOT NULL,
[FAC_FECHA] datetime NOT NULL,
[FAC_CLI_ID] int NOT NULL,
CONSTRAINT [FAC_X1] UNIQUE ([FAC_NUMERO]),
CONSTRAINT [PK_Facturas] PRIMARY KEY CLUSTERED ([FAC_ID])
)
ON [PRIMARY]
GO

CREATE UNIQUE NONCLUSTERED INDEX [FAC_X2] ON [dbo].[FACTURAS]
([FAC_FECHA], [FAC_CLI_ID])
WITH (
PAD_INDEX = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO

No son muchos campos, los mínimos indispensables para poder trabajar. Algo ha tener en cuenta en estas sentencias es el WITH, en versiones anteriores de SQL a la 2005 van a tener problemas con esto así que cuidado.

Una vez creadas las tablas, en el SQL Server Studio Management vamos a Diagramas y creamos uno nuevo. Agregamos estas dos tablas y tenemos algo así:
DiagramaFacturacion1.PNG
Lo bueno de los diagramas es que son bastante visuales. Para crear la relación entre las tablas CLIENTES (padre) y FACTURAS (hijos) solo arrastramos el campo CLI_ID y lo unimos a FAC_CLI_ID.
DiagramaFacturacion2.PNG
Una vez aceptada la pantalla anterior podemos editar las propiedades de la relación, específicamente las reglas de actualización y borrado. En este caso quiero que se actualice en cascada y que, en caso de querer borrar un cliente que tiene facturas, impedirlo. Acá el SQL suena algo confuso porque la opción para esto es Sin Acción, lo que induce a pensar que si borramos no hará nada (al menos yo pienso así) cuando en realidad no lo es.
DiagramaFacturacion3.PNG
Tenemos otras opciones, como Establecer en Null o Establecer en Predeterminado. La primera setea la clave foránea en Null (no confundir con 0) y la segunda en un valor por defecto que le hayamos definido.
Cuando finalmente grabamos la relación vemos el diagrama de la siguiente manera:
DiagramaFacturacion4.PNG
En la próxima veremos cómo importar estas tablas a un nuevo diccionario de Clarion.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado