Duda con sp en sql server 2000

Explico el problema estoy haciendo una consulta de de un sp en sql server 2000
Tabla: DATOS
Nombre apellidop apellidom fecha
maria alcazar tovar 23/01/2008
candelaria marti juarez 23/01/2008
francisca perez perez 23/02/2008
pedro salividar montes 23/04/2008
create procedure sp_consultaDatos
@fecha1 datetime,
@fecha2 datetime
as
SELECT * FROM datos
where fecha between @fecha1 and @fecha2
Pero a este procedimiento almacenado quiero agregar un numero consecutivo en la consulta a mostrar.
1 maria alcazar tovar 23/01/2008
2 candelaria marti juarez 23/01/2008
3 francisca perez perez 23/02/2008
4 pedro salividar montes 23/04/2008
Seria el consecutivo para visualizar.
Me podría auxiliar.
1

1 respuesta

Respuesta
1
Espero esto te sirva:
create procedure sp_consultaDatos
@fecha1 datetime,
@fecha2 datetime
as
SELECT  row_number() over(order by apellidop) as Cont, * FROM datos
where fecha between @fecha1 and @fecha2
en el over(order by ....) indicas por que campo(s) quieres ordenar.
Te dejo este link para más información.
Gracias por contestar
Utilizo sql server 2000 y vb6
Te comento, bueno esa parte ya la resolví
realice una consulta en sql server 2000
CREATE procedure usp_cons
@fecha1 datetime
as
declare @tabla table (id int identity(1,1), producto varchar(100), fecha datetime)
insert into @tabla
select producto, fecha
from productos
where fecha = @fecha1
select *
from @tabla
GO
ya que tenia problemas con las consultas de varios usuarios a la vez, con este sp soluciono esto.
Ahora el sp lo quiero mostrar en un datareport
esto fue lo que hice pero cuando hago la consulta no me muestra ningún dato.
variables generales
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim prm1 As ADODB.Parameter
esto va en un boton
Dim connstring As String
Dim fec As Date
fec = Text4.Text
connstring = "Provider=MSDASQL.1;User ID=compras;Password=irma;Initial Catalog=SISTEMA MEXBA;Data Source=CONTABILIDAD" 'origen de datos
Set cnn = New ADODB.Connection
cnn.ConnectionString = connstring
cnn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "dbo.usp_retornaproducto" & "(" & Text4 & ")"
MsgBox (cmd.CommandText)
cmd.Execute
Set rs = cmd.Execute
Set Datareport1.DataSource = rs
El problema que tengo es que no me muestra nada y ejecutarlo no me manda ningún error.
Espero que me auxiles lo más pronto posible, gracias
VB6 no es para nada mi fuerte, pero lo que veo es que en el commandText estas concatenando Text4 esto debería ser Text4.Text o fec.
También puede revisar si tu procedimiento almacendo esta devolviendo valores haciendo click derecho en tu procedimiento almacendo (en el sql server Management) y luego ejecutar procedimiento almecenado te saldrá una venta pidiéndote los parámetros que tiene definidos el Procedimiento almacenado ahí pones la fecha y le das ejecutar, esto también para verificar que te regrese lo que estas esperando.
si no te regresa resultados prueba con diferentes formatos de fecha dd/MM/yyyy, yyyy/MM/dd
Espero te ayude, cualquier cosa me avisas y buscamos una solución.
Hola,
Quedo así
'****declaracion general
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Dim prm1 As ADODB.Parameter
'*****boton
Dim connstring As String
connstring = "Provider=MSDASQL.1;User ID=usuario;Password=contrasena;Initial Catalog=DBDATOS;Data Source=SERVIDOR" 'origen de datos
'origen de datos
Set cnn = New ADODB.Connection
cnn.ConnectionString = connstring
cnn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "usp_retornaproducto"
Set prm1 = cmd.CreateParameter("FEC", adInteger, adParamInput, , Text4.Text)
cmd.Parameters.Append prm1
Set rs = cmd.Execute
While Not rs.EOF
Debug.Print rs.Fields(0) & Chr(9) & rs.Fields(1) & Chr(9) & rs.Fields(2)
rs.MoveNext
Wend
With cnn
Set rs = cnn.Errors(cmd.CommandText)
'si pondo este me sale error 3421 la aplicacion utiliza un valor de tipo no valido para la operacion actual.
Set rs = cnn.Execute(cmd.CommandText)
'error -2147217904 campo count erroneo o error de sintaxis
Set rs = cmd.Execute()
'muestra todo en blanco
'Set rs = cnn.Execute(Command)
error -2147217908 No se establecio ningun texto de comando para el objeto de comando
DataGrid1.AllowUpdate = True
Set DataGrid1.DataSource = rs
End With
NOTA: EL text4.text es el parámetro de búsqueda. Esto lo declaro en el sp como datetime y en vb 6 lo declaro como adDBTimeStamp
comilla simple:indica que ejecute uno por uno, no todos a la vez.
No se como pasarlos al datareport.
El problema es que no te esta reconociendo el parámetro que le estas mandando.
Trata con esto, en tu linea de código:
Set prm1 = cmd.CreateParameter("FEC", adInteger, adParamInput, , Text4.Text)
Le estas diciendo que el parámetro es Integer, intenta remplazando "adInteger" por "adDBDate" este valor debe tener el formato YYYYMMDD y en vez de mandarle directamente el Text4.Text mándale un parámetro declarado como DateTime, y creo que te sobra una coma antes del Valor del parámetro(Text4.Text)
Te mando este link para más info sobre los tipos de datos.
PD. Como consejo a los controles ponles un nombre descriptivo para que sepas a que control te estar refiriendo. Ejemplo en vez de Text4.Text -> TxtFecha.Text
Hola, buenas tardes
Pués aqui molestandote fue lo q hice referente a tu comentario.
Nota:Pero cuando ejecuto el sp vez que el parámetro en sql server 2000 es datetime, pero cuando lo ejecuto en vb6 el parámetro de búsqueda lo coloco en en texbox que es TxtFecha.Text, pero cuando lo ejecuto me dice error'2147217913(80040e07)' en tiempo de ejecución: [Microsoft][ODBC SQL Server Driver][SQL Server]Error al convertir el tipo de datos nvarchar a datetime.
Ya lo hice con val() y cdate(), pero me manda lo mismo.
Y al mostrar el datareport nada me salen dos lineas donde según si son dos registros pero no se ve nada, nada más las lineás.
Dim tField As ADODB.Field
Dim FECHA As Date
FECHA = CDate(TxtFecha.Text)
'Por si ya esta abierto...
Set cnn = Nothing
Set rs = Nothing
'Crear los objetos
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
'abrir la base usando las credenciales de Windows
cnn.Open "Provider=MSDASQL.1; " & _
"User ID=USUARIO; " & _
"Password=CONTRASEÑA; " & _
"Initial Catalog=BD; " & _
"Data Source=SERVIDOR; " & _
"Persist Security Info=True;"
' abrir el recordset indicando la tabla a la que queremos acceder
rs.Open "usp_retornaproductofechas1 TxtFecha", cnn, adOpenStatic, adLockOptimistic 'adOpenDynamic, adLockOptimistic
datareport
If rs.EOF = False Then
Set DataReport1.DataSource = rs
DataReport1.Show
End If
' Cerrar el recordset y la conexión
rs.Close
cnn.Close
Gracias, por tu valioso tiempo.
Disculpa la dardanza pero no había tenido chance para revisar las preguntas.
En esta linea de código:
Rs. Open "usp_retornaproductofechas1 TxtFecha", cnn, adOpenStatic, adLockOptimistic 'adOpenDynamic, adLockOptimistic
cambia el TxtFecha por FECHA
cuando mandes un parametro siempre intenta mandarlo del mismo tipo del que lo declaras en la bd.
O como lo tenias anteriormente
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "usp_retornaproducto"
Set prm1 = cmd.CreateParameter("FEC", adDBDate, adParamInput, , FECHA)
cmd.Parameters.Append prm1
Set rs = cmd.Execute
Pon un breakpoint para verificar que valor tiene la variable Fecha.
Hola,
En la bd es datetime y ya estuve cambiando a otro tipo de dato en vb6 para la fecha, pero sigue mandando el mismo error.
Si cambio el texto y escribo directamente la fecha si se ejecuta aunque no muestra los datos, ya que lo ideal es que el usuario ingrese la fechas para al búsqueda.
Crees que haya otra manera de hacer esto.
Porque ya llevo mucho y nada más no encuentro la solución.
Gracias.
a ver vamos a intentar con esto;
agrega un signo # tanto al principio como al final de tu fecha, ejemplo:
Fecha = "#" & TxtFecha.Text & "#"
http://msdn.microsoft.com/es-es/library/73ctwf33(VS.80).aspx
http://msdn.microsoft.com/es-es/library/59bz1f0h(VS.80).aspx
¿Lamento insistir pero ya probaste poniendo primero el año luego mes y luego día en la fecha? (Yyyy, MM, dd)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas