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 24-09-2003
norberto_larios norberto_larios is offline
Miembro
 
Registrado: ago 2003
Ubicación: Mexico, D.F.
Posts: 15
Poder: 0
norberto_larios Va por buen camino
Question Validar Primary Key Compuesta ??

Tengo

Una tabla de almacenes
CREATE TABLE ALMACENES (
ID_ALMACEN INTEGER NOT NULL,
ETC….
);

Una tabla de productos
CREATE TABLE MED_MATCUR (
ID_PRODUCTO INTEGER NOT NULL,
ETC….
);

Una tabla de Productos x almacen
CREATE TABLE CATXALM (
ID_ALMACEN INTEGER NOT NULL,
ID_PRODUCTO INTEGER NOT NULL,
STOCK_MIN INTEGER NOT NULL,
STOCK_MAX INTEGER NOT NULL,
EXISTENCIA INTEGER,
REV_CADUCIDAD DATE
);

Donde la llave Prinipal esta formada por ID_ALMACEN,ID_PRODUCTO

ALTER TABLE CATXALM ADD CONSTRAINT PK_CATXALM PRIMARY KEY (ID_ALMACEN, ID_PRODUCTO);

Entonces yo antes de crear un Nuevo registro en la tabla de Productos por almacen quiero verificar si éste ya existe. Por ejemplo quiero dar de alta el producto 5 del almacen 3.

hago lo siguiente con delphi
Var
v_llave: string;
begin
// concateno los id correspondientes convertidos en strings
v_llave:=inttostr(DM01.SD_AlmacenesID_ALMACEN.Value)+inttostr(DM01.SD_Med_MatCurID_PRODUCTO.Value);
ShowMessage(v_llave);
// utilizo el FindKey para verificar, pero esto no me esta funcionando,seguro estoy mal
// ¿???? Como se debe hacer
if not DM01.SD_CatXAlm.FindKey([v_llave]) then
begin
DM01.SD_CatxAlm.Insert;
DM01.SD_CatXAlmID_PRODUCTO.Value := DM01.SD_Med_MatCurID_PRODUCTO.Value;
DM01.SD_CatXAlmSTOCK_MIN.Value := 0;
DM01.SD_CatXAlmSTOCK_MAX.Value := 0;
end;
end;

pudieran ayudarme???
Responder Con Cita
  #2  
Antiguo 25-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Código:
Query.SQL.Add('select * from CATXALM');
Query.SQL.Add('where ID_ALMACEN = :alma and');
Query.SQL.Add('     ID_PRODUCTO = :prod');
Query.ParamByName('alma').AsInteger := 3;
Query.ParamByName('prod').AsInteger := 5;
Query.Open;

if Query.Fields[0].IsNull then
   ShowMessage('Articulo inexistente')
else
   ShowMessage('Articulo existente');
Espero te sirva
Responder Con Cita
  #3  
Antiguo 25-09-2003
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Buena costumbre también sería que pusieses esta operación entre transacciones.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #4  
Antiguo 25-09-2003
norberto_larios norberto_larios is offline
Miembro
 
Registrado: ago 2003
Ubicación: Mexico, D.F.
Posts: 15
Poder: 0
norberto_larios Va por buen camino
Talking

Me parece un buena opcion, aunque me gustaria mas porder utilizar la funcion .FindKey con el parametro correspondiente, sera q no se puede con una llave compuesta???
gracias
Responder Con Cita
  #5  
Antiguo 25-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Cita:
Posteado originalmente por norberto_larios
Me parece un buena opcion, aunque me gustaria mas porder utilizar la funcion .FindKey con el parametro correspondiente, sera q no se puede con una llave compuesta???
gracias
Poder, lo que se dice poder, sí que se puede, lo que pasa es que a mi no me gusta y por eso te puse esa solución. Pero si quieres hacerlo con FindKey

Código:
Tabla.FindKey([buscar1, buscar2, bucar3,......,buscarN]);
No obstante, recuerda que la tabla ha de estar indexada por los campos por los que quieras buscar. Si no los tienes ordenados por esos campos (o no existe índice por ellos), puedes utilizar el Locate

Código:
Tabla.Locate('campo1, Campo2,..., campoN', VarArrayOg([campo1, campo2,...,campoN]), []);
Espero te sirva
Responder Con Cita
  #6  
Antiguo 25-09-2003
norberto_larios norberto_larios is offline
Miembro
 
Registrado: ago 2003
Ubicación: Mexico, D.F.
Posts: 15
Poder: 0
norberto_larios Va por buen camino
Talking

Me gusta mas esa forma
muchas gracias, la voy a probar en este momento
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


La franja horaria es GMT +2. Ahora son las 02:02:58.


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