Tabla temporal, conseutivo y between y mostrar en vb6

Utilizo vb6 y sql server 2000
Bueno explico un poco el problema que tengo.
Mira la consulta debe llevar
1 manzanas 01/02/2009
2 peras 03/02/2009
3 platanos 01/01/2009
4 guayabas 10/12/2008
* el numero es el consecutivo
En mi primero tabla PRODUCTOS nada más tengo el campo de producto, fecha
Producto
Manzanas
Peras
Paltanos
Guayabas
Entonces lo que hago es crear un sp y traer los productos, en vb6 en código
Creo una variable cons int y con do-loop leo los regristros.
Todo es lo inserto en otra tabla que cree en sql server 2000 PRODUCTOS1 con el campo de consecutivo y productos.
Pero el problema es cuando los usuarios consultan un o todos los productos, lo que visualizan es que el primero que hizo la consulta, todos los demás ven lo mismo si no se salen de la consulta, esto sale bien al menos que los usuarios no hagan las consultas al mismo tiempo.
Bueno referente a los privilegios si tengo, pero lo que utilizo es una tabla de usuarios que cree y lo hago por medio de visualización de form.
No utilizo directamente usuarios desde sql server.
Espero me puedas asesorar, o mandar algún tutorial entendible.
Nota: ya cree tablas temporales pero en un sp par vb6 no las puedo visualizar.
También trate de hacer este:
CREATE PROCEDURE pruebTMP
AS
EXEC('SELECT IDENTITY(INT, 1,1) CONSECUTIVO, * INTO #TABLA
FROM productos SELECT * FROM #TABLA')
GO
Si salen, pero no se como poner el between para mostrar por fecha y así los usuarios vean nada más la consulta que hicieron.
fecha between '01/02/2009' and '03/02/2009'

1 respuesta

Respuesta
1
Por lo que entiendo tu tienes una tabla de productos, que cuando algún usuario hace una consulta de ellas, la información de la consulta es cargada en otra tabla y haces un select a esta para que los usuario recuperen sus datos y adicionalmente le agregas un correlativo.
Bueno, no es necesario que hagas una copia a otra tabla, te recomiendo que hagas lo siguiente con lo que tienes:
create procedure usp_retornaproductofechas
@fecha1 datetime, @fecha2  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 between @fecha1 and @fecha2
select *
From @tabla
Luego lo que haces desde tu aplicativo es disparar el procedimiento y cargarlo en un recordset para que puedas leerlo.
Hola,
gracias, por contestar y disculpa por tardar en contestaste.
Ya lo probé en el sql y si perfecto, referente a que lo quiero mostrar en un datagrid, pues lo hice como un sp normal y si lo muestra en el datagrid.
Ahora mi duda es mostrarlo en un datareport para poderlo imprimir.
Gracias, por su valioso tiempo, espero que me puedes auxiliar.
Hola,
Hice el intento para el datareport, ya que lo quiero imprimir, pero tengo problemas al traer el sp,
así es como lo estoy realizando
esto va en general
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
esto va en mi boton
Dim connstring As String
Dim fec As Date
Dim fec1 As Date
connstring = "Provider=MSDASQL.1;User ID=usuario;Password=contraseña;Initial Catalog=BD;Data Source=SERVIDOR" 'origen de datos
Set cnn = New ADODB.Connection
cnn.ConnectionString = connstring
cnn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = cnn
cmd.CommandType = adCmdStoredProc
fec = Text1.Text
fec1 = Text2.Text
cmd.CommandText = "execute usp_retornaproductofechas" & fec & "," & fec1
'cmd.CommandText = "usp_retornaproductofechas "
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.Execute(Command)
Set DataGrid1.DataSource = rs
End With
Set rs = cmd.Execute es donde de sintaxis infraccion de acceso.
Espero me puedas contesatr lo más pronto posible.
Gracias por tu valioso tiempo.
Disculpa la demora, con mucho trabajo.
¿Cuándo ejecutas el SP desde el Management Studio te sale el mismo error?.
De no ser así el problema esta en tu código en visual, te recomendaría que uses el recordset y lo ejecutes así
rs. Open ''usp_nombre @variable", cnconection, optimisctic, etc...
No recuerdo mucho de visual pero creo que deberías usarlo de esa manera
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.
Si se puede me podrías dar tu correo en hotmail, para que te agregara y así preguntarte, lo que pasa es que me urge y ya tengo varios días así.
Referente el sp que me auxiliaste es sp dinámico o como se llama.
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.
Si el problema es por la conversión de datos, entonces que tu SP acepte en vez de datetime una variable del tipo varchar, y ya luego en tu sp te encargas de convertir el texto usando cast(@variable as datetime) para realizar tu consulta, prueba lo que te sugiero y en caso no resulte vuelve a realizar la pregunta y te ayudare a la brevedad posible.
Hola, buenas tardes
Este el el primer sp
create procedure usp_retornaproductofechas
@fecha1 datetime, en otro sp varchar(10),
@fecha2 datetime en otro sp varchar(10)
as
Declare @tabla table (id int identity(1,1), producto varchar(100), fecha datetime) en otro sp varchar(10)
insert into @tabla
select producto, fecha en otro sp , convert(varchar, fecha,103)as fecha
from productos
where fecha between @fecha1 and @fecha2
select * en el otro sp id,producto, fecha, convert(varchar, fecha,103)as fecha
from @tabla
GO
la tabla producto tengo el campo fecha y el tipo de dato es datetime
este es el codigo como lo deje
Dim tField As ADODB.Field
Dim FECHA As Date
Text4.Text = cdate(Text4.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
Dim DateConvert As Date
'abrir la base usando las credenciales de Windows
cnn.Open "Provider=MSDASQL.1; " & _
"User ID=compras; " & _
"Password=irma; " & _
"Initial Catalog=SISTEMA MEXBA; " & _
"Data Source=CONTABILIDAD; " & _
"Persist Security Info=True;"
' abrir el recordset indicando la tabla a la que queremos acceder
rs.Open "usp_retornaproductofechas Text4, Text6", cnn, adOpenForwardOnly, adLockOptimistic
Text10.Text = rs(0)
Text11.Text = rs(1)
Text12.Text = rs(2)
'datareport
If rs.EOF = False Then
Set DataReport1.DataSource = rs
DataReport1.Show
End If
el text4 y text6 pongo esto
01/01/2006 y 31/01/2006
Pero so pongo directamente las fechas en el sp
rs.Open "usp_retornaproductofechas '01/01/2006', '31/01/2006'", cnn, adOpenForwardOnly, adLockOptimistic
si avanzo,
entonces quiero pensar que es cuando el text4 y text6 escribo 01/01/2006 y 31/01/2006 para hacer la búsqueda y me dice error al convertir un nvarchar a datetime en el primer sp, y el segundo sp error varchar a datetime
gracias por tu atención.
Atentamente: Karina
Puedes probar esto:
From productos
where convert(varchar(10), fecha, 103) between @fecha1 and @fecha2
Donde @fecha1 y @fecha2 están en varchar.
Me comentas.
Hola,
El problema es a declarar la tabla temporal al llamar en vb6 la fecha en el textfecha1 y textfecha2
probé así el sp
create procedure usp_fechas
@fecha1 datetime,
@fecha2 datetime
as
select producto, fecha
from productos
where fecha between @fecha1 and @fecha2
GO
Al llamar la consulta en vb6
rs.Open "usp_fechas textfecha1, textfecha1", cnn, adOpenForwardOnly, adLockOptimistic
me dice error tipo de dato nvarchar a datime
Lo hice con convert pero me da lo mismo
Error.
¿O crees que pueda hacer de otra manera o que crees que falte?
Gracias por tu ayuda.
Estoy revisando tu código y he notado algo, prueba de la siguiente manera y me comentas:
rs.Open "usp_fechas '" & textfecha1 & "', '" & textfecha1 & "'", cnn, adOpenForwardOnly, adLockOptimistic
Ya que al parecer los estabas metiendo como texto y no con el valor de la variable.
Copia y pega el texto tal cual, ya que hay comillas simples y dobles.
Hola,
Te agradezco por tu valioso tiempo de paciencia.
Espero que no salgan cosas raras y si es así te voy a estar molestando.
Gracias :)
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas