Re: Valor de la lleve primaria se almacene en las tablas relacionales

Lists: pgsql-es-ayuda
From: Juan Martínez <jeugenio(at)umcervantes(dot)cl>
To: "GABRIEL COLINA" <colina_movil(at)yahoo(dot)com>
Cc: "Jaime Casanova" <systemguards(at)gmail(dot)com>, "Grover Navia" <grover8navia(at)yahoo(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Valor de la lleve primaria se almacene en las tablas relacionales
Date: 2007-01-21 23:05:17
Message-ID: 48565.190.44.85.160.1169420717.squirrel@correo.umcervantes.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

[HTML, top-posting y mensaje desordenado arg... de mala educacion]

El Lun, 22 de Enero de 2007, 1:20 am, GABRIEL COLINA escribió:
> [Texto irrelevante de acotacion de un SW que no es del topìco de esta
> lista]
> Es que todo se hace con funciones, pero en el caso de access no tenes que
> hacer nada por que el
> lo resuelve sin problemas y de forma transparente para el usuario, no es
> el caso de postgres y ojo que despues de conocer postgres no hago ningun
> desarrollo mas con soporte access.

Yo me pregunto que tiene que ver MS Access aqui?

> [Codigo en lenguaje que pudre cerebros]
>
> Y vos crees que los problemas se resuelven de una sola forma Jaime,

Tu sabes a quien le preguntas eso tan confrontacionalmente?

> menos en Visual Basic,

Crees que VB es una panacea?
Es mas, crees que es un verdadero lenguaje de programacion?

> que es el caso que tratamos

Aqui se habla de postgres y su derivados. No de otra cosa.

> Digo esto por que cabe la posibilidad de que no entendi bien la pregunta,
> dijo Visual Basic,

Que use VB como lenguaje para hacer programillas que acceden una BD en
Postgres (que es el tema de conversacion aqui), no puede hacer centrar las
respuestas o las posibles soluciones a ese lenguaje. Si se habla de
postgres, preguntas sobre postgres, que esperas que sea la respuesta?

> algo que no me paso por alto y si es asi caben ciertas
> posibilidades de que la pregunta se refiera a tener un formulario en
> visual basic, posicionarse en un recordset de la tabla a y luego pasar el
> Id de ese registro en la insercion o modificacion de un registro en la
> tabla b.

Eso es irrelevante. Eso queda para como hacer finalmente la implementacion
de una idea que se pueda recoger por aqui.

> Si es asi decime como resulevo que , postgres se entere cual es el
> registro donde estoy posicionado.
> Yo todavia no lo se, si no es utilizando el codigo de visual.

Es por que no has trabajado suficientemente con la BD, a nivel de consola.
Si dedicaras un poco de tiempo a administrar BD's via consolas, te daras
cuenta que hay un monton de cosas que haces mal, por un tema de que estas
acostumbrado a hacer las cosas de determinada manera y como postgres
plantea una forma distinta, tratas de hacer o acomodar para que postgres
funcione como tu quieres (y no como necesitas) que funcione. Eso
finalmente redunda en una merma en el rendimiento de postgres.

> [redundancia mental]
> Por eso Jaime creo que no hay una sola forma de resolver problemas,
> aplaudo la solucion de Juan Martinez por que me orienta para otras cosas
> que quiero resolver.

No se trata de aplaudir o pifear. Se trata de que aqui se exponen ideas y
quien quiera las tome y las trabaje. No esperes que aqui se entreguen
implementaciones.

Yo lo que propuse, salio primero de pura casualidad. Si no lo hubiera
escrito yo, Jaime, Mario, Alvaro u otros miembros de esta lista lo
hubieran hecho. Mi idea no tiene nada de brillante te dire. No es mas que
utilizar las herramientas que te entrega postgres.

> Ademas te pregunto si experimentaste si mi solucion no sirve,

Entiende que aqui se habla de POSTGRES y no de otra cosa!

> Creo que el compañero que pregunto, ahora tiene dos soluciones, una desde
> postgres y la otra desde Visual Basic. Una de gente como Alvaro y Jorge
> que aportaron soluciones desde la base de datos y esta otra que resuelve
> el problema tambien.

Y tu crees que lo hace eficientemente?

> No vi la tuya.

Y tenia que necesariamente tener que dar otra alternativa?
Hasta donde vi, Jaime hizo aportes a este hilo.

> Consejo cuando hagas criticas a una solucion, criticala con mas fundamento
> y con la cabeza mas abierta.

Yo la critico por que es:

1. Un codigo que postgres no entiende.
2. No tiene estructura.
3. Es un codigo muy sucio.

Por ultimo reflexiono: Por que este correo no se lo mandas directo a la
persona con la cual crees tener una diferencia personal? Mas del 80% de
este correo hablaba de temas ajenos a postgres en si mismo...

--
Juan Martinez Linux user # 335778
Departamento de Informática 499 7934 - 499 7992
Universidad Miguel de Cervantes Mac Iver # 370 - Stgo. Centro - RM


From: GABRIEL COLINA <colina_movil(at)yahoo(dot)com>
To: Jaime Casanova <systemguards(at)gmail(dot)com>
Cc: Grover Navia <grover8navia(at)yahoo(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Valor de la lleve primaria se almacene en las tablas relacionales
Date: 2007-01-22 01:20:04
Message-ID: 952056.74269.qm@web34705.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

----- Mensaje original ----
De: Jaime Casanova <systemguards(at)gmail(dot)com>
Para: GABRIEL COLINA <colina_movil(at)yahoo(dot)com>
CC: Grover Navia <grover8navia(at)yahoo(dot)es>; pgsql-es-ayuda(at)postgresql(dot)org
Enviado: domingo, 21 de enero, 2007 14:49:58
Asunto: Re: [pgsql-es-ayuda] Valor de la lleve primaria se almacene en las tablas relacionales

On 1/20/07, GABRIEL COLINA <colina_movil(at)yahoo(dot)com> wrote:
> Mira ni access lo hace "automaticamente", tiene una funcion para ello.
>

1---------por que sera?

Es que todo se hace con funciones, pero en el caso de access no tenes que hacer nada por que el
lo resuelve sin problemas y de forma transparente para el usuario, no es el caso de postgres y ojo que despues de conocer postgres no hago ningun desarrollo mas con soporte access.

> Si estas usando una grilla, una posibilidad es dejar oculta la columna cod,
> y de esta menera
>
> Private Sub DataGridArticulos_AfterUpdate()
> DataGridTabla2.Columns(0) = AdoCabezales.Recordset.Fields("id_cod")
> end sub
> Este caso referencia un ado puede ser una conexion del dataenviroment.
>

Juan Martinez dijo como se hace:

Y vos crees que los problemas se resuelven de una sola forma Jaime, menos en Visual Basic, que es el caso que tratamos y aca van unos casos en que nos posicionamos en un registro de la tabla a y tenemos que insertar en la tabla b registros relacionados al registro de tabla a que tenemos relacionado.

Digo esto por que cabe la posibilidad de que no entendi bien la pregunta, dijo Visual Basic, algo que no me paso por alto y si es asi caben ciertas posibilidades de que la pregunta se refiera a tener un formulario en visual basic, posicionarse en un recordset de la tabla a y luego pasar el Id de ese registro en la insercion o modificacion de un registro en la tabla b.

Si es asi decime como resulevo que , postgres se entere cual es el registro donde estoy posicionado.
Yo todavia no lo se, si no es utilizando el codigo de visual.

Asi que como la pregunta original es desde Visual Basic 6, entonces yo brindo otra posibilidad, por que los que trabajan con formularios Visual Basic y utilizan Dbgrid, Dblist, DbCombo, o por lo menos un formulario con al menos una referencia a un recordset, para mostrar datos y hacer mantenimiento de tablas usan recordset, rdo, ado o dataenviroment, en este caso deberia tener al menos dos, puesto que la relacion de a y b, asi lo necesitan para que el usuario del formulario trabaje con estos datos.

Por eso Jaime creo que no hay una sola forma de resolver problemas, aplaudo la solucion de Juan Martinez por que me orienta para otras cosas que quiero resolver.

Ademas te pregunto si experimentaste si mi solucion no sirve, si sirve quizas aprendas que no hay una sola forma de resolver las cosas y repito esto por que ya en otro mail te respondi un punto parecido.

Creo que el compañero que pregunto, ahora tiene dos soluciones, una desde postgres y la otra desde Visual Basic. Una de gente como Alvaro y Jorge que aportaron soluciones desde la base de datos y esta otra que resuelve el problema tambien. No vi la tuya.

Consejo cuando hagas criticas a una solucion, criticala con mas fundamento y con la cabeza mas abierta.

CREATE TABLE a (
id serial primary key,
desc texte
);
CREATE TABLE b (
id_a int4 REFERENCES a DEFAULT currval('a_id_seq'),
cant int4
);

para completar el ejemplo:

insert into a(desc) values('descripcion');
insert into b(cant) values (10);

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook

---------------------------(fin del mensaje)---------------------------
TIP 8: explain analyze es tu amigo

__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "GABRIEL COLINA" <colina_movil(at)yahoo(dot)com>
Cc: "Grover Navia" <grover8navia(at)yahoo(dot)es>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Valor de la lleve primaria se almacene en las tablas relacionales
Date: 2007-01-22 03:06:16
Message-ID: c2d9e70e0701211906i41e173bqb8f33b3389e67e4d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On 1/21/07, GABRIEL COLINA <colina_movil(at)yahoo(dot)com> wrote:
> Y vos crees que los problemas se resuelven de una sola forma Jaime,

no, no lo creo...

> menos en Visual Basic, que es el caso que tratamos y aca van unos casos
> en que nos posicionamos en un registro de la tabla a y tenemos que
> insertar en la tabla
> b registros relacionados al registro de tabla a que tenemos relacionado.
>
> Digo esto por que cabe la posibilidad de que no entendi bien la pregunta,

la pregunta original fue: '¿Como puedo hacer para que el valor de
"cod" de "miTabla_1" se almacene automaticamente en "cod" de
"miTabla_2" ?'

y, IMHO*, la mejor manera de hacerlo es dejar que postgres lo haga...

Si la persona que pregunto queria saber lo que tu dices, la pregunta
debio ser mas especifica...

* IMHO: En mi humilde opinion ;)

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook


From: Henry <hensa22(at)yahoo(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Valor de la lleve primaria se almacene en las tablas relacionales
Date: 2007-01-22 13:51:29
Message-ID: 665546.666.qm@web30811.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

CREATE TABLE a (
id serial primary key,
desc texte
);
CREATE TABLE b (
id_a int4 REFERENCES a DEFAULT currval('a_id_seq'),
cant int4
);

insert into a(desc) values('descripcion');insert into a(desc) values('descripcion2');
insert into b(cant) values (10);

tengo duda sobre esta solucion, como la tabla b hace referencia al valor actual de la secuencia a_id_seq, entonces si estamos trabajando con un solo usuario esta solucion seria excelente, pero que sucederia si estamos trabajando con varios usuarios que tienen que hacer inserciones en esas tablas, que pasa si justo al mismo momento o casi al instante ( sin todavia haber insertado detalles) dos o mas usuarios insertan en la misma tabla a, entonces la secuencia que estaba en 1 ahora va a estar en 2 o 3, y bueno
al final las 2 primeras cabezeras se van a quedar sin detalle, y la ultima tomara los detalles de las 2 primeras, por tener el valor por defecto el valor actual de la secuencia.

Digo esto , porke tuve un problema parecido, asi que para insertar en las tablas tuve que hacerlo todo en una sola transaccion y bloqueandolas para ke otro no pueda insertar hasta que termine.

y si lo hacia por el cliente, tendria que saber el valor del primakey, lo cual trae el mismo problema , ya que tendria que consultar a la BD y podria devolver una valor erroneo (otro primary key).


---------------------------------

LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Henry <hensa22(at)yahoo(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Valor de la lleve primaria se almacene en las tablas relacionales
Date: 2007-01-22 14:07:58
Message-ID: 20070122140758.GG26006@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Henry escribió:
> CREATE TABLE a (
> id serial primary key,
> desc texte
> );
> CREATE TABLE b (
> id_a int4 REFERENCES a DEFAULT currval('a_id_seq'),
> cant int4
> );
>
> insert into a(desc) values('descripcion');insert into a(desc) values('descripcion2');
> insert into b(cant) values (10);
>
> tengo duda sobre esta solucion, como la tabla b hace referencia al valor actual de la secuencia a_id_seq, entonces si estamos trabajando con un solo usuario esta solucion seria excelente, pero que sucederia si estamos trabajando con varios usuarios que tienen que hacer inserciones en esas tablas, que pasa si justo al mismo momento o casi al instante ( sin todavia haber insertado detalles) dos o mas usuarios insertan en la misma tabla a, entonces la secuencia que estaba en 1 ahora va a estar en 2 o 3, y bueno
> al final las 2 primeras cabezeras se van a quedar sin detalle, y la ultima tomara los detalles de las 2 primeras, por tener el valor por defecto el valor actual de la secuencia.

No es así. Las secuencias funcionan correctamente en este caso,
entregando currval() en cada sesión el último valor que la secuencia
generó _en tu sesión_.

De hecho las secuencias se inventaron precisamente para solucionar este
problema, y lo hacen.

> Digo esto , porke tuve un problema parecido, asi que para insertar en
> las tablas tuve que hacerlo todo en una sola transaccion y
> bloqueandolas para ke otro no pueda insertar hasta que termine.

"Parecido" como? Me imagino que no estabas usando secuencias.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


From: Henry <hensa22(at)yahoo(dot)es>
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Valor de la lleve primaria se almacene en las tablas relacionales
Date: 2007-01-22 14:12:45
Message-ID: 20070122141245.45361.qmail@web30809.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

vale la aclaracion, si ps no estaba usando secuencias.

Alvaro Herrera <alvherre(at)commandprompt(dot)com> escribió: Henry escribió:
> CREATE TABLE a (
> id serial primary key,
> desc texte
> );
> CREATE TABLE b (
> id_a int4 REFERENCES a DEFAULT currval('a_id_seq'),
> cant int4
> );
>
> insert into a(desc) values('descripcion');insert into a(desc) values('descripcion2');
> insert into b(cant) values (10);
>
> tengo duda sobre esta solucion, como la tabla b hace referencia al valor actual de la secuencia a_id_seq, entonces si estamos trabajando con un solo usuario esta solucion seria excelente, pero que sucederia si estamos trabajando con varios usuarios que tienen que hacer inserciones en esas tablas, que pasa si justo al mismo momento o casi al instante ( sin todavia haber insertado detalles) dos o mas usuarios insertan en la misma tabla a, entonces la secuencia que estaba en 1 ahora va a estar en 2 o 3, y bueno
> al final las 2 primeras cabezeras se van a quedar sin detalle, y la ultima tomara los detalles de las 2 primeras, por tener el valor por defecto el valor actual de la secuencia.

No es así. Las secuencias funcionan correctamente en este caso,
entregando currval() en cada sesión el último valor que la secuencia
generó _en tu sesión_.

De hecho las secuencias se inventaron precisamente para solucionar este
problema, y lo hacen.

> Digo esto , porke tuve un problema parecido, asi que para insertar en
> las tablas tuve que hacerlo todo en una sola transaccion y
> bloqueandolas para ke otro no pueda insertar hasta que termine.

"Parecido" como? Me imagino que no estabas usando secuencias.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


---------------------------------

LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com