Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Error al ejecutar creacion de un procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=84805)

lsedr 08-12-2013 19:16:21

Error al ejecutar creacion de un procedimiento almacenado
 
1 Archivos Adjunto(s)
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

ginkaku 08-12-2013 20:56:24

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.

lsedr 08-12-2013 21:57:46

Cita:

Empezado por ginkaku (Mensaje 470554)
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

ginkaku 09-12-2013 05:40:24

:rolleyes:
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

lsedr 09-12-2013 16:39:10

Cita:

Empezado por ginkaku (Mensaje 470566)
:rolleyes:
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...

lsedr 09-12-2013 18:11:49

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

Casimiro Notevi 09-12-2013 18:28:54

No olvides los "tags" al código, gracias ;)

lsedr 09-12-2013 20:14:46

1 Archivos Adjunto(s)
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...

ginkaku 09-12-2013 22:27:15

:rolleyes::rolleyes::rolleyes:
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.

lsedr 09-12-2013 23:33:59

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

lsedr 11-12-2013 04:54:42

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


La franja horaria es GMT +2. Ahora son las 13:38:55.

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