Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Tengo 2 tablas en mi base de datos:

Tabla insumo, Campos: id_insumo (Clave principal), codigo_insumo, descripcion
 y id_categoria(clave foranea)

Tabla categoria Campos: id_categoria (clave primaria) y categoria


Estoy tratando de insertar registros desde un formulario pero me da un error. Éstas son las sentencias que estoy usando:

hconn.Exec("INSERT INTO insumo (id_insumo, codigo_insumo, descripcion) values (&1,&2,&3)",Null,ButtonBox_codigo.Text, TextBox_descripcion_insumo.Text)


Esta sentencia me inserta en la base de datos pero en la clave foránea su campo queda null y en la consulta no sale, por lo que investigué estas palabras van en la sentencia pero no me funcionan: CONSTRAINT, FOREIGN KEY Y REFERENCES, pero no sé dónde ubicarlas.

Intenté esto:

hconn.Exec("insert into insumo (id_insumo, codigo_insumo, descripcion)
FOREIGN KEY (insumo.id_categoria)
REFERENCES categoria(id_categoria) values (&1, &2, &3)"
,
Null, ButtonBox_codigo.Text, TextBox_descripcion_insumo.Text)


pero me da un error que dice "you have an error in your sql syntax" intenté otras combinaciones pero nada.

¿Alguién sabe la sintaxis correcta?

Otra cosa: las categorías por lo que entendí deben estar ya registradas para poder asociarlas a un registro de insumo, en mi base de datos inserté registros y si me los relaciona bien el insumo con su categoría, las categorías que registré son 4.

Gracias
Willian Suárez
Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
hconn.Exec("INSERT INTO insumo (id_insumo, codigo_insumo, descripcion) values (&1,&2,&3)",Null,ButtonBox_codigo.Text, TextBox_descripcion_insumo.Text)


Eso es correcto. Debería funcionar si la tabla y sus índices están bien definidos. El problema, por lo que dices es que no están bien definidos.
La clave principal id_insumo debe ser integer, clave primaria y autoIncremental (AUTO-INCREMENT). Con eso su valor se obtiene de manera automática al crear el registro y no es necesario darle valor (por eso le mandas null como valor). Si no es autoincremental eres tú el encargado de suministrar el valor y de asegurarte que nunca se pueda repetir uno, etc. etc.


En otras palabras, abre la estructura de la tabla con phpMyAdmin, y establece el campo como AUTO-INCREMENT. Con eso te funcionarán los inserts.

Como dices, primero tendrás que dar de alta los registros de la tabla referenciada. No tiene sentido intentar grabar un registro que tiene en el campo el codigo_insumo=7 si no existe el registro 7 en la tabla de insumos (o como se llame).

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Buenas tardes
gracias por la respuesta

revisé la base de datos y el campo id_insumo es clave primaria entera y autoincremental con valor de 11
y la clave foranea es entera con valor de 11 no hay mas que hacer ahí

aún así no logro que me inserte los registros de los insumos y me los relacione con la clave foránea y ya en la otra tabla tengo las categorias, el problema está en la sentencia sql, que era mi pregunta que creo que no está correcta o le falta algo
en el insert o es el orden en que la puse o son las palabras foreign y references que no sé donde o en que orden colocarlas
probé una y otra vez en phpmyadmin y si se insertan bien y relaciona con el id de la tabla categoría y en la sintaxis sql me dice como es que debo declarar la sintaxis

seguiré investigando

gracias
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Buenos días

creo que he aislado el problema con la clave foránea a continuación lo explico:

tabla categoria
campos: id_categoria(clave primaria, autoincremental, not null, int), categoria

tabla insumo
campos: id_insumo(clave primaria, autoincremental, not null, int), codigo_insumo, descripcion, id_categoria(clave foránea, int)

por supuesto que tengo que registrar las categorias antes de registrar los insumos
INSERT INTO `categoria` (`id_categoria`, `categoria`) VALUES (NULL, 'Medicamentos', 'Médico-quirúrgico', 'Limpieza', 'Oficina');

ya registradas las categorias son 4: 1=Medicamentos, 2=Médico-quirúrgico, 3=Limpieza, 4=Oficina

hago un insert en la tabla insumo de varios insumos
INSERT INTO `insumo` (`id_insumo`, `codigo_insumo`, `descripcion`, `id_categoria`)
VALUES (NULL, '75945', 'Loratadina pastillas 20 mg', '1'), (NULL, '75984', 'Omeprazol cápsulas 200 mg', '1'),
 (NULL, '75912', 'Desinfectante 4 lit', '3'), (NULL, '75975', 'Nylon sutura 5 mm', '2'), (NULL, '75954', 'Alcohol absoluto 300 ml', '2'), (NULL, '75974', 'Resma papel carta', '4');

hasta aquí todo bien, entonces hago una consulta
SELECT id_insumo, codigo_insumo, descripcion, categoria FROM insumo JOIN categoria
ON insumo.id_categoria = categoria.id_categoria

y me muestra el id_insumo, su código, su descripción y su categoría (cosa que me costó bastante)
esa misma sentencia la puse en un formulario de gambas para consultar en un tableview y me mostró
los resultados bien

el problema está en el formulario de registro en gambas que si te fijas en el insert(resalté con negrita)
se inserta un número entero que es el número correspondiente a cada una de las categorías previamente
registrada, en gambas no puedo omitir ése dato porque sino el insumo se registra pero a la hora de hacer
la consulta no se muestra.

Todas estas pruebas las hice en mysql con phpmyadmin para obtener la sintaxis correcta y llevarla
a gambas pero en el insert estoy atorado para llevarlo a gambas estoy en ubuntu 12.04 y gambas 3.8.4

espero haberme hecho entender

Gracias
Willian Suárez Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Citar:
no puedo omitir ése dato

Claro que no puedes omitirlo... ¿qué esperabas? Ni gambas ni la BD se pueden "inventar" a qué categoría corresponde cada cosa.

Sigo sin entender tu problema.

Sube un proyecto o un extracto del proyecto donde tengas el error y el formato de tus tablas tal como lo muestra la sentencia SHOW CREATE TABLE y un fichero donde hayas exportado la estructura de las tablas.
Recrearé la base de datos en mi servidor y a ver si lo podemos solucionar.
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Buenas tardes, por algunos inconvenientes no había podido enviar el código fuente
donde tengo el problema.


lo planteo de nuevo:

1-Tengo formularios para registro de insumos, categoria y consulta

primero registro las categorías en este caso son 4. medicamentos, médico-quirúrgico,
limpieza y oficina,
aquí no hay problema, luego que registro las categorías, puedo
registrar los insumos donde le asigno un código,
 una descripción y su categoría, el problema está en que la tabla insumo en la base de datos,
tiene una clave foránea de la
tabla categoría, es ése campo que en gambas no sé como ponerlo en el formulario de
registro
para que el operador lo pueda registrar en la base de datos ya que la clave foránea es un campo entero,
 yo puse un textbox en el formulario pero no es así ya que el operador no sabe que número es la categoría que
corresponde a cada insumo porque el va a registrar el
nombre de la categoría.

Ya sé que un textbox es para letras y en éste caso sólo son 4 categorías pero no consigo la manera de qué se
 haga el proceso.

Si te fijas en ésta parte del código en el insert tengo un campo categoria_id_categoria
que
es la clave foránea es un campo entero pero el operador puede haber registrado varias
categorías y puede no
acordarse que número o en que orden las registró o pudo haberlas
 registrado otra persona,
como dije puse un textbox pero ya sé que no es ése el control que se debe usar o no es la manera de usarlo
aunque el operador va es a colocar el nombre de la categoría, anexo dentro del código fuente el archivo sql,
 estoy usando ubuntu 14.04, gambas 3.8.4, gestor de bases mysql con phpmyadmin.




Try hconn.Exec("insert into insumo (id_insumo, codigo_insumo, descripcion,categoria_id_categoria)
values (&1, &2, &3, &4)", Null, ButtonBox_codigo.Text, TextBox_descripcion_insumo.Text, TextBox_categoria.text)
      
 Message("Registro guardado")



el orden es así:
primero registro las posibles categorías y despues los insumos y les asigno una categoría que
está previamente registrada.



Nota: revisé otros post parecidos pero no daban la solución

            

Gracias

Willian Suárez Venezuela

sistcontpro_prog (5?? copia)-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: sistcontpro_prog (5?? copia)-0.0.1.tar.gz
Tamaño: 15.55 KB
Descargado: 69 veces
sistcontpro_prog (5?? copia)-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: sistcontpro_prog (5?? copia)-0.0.1.tar.gz
Tamaño: 15.55 KB
Descargado: 69 veces
sistcontpro_prog (5?? copia)-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: sistcontpro_prog (5?? copia)-0.0.1.tar.gz
Tamaño: 15.55 KB
Descargado: 69 veces

 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Hola willyanjose, mira, la descarga del archivo no funciona.

Por otra parte lo que comentas es que en el formulario te gustaria "ver" el texto de la categoría en un combobox por ejemplo y que al seleccionar una categoria de alguna manera le pases un numero entero que represente la id de esa categoria en la tabla de categorias no es asi?

Bueno si es así acá te paso un ejemplo conceptual para hacer la movida del categoría texto y entregar numero.

ejercicio-combobox-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: ejercicio-combobox-0.0.1.tar.gz
Tamaño: 13.55 KB
Descargado: 55 veces
ejercicio-combobox-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: ejercicio-combobox-0.0.1.tar.gz
Tamaño: 13.55 KB
Descargado: 55 veces
ejercicio-combobox-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: ejercicio-combobox-0.0.1.tar.gz
Tamaño: 13.55 KB
Descargado: 55 veces

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Como dice tincho lo que yo entiendo es que tu quieres que se vea el nombre de la categoría(medicamentos, médico-quirúrgico,
limpieza, oficina) pero que se guarde su id(1,2,3,4), lo puedes realizar con un combobox o agregando otro formulario que le pase el Id al formulario principal.
el el caso de que uses un combobox seria asi:

hacemos una consulta  a la tabla categoria, y con los resultados cargamos el combobox
Private rsCombo As Result 'Agregamos una variable result al principio del codigo
Private hconn As Connection

Public Sub Form_Open()
rsCombo = hconn.Exec("Select * From Categoria")
For Each rsCombo' por cada elemento en la tabla categoria
  If Not ComboBox1.List.Exist Then ComboBox1.Add(rsCombo!Categoria) 'agregamos el texto de la categoria a la lista del combobox
Next
End
 

luego en el evento change del combobox, nos movemos en el resultado de la consulta, dependiendo de lo que se seleccione el el combo
Public Sub ComboBox1_Change()
  rsCombo.MoveTo(ComboBox1.Index) 'segun la categoria que se elija nos movemos al elemento correspondiente en la variable result
End


y luego guardamos el valor del id que esta en el resultado
Private Sub botonguardar()
Try hconn.Exec("insert into insumo (id_insumo, codigo_insumo, descripcion,categoria_id_categoria)
values(&1, &2, &3, &4)"
, Null, ButtonBox_codigo.Text, TextBox_descripcion_insumo.Text, rsCombo!id_categoria)
'utilizamos el valor del id que esta en el result
End

 



 
vr_rv - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Buenas tardes gracias por las respuestas

Estan en lo correcto los dos, al ser un campo foráneo en la tabla insumo no encuentro la manera de que el
que está usando el programa ingrese la categoría sin tener que saber que número es porque el campo foráneo es entero
mi apiicación es para gestionar un inventario de un ambulatorio, el problema en cuestión lo dejé para plantearlo e investigar para despues, les comento que ya tengo registro de insumos y categorías (con el problema todavía), agrego y actualizo cantidades a los insumos, descargo cantidades por si se necesita (por ejemplo si se vence el insumo), control de acceso por niveles (usuario y administrador), todo con código bastante normal (o simple si es que se dice así), tengo problemas para las entradas (a un lote de insumos que lleguen debo registrarlos con unos datos aparte como por ejemplo su serial de llegada, la fecha de llegada), las salidas o pedidos para las diferentes partes del ambulatorio, voy a desarrollar todo lo que pueda y plantearé las dudas y al terminarlo lo pondré a disposición de ustedes

Si hay alguien novato como yo que lea esto lo invito a empaparse bien en lo que es la base de datos (ayuda mucho porque yo empecé al revés, empecé por la interfaz gráfica, claro que ya tenía otras cosas como los requerimientos de la aplicación)

de verdad muchas gracias voy a revisar lo que me facilitaron y voy a revisar por qué no baja el programa
que subí ayer (aunque ése lo que tiene es el formulario del problema)



Willian Suárez Venezuela
 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿Cual Es La Sintaxis Correcta Para Clave Foranea Con Sql? 
 
Este es el programa

sistcontpro_prog 0.0.1.tar.gz
Descripción: Gestion inventario para ambulatorios 
Descargar
Nombre del archivo: sistcontpro_prog 0.0.1.tar.gz
Tamaño: 15.63 KB
Descargado: 61 veces
sistcontpro_prog 0.0.1.tar.gz
Descripción: Gestion inventario para ambulatorios 
Descargar
Nombre del archivo: sistcontpro_prog 0.0.1.tar.gz
Tamaño: 15.63 KB
Descargado: 61 veces
sistcontpro_prog 0.0.1.tar.gz
Descripción: Gestion inventario para ambulatorios 
Descargar
Nombre del archivo: sistcontpro_prog 0.0.1.tar.gz
Tamaño: 15.63 KB
Descargado: 61 veces

 



 
willyanjose - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Truco Para Conseguir Muchos Ejemplos De Si... v3ctor General 1 Domingo, 16 Noviembre 2014, 20:24 Ver último mensaje
Shell
No hay nuevos mensajes ¿ Qué Forma Os Parece Más Correcta Para... Shell General 4 Viernes, 20 Febrero 2015, 13:51 Ver último mensaje
Shell
No hay nuevos mensajes Cual Es La Forma Correcta De Agregar Un Co... vr_rv Controles/Librerías/Componentes 4 Lunes, 11 Julio 2016, 19:24 Ver último mensaje
vr_rv
No hay nuevos mensajes Resaltado De Sintaxis Para Gambas En Gnome... tincho Programación en otros lenguajes 0 Lunes, 10 Julio 2017, 12:46 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron