Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
Talking Error al ejecutar creacion de un procedimiento almacenado

saludos

tengo un error que no logro corregir. estoy tratando de crear un procedimiento almacenado en
mi BD llamada ''Mibase''

Este es el código que ejecuto desde un ''New Query'' en el MSQL Server 2008:

Código SQL [-]
CREATE PROC INSERTARCLIENTES
(
@Nombres varchar(30),
@Cedula varchar(13),
@Telefono varchar(10),
@Celular varchar(10),
@Ciudad varchar(30),
@Direccion varchar(100)
)

as
BEGIN
Insert into Clientes values(@Nombres,@Cedula,@Telefono,@Celular,@Ciudad,@Direccion);
END
go


después que lo ejecuto me dice:

Código:
Msg 213, Level 16, State 1, Procedure INSERTARCLIENTES, Line 12
Column name or number of supplied values does not match table definition.
Lo que quiero es tener ese procedimiento almacenado para ejecutarlo desde un boton para agregar un insertar un nuevo cliente a la tabla de mi BD llamada ''Clientes''

Cuando hago un ''Refresh'' no aparece el procedimiento almacenado creado..

No logro ver cual es la pavada que estoy cometiendo... os dejo imagen adjunta

gracias
Imágenes Adjuntas
Tipo de Archivo: jpg 1.jpg (23,6 KB, 3 visitas)
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel

Última edición por lsedr fecha: 08-12-2013 a las 19:21:07.
Responder Con Cita
  #2  
Antiguo 08-12-2013
Avatar de ginkaku
ginkaku ginkaku is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 59
Poder: 12
ginkaku Va por buen camino
Saludos

Hola
Creo que no te crea el procedimiento porque te falta especificar los campos a donde estas asignando esos valores por parámetro. Por ejemplo si quisiera insertar a mi tabla producto valores específicos pasados por variables:
Código SQL [-]
INSERT INTO PRODUCTO(varCODIGO,varDESCRIPCION,smTIPO,smCALIDAD,FOTO) VALUES (@CODIGO,@DESCRIPCION,@TIPO,@CALIDAD,@FOTO);

Creo que solo te falta eso, ya que se puede asignar en cualquier orden y eso sql necesita saber.
Ojala te sirva un saludo.
Responder Con Cita
  #3  
Antiguo 08-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
Cita:
Empezado por ginkaku Ver Mensaje
Hola
Creo que no te crea el procedimiento porque te falta especificar los campos a donde estas asignando esos valores por parámetro. Por ejemplo si quisiera insertar a mi tabla producto valores específicos pasados por variables:
Código SQL [-]
INSERT INTO PRODUCTO(varCODIGO,varDESCRIPCION,smTIPO,smCALIDAD,FOTO) VALUES (@CODIGO,@DESCRIPCION,@TIPO,@CALIDAD,@FOTO);

Creo que solo te falta eso, ya que se puede asignar en cualquier orden y eso sql necesita saber.
Ojala te sirva un saludo.
y que significa ''sm'' que colocas en ''TIPO'' ??

apenas comienzo con sql...

El codigo me sirvio muy bien, ahora solo me falta que cuando haga un llamado a este procedimiento desde un boton para insertar clientes nuevo a mi tabla Clientes, necesito que tambien me pasa la Fecha y Hora en la que se registra el cliente...

Como incluyo esto dentro de este procedimiento ???

gracias
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel

Última edición por lsedr fecha: 08-12-2013 a las 22:13:48.
Responder Con Cita
  #4  
Antiguo 09-12-2013
Avatar de ginkaku
ginkaku ginkaku is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 59
Poder: 12
ginkaku Va por buen camino

Bueno primero es una costumbre mía anotar el tipo de dato de un atributo en su nombre, si es un entero le pongo intCODIGO, si es varchar varNOMBRE, si es smallint smID,etc. Es solo costumbre y me ayuda.

Segundo, puedes mandarle la fecha y hora desde dephi pero es algo innecesario para mi. Ya que puedes tomar estos datos desde SQL server directamente. Ej:
Código SQL [-]
INSERT INTO NOTAVENTA(FECHA,dTOTAL_BS,intID_CLIENTE) VALUES(GETDATE(),@TOTAL,@CLIENTE);

En otras palabras necesitas tener un atributo de tipo DATE y usas "GETDATE()" para tomar la fecha del sistema desde SQL Server. Lo cual es muy interesante porque si usas DATETIME también te guarda la hora con minutos y segundos(según recuerdo). Te aconsejo informarte mejor sobre el uso de estas funciones para tu proyecto, no te tomara mucho tiempo.
Un saludo
Responder Con Cita
  #5  
Antiguo 09-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
Cita:
Empezado por ginkaku Ver Mensaje

Bueno primero es una costumbre mía anotar el tipo de dato de un atributo en su nombre, si es un entero le pongo intCODIGO, si es varchar varNOMBRE, si es smallint smID,etc. Es solo costumbre y me ayuda.

Segundo, puedes mandarle la fecha y hora desde dephi pero es algo innecesario para mi. Ya que puedes tomar estos datos desde SQL server directamente. Ej:
Código SQL [-]
INSERT INTO NOTAVENTA(FECHA,dTOTAL_BS,intID_CLIENTE) VALUES(GETDATE(),@TOTAL,@CLIENTE);

En otras palabras necesitas tener un atributo de tipo DATE y usas "GETDATE()" para tomar la fecha del sistema desde SQL Server. Lo cual es muy interesante porque si usas DATETIME también te guarda la hora con minutos y segundos(según recuerdo). Te aconsejo informarte mejor sobre el uso de estas funciones para tu proyecto, no te tomara mucho tiempo.
Un saludo
gracias compadre por la info, ahora voy a programar esa parte...
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel
Responder Con Cita
  #6  
Antiguo 09-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
bueno ahorita le agregue el campo de fecha y hora pero no me funciona, no reconoce el ''GetDateTime''


CREATE PROC INSERTARCLIENTES
(
@Fecha_Hora datetime,
@Nombres varchar(30),
@Cedula varchar(13),
@Telefono varchar(10),
@Celular varchar(10),
@Ciudad varchar(30),
@Direccion varchar(100)
)

as
BEGIN
INSERT INTO Clientes(Fecha_Hora,Nombres,Cedula,Telefono,Celular,Ciudad,Direccion)
VALUES (GetDatetime(),@Nombres,@Cedula,@Telefono,@Celular,@Ciudad,@Direccion);
END
go
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel

Última edición por lsedr fecha: 09-12-2013 a las 18:30:17.
Responder Con Cita
  #7  
Antiguo 09-12-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No olvides los "tags" al código, gracias
Responder Con Cita
  #8  
Antiguo 09-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
cuando llamo al procedimiento almacenado para que me inserte un nuevo cliente, hay problemas al insertarlos, y pienso que esta en el ''GeDateTime'', el resto del procedimiento esta correcto porque ya lo probé y si inserta los demás datos... pero no la ''Fecha_Hora'' que es el campo que necesito para saber la fecha y la hora en que es registrado cada cliente...
Imágenes Adjuntas
Tipo de Archivo: jpg errorDateTime.jpg (20,0 KB, 1 visitas)
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel
Responder Con Cita
  #9  
Antiguo 09-12-2013
Avatar de ginkaku
ginkaku ginkaku is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 59
Poder: 12
ginkaku Va por buen camino

Hola el código esta bien, solo hay un error que se debe a que no me explique bien creo.
1.Tu campo Fecha de tipo de dato DATETIME esta bien.
2.En el procedimiento solo se coloca GETDATE(). SQL Server almacenara todo en el campa fecha(tanto la fecha como la hora). Si fuera solo de tipo DATE guardaría solo la fecha.
Código SQL [-]
CREATE PROC INSERTARCLIENTES
(
@Fecha_Hora datetime,
@Nombres varchar(30),
@Cedula varchar(13),
@Telefono varchar(10),
@Celular varchar(10),
@Ciudad varchar(30),
@Direccion varchar(100)
)
as
BEGIN
INSERT INTO Clientes(Fecha_Hora,Nombres,Cedula,Telefono,Celular,Ciudad,Direccion) 
VALUES (GetDate(),@Nombres,@Cedula,@Telefono,@Celular,@Ciudad,@Direccion);
END
go
Lo cual almacena algo asi:
Cita:
2013-12-09 16:49:17.360
Saludos.
Responder Con Cita
  #10  
Antiguo 09-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
el problema es que me da el error que te envie en la imagen y dice esto:
Cita:
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
al parecer es un problema de formato pero no se como arreglarlo en el procedimiento almacenado
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel

Última edición por lsedr fecha: 09-12-2013 a las 23:40:48.
Responder Con Cita
  #11  
Antiguo 11-12-2013
lsedr lsedr is offline
Miembro
 
Registrado: ago 2010
Posts: 39
Poder: 0
lsedr Va por buen camino
bueno.... solucione el problema quitando la variable @Fecha_Hora

quedando asi el proc almacenado:

Código SQL [-]
CREATE PROC INSERTARCLIENTES
(
@Nombres varchar(30),
@Cedula varchar(13),
@Telefono varchar(10),
@Celular varchar(10),
@Ciudad varchar(30),
@Direccion varchar(100)
)

as
BEGIN
INSERT INTO Clientes(Fecha_Hora,Nombres,Cedula,Telefono,Celular,Ciudad,Direccion) 
VALUES (convert(datetime,getdate(),101),@Nombres,@Cedula,@Telefono,@Celular,@Ciudad,@Direccion);

END
go
__________________
"Dios, por definición, es lo más perfecto que puede ser pensado. Si pensáramos en Dios como inexistente, entonces no sería realmente la idea de Dios, pues tendría la imperfección de no existir. Entonces, la oración 'Dios existe' es necesariamente verdadera. Por lo tanto, Dios existe". Kurt Gödel

Última edición por lsedr fecha: 11-12-2013 a las 04:55:08. Razón: solucionado...
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Creacion De Procedimiento Almacenado Con If Y Select jfernandezt Firebird e Interbase 2 23-09-2013 18:55:42
Ejecutar procedimiento almacenado con case!! Melissa_12 MS SQL Server 7 16-11-2012 22:19:24
Error de sintaxis al ejecutar procedimiento almacenado en Firebird 2.1.3 dant Firebird e Interbase 4 26-07-2010 20:18:25
Ejecutar Procedimiento Almacenado en Trigger AGAG4 SQL 16 21-09-2004 03:27:47
Ejecutar un Procedimiento almacenado saul saldaña MS SQL Server 1 03-08-2004 21:20:30


La franja horaria es GMT +2. Ahora son las 00:18:32.


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