Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problema con mi Insert

Estas en el tema de Problema con mi Insert en el foro de PostgreSQL en Foros del Web. Hola foreros espero me puedan ayudar porfa... Estoy usando postgreSQl 8.2 en Win XP este es mi codigo en el que hago el insert El ...
  #1 (permalink)  
Antiguo 13/04/2009, 10:04
Avatar de Enishy  
Fecha de Ingreso: septiembre-2007
Mensajes: 121
Antigüedad: 17 años, 2 meses
Puntos: 1
Problema con mi Insert

Hola foreros espero me puedan ayudar porfa...

Estoy usando postgreSQl 8.2 en Win XP este es mi codigo en el que hago el insert

El error que me arroja el postgres es traduciendolo: que no puedo dejar los FK vacios, que se esperaba un valor entero y ocurre en esta linea

Código PHP:
$sql_cer="INSERT INTO ficha_catalogacion
VALUES ('$maxi_fcat', '$vid','$img2', '$img3','$cod_fix','','','','','','$data_usu[codigo_usuario]', '$registro', '$regnacional', '$fechacatalogacion','$vitrina','$nivel')"

si se fijan estas comillas '' estan vacias pues en este caso solo ingresare una nueva ficha_catalogacion para ceramio y es x eso que las demas FK estan vacias ... y alli es donde ocurre el problema pues postgres me dice que deben esta llenas , eh intentado ponerle cero asi '0' pero como son tipo de dato INTEGER no resulta...este mismo codigo lo venia usando con MySQL y me insertaba sin problemas asi como esta pero al pasarlo al postgres este es mas estricto y no me permite eso de dejar vacios las FK

esta es la estructura de mi tabla Ficha_Catalogacion

Código:
cod_catalogacion (PK) - integer
cod_video (FK) - integer
cod_imagen2 (FK) - integer
cod_imagen3 (FK) - integer
cod_ceramio (FK) - integer
cod_botanico (FK) - integer
cod_adobe (FK) - integer
cod_entierro (FK) - integer
cod_estructura (FK) - integer
cod_oseo (FK) - integer
cod_usuario (FK) - integer
registro 
regnacional
fecha
vitrina
nivel
Este es mi codigo con el que hago el insert

Código PHP:
include ("Seguridad.php");
include (
"Conexion.php");
$registro=$_POST["regcat_ceramio"];

//Selecciona Codigo Ficha Campo Oseo
$cod_fix=$_SESSION['codigo_ceramio'];

//Selecciona Archivos
$res2=pg_exec("select max(codigo_imagen2) from imagen2");
$row2=pg_fetch_array($res2);
$img2=$row2[0];
                                            
$res3=pg_exec("select max(codigo_imagen3) from imagen3");
$row3=pg_fetch_array($res3);
$img3=$row3[0];

//selecicona Archivo
$res=pg_exec("select max(codigo_video) from video");
$row=pg_fetch_array($res);
$vid=$row[0];

//Ficha Registro Oseo MaxCodigo
$query_fcat=pg_exec("SELECT Max(codigo_catalogacion) AS fcat FROM ficha_catalogacion") or die ("Error SQL Max Ficha Catalogacion Oseo");
$data_fcat=pg_fetch_array($query_fcat);
$max_fcat=$data_fcat[fcat];
$maxi_fcat=$max_fcat+1;

//Selecciona Usuario
$user_name=$_SESSION['register_username'];
echo 
$user_name;
$sql_usu="Select codigo_usuario From usuario Where nombre_usuario='$user_name'";
$query_usu=pg_exec($DB,$sql_usu) or die ("Error SQL Usuario");
$data_usu=pg_fetch_array($query_usu);

//Inserta fila Ficha Registro Oseo
$sql_cer="INSERT INTO ficha_catalogacion
VALUES ('$maxi_fcat', '$vid','$img2', '$img3','$cod_fix','','','','','','$data_usu[codigo_usuario]', '$registro', '$regnacional', '$fechacatalogacion','$vitrina','$nivel')"
;
$row_cer pg_exec($DB,$sql_cer) or die ("Error SQL Insert Ficha Registro Ceramio");
$_SESSION['regcat_ceramio']=$registro;

//captura fecha y hora
setlocale(LC_TIME,"es_ES");
$fecha=date("Y-m-d");
$hora=date("H:i",time()-3600);

//Bitacora MaxCodigo 
$query_bit=pg_exec("SELECT Max(codigo_detaoperacion) AS bit FROM detalle_operacion") or die ("Error SQL Bitacora");
$data_bit=pg_fetch_array($query_bit);
$max_bit=$data_bit[bit];
$maxi_bit=$max_bit+1;

//REGISTRA INSERT EN BITACORA
$sql_det="INSERT INTO detalle_operacion
VALUES ('$maxi_bit','$data_usu[codigo_usuario]','3','$hora','$fecha','$registro')"
;
$query_det=pg_exec($DB,$sql_det)or die ("Error SQL Insert Detalle Operacion");

include(
"close_conexion.php");
include(
"InfoFR_Ceramio.php"); 
  #2 (permalink)  
Antiguo 13/04/2009, 10:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con mi Insert

Enishy

Si la tabla esta relacionada, mediante foreign key, es por que es necesario ingresar un valor que ya exista. Eso es la integridad referencial.

No puedes ingresar valores ni vacios, ni que no existan en la tabla con la cual están relacionadas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 13/04/2009, 11:00
Avatar de Enishy  
Fecha de Ingreso: septiembre-2007
Mensajes: 121
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Problema con mi Insert

hola gracias por contestar y claro tienes razon no puede ir vacios pero entonces como hago para hacer ese INSERT a Ficha_Catalogacion pues al hacer el Modelo Entidad Relacion esta tabla Ficha_Catalogacion jala a las otras tablas Ceramio, Botanico, Adobe y al hacer el INSERT capturo el codigo_xxx y el resto lo dejaba vacio ... con el MySQL no tenia problemas pero con el postgres es todo lo contrario...
  #4 (permalink)  
Antiguo 13/04/2009, 12:17
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Problema con mi Insert

Eso es sintoma de un mal diseño en el MER de tu base de datos.

En mysql existen dos tipos de estructuras para las tablas. Una es myisam que no requiere de integridad referencial para ingresar datos. y las Innodb que respetan la integridad referencial.

La solución para que te perimita hacer el insert, es llenar primero las tablas Ceramio, Botanico, Adobe e incluir un valor en el insert que concuerde con el valor de las respectivas tablas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:37.