Foros del Web » Programando para Internet » ASP Clásico »

USO DE STORE PROCEDURES - teóricamente, me parece todo correcto.

Estas en el tema de USO DE STORE PROCEDURES - teóricamente, me parece todo correcto. en el foro de ASP Clásico en Foros del Web. Holas a todos. Estoy llamado a un procedimiento almacenado que es el siguiente: create or replace package body kenny is procedure sp ltimus_buscaexp ( tipbusq ...
  #1 (permalink)  
Antiguo 10/03/2006, 15:29
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 19 años, 2 meses
Puntos: 0
USO DE STORE PROCEDURES - teóricamente, me parece todo correcto.

Holas a todos. Estoy llamado a un procedimiento almacenado que es el siguiente:

create or replace package body kenny is

procedure spltimus_buscaexp
(
tipbusq in number,
codger in number default null,
salida in out globalpkg.rct1
)
as begin

if (tipbusq = 1) then
open salida for

select G.VDEGER as Gerencia, A.vdeare as Area, t.NAME as Expediente, s.LABEL as Tipo, s.starttime Inicio, U.vappat ApPaterno, U.vapmat ApMaterno, U.vnousr Nombre
from ULTIMUS.incident@leo t, ULTIMUS.step@leo s,
WORKFLOW.USR U, workflow.are A, workflow.ger G
where t.incident= s.incident and
t.name= s.name and
s.starttime =(select max(p.starttime)
from ULTIMUS.step@leo p
where p.incident= t.incident and
p.name= t.name)and
trim(s.CLIENT) = trim(U.USER_NT) and
U.CCOARE= A.CCOARE AND
A.CCOGER=G.CCOGER and
t.status = 1;

elsif (tipbusq = 2) then
open salida for
select g.ccoger, g.vdeger from workflow.ger g;

end if;

end spltimus_buscaexp;

end kenny;


Y lo llamo con el siguiente código:

set MostTodosExp = Server.CreateObject("ADODB.Command")
MostTodosExp.ActiveConnection = obj
MostTodosExp.CommandText = "KENNY.SPU_ULTIMUS_BUSCAEXP"
MostTodosExp.CommandType = adCmdStoredProc
set parametro1 = MostTodosExp.CreateParameter("tipbusq",adVariant,a dParamInput,,2)
MostTodosExp.Parameters.Append parametro1
set SalidaMostTodosExp = MostTodosExp.Execute

De todos los manuales que he buscado, no veo porqué es que no debería funcionarme. Lo que me devuelve es un RecordSet vacío. La página funciona si es que hago la llamada con adCmdText, pero cuando uso el adCmdStoreProc. ya no obtengo nada. ¿Qué puedo estar haciendo mal?
  #2 (permalink)  
Antiguo 10/03/2006, 17:46
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Si el stored procedure funciona, seguramente solo es cuestión de como estás recuperando el recordset, trata utilizando el método NextRecordset

set SalidaMostTodosExp = MostTodosExp.Execute.NextRecordset()
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 11/03/2006, 11:41
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
OFF TOPIC

¿Tu BD's es SQL 2005?, por que definitivamente no es T-SQL lo que usas
  #4 (permalink)  
Antiguo 13/03/2006, 08:58
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 19 años, 2 meses
Puntos: 0
U_Goldman:
Probé y no funcionó, pero gracias de todas maneras. Si se te ocurre alguillo más, me avisas.

La base de datos que uso es Oracle, si es que a eso te refieres. El código que presento está hecho en PL/SQL.
  #5 (permalink)  
Antiguo 13/03/2006, 11:03
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 19 años, 2 meses
Puntos: 0
Ya Me Dieron Una Rpta Y Ya Funciona

Holas de nuevo. Me dieron una rpta que hace funcionar la página, pero no entiendo muy bien porqué.

Todo empieza en la línea de conexión a la base de datos que no estaba mal, porque sí podía obtener datos de esta, sino que parece que el uso del "on error resume next" alteraba muchas cosas. Cuando le quitaron esta parte, aparecieron algunos errores sobre el uso de argumentos no válidos. En ese caso, se tuvieron que hacer los siguientes cambios.

ANTES:

set MostTodosExp = Server.CreateObject("ADODB.Command")
MostTodosExp.ActiveConnection = obj
MostTodosExp.CommandText = "KENNY.SPU_ULTIMUS_BUSCAEXP"
MostTodosExp.CommandType = adCmdStoredProc
set parametro1 = MostTodosExp.CreateParameter("tipbusq",adVariant,a dParamInput,,2)
MostTodosExp.Parameters.Append parametro1
set SalidaMostTodosExp = MostTodosExp.Execute

AHORA:

set MostTodosExp = Server.CreateObject("ADODB.Command")
MostTodosExp.ActiveConnection = obj
MostTodosExp.CommandText = "KENNY.SPU_ULTIMUS_BUSCAEXP"
MostTodosExp.CommandType = 2
set parametro1 = MostTodosExp.CreateParameter("tipbusq",12,1,,2)
MostTodosExp.Parameters.Append parametro1
set SalidaMostTodosExp = MostTodosExp.Execute

Me dicen que los adCmdStoredProc y etc, se utilizaban para Visual Basic, pero no para ASP. Como les dije, no entendí muy bien, pero me funciona sin problemas. Ah, también tuve que cambiar el:

SalidaMostTodosExp.Nothing

por

Set SalidaMostTodosExp = Nothing

La pregunta ha cambiado, entonces. ¿Porqué es que ahora debo usar esos números, y porqué es que me anduvo funcioando sin problemas anteriormente?
¿Porqué nadie más utiliza este tipo de código? Porque como dije, en muchos ejemplos no he visto nada igual.
  #6 (permalink)  
Antiguo 13/03/2006, 11:13
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Ok, vamos por partes:

1. Si vas a utilizar el objeto command, siempre es recomendable que utilices conexión por OLEDB

2. Los números que sustituiste, son las constantes de ADO, si quieres utilizar tus constantes literales, tendrás que incluir el archivo ADODB a nivel de include, cuyo contenido es el siguiente:

Código:
<%
'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- CursorOptionEnum Values ----
Const adHoldRecords = &H00000100
Const adMovePrevious = &H00000200
Const adAddNew = &H01000400
Const adDelete = &H01000800
Const adUpdate = &H01008000
Const adBookmark = &H00002000
Const adApproxPosition = &H00004000
Const adUpdateBatch = &H00010000
Const adResync = &H00020000

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- CursorLocationEnum Values ----
Const adUseClient = 1
Const adUseServer = 2
Const adUseClientBatch = 3

'---- DataTypeEnum Values ----
Const adEmpty = 0
Const adTinyInt = 16
Const adSmallInt = 2
Const adInteger = 3
Const adBigInt = 20
Const adUnsignedTinyInt = 17
Const adUnsignedSmallInt = 18
Const adUnsignedInt = 19
Const adUnsignedBigInt = 21
Const adSingle = 4
Const adDouble = 5
Const adCurrency = 6
Const adDecimal = 14
Const adNumeric = 131
Const adBoolean = 11
Const adError = 10
Const adUserDefined = 132
Const adVariant = 12
Const adIDispatch = 9
Const adIUnknown = 13
Const adGUID = 72
Const adDate = 7
Const adDBDate = 133
Const adDBTime = 134
Const adDBTimeStamp = 135
Const adBSTR = 8
Const adChar = 129
Const adVarChar = 200
Const adLongVarChar = 201
Const adWChar = 130
Const adVarWChar = 202
Const adLongVarWChar = 203
Const adBinary = 128
Const adVarBinary = 204
Const adLongVarBinary = 205

'---- ConnectPromptEnum Values ----
Const adPromptAlways = 1
Const adPromptComplete = 2
Const adPromptCompleteRequired = 3
Const adPromptNever = 4

'---- ConnectModeEnum Values ----
Const adModeUnknown = 0
Const adModeRead = 1
Const adModeWrite = 2
Const adModeReadWrite = 3
Const adModeShareDenyRead = 4
Const adModeShareDenyWrite = 8
Const adModeShareExclusive = &Hc
Const adModeShareDenyNone = &H10

'---- IsolationLevelEnum Values ----
Const adXactUnspecified = &Hffffffff
Const adXactChaos = &H00000010
Const adXactReadUncommitted = &H00000100
Const adXactBrowse = &H00000100
Const adXactCursorStability = &H00001000
Const adXactReadCommitted = &H00001000
Const adXactRepeatableRead = &H00010000
Const adXactSerializable = &H00100000
Const adXactIsolated = &H00100000

'---- XactAttributeEnum Values ----
Const adXactPollAsync = 2
Const adXactPollSyncPhaseOne = 4
Const adXactCommitRetaining = &H00020000
Const adXactAbortRetaining = &H00040000
Const adXactAbortAsync = &H00080000

'---- FieldAttributeEnum Values ----
Const adFldBookmark = &H00000001
Const adFldMayDefer = &H00000002
Const adFldUpdatable = &H00000004
Const adFldUnknownUpdatable = &H00000008
Const adFldFixed = &H00000010
Const adFldIsNullable = &H00000020
Const adFldMayBeNull = &H00000040
Const adFldLong = &H00000080
Const adFldRowID = &H00000100
Const adFldRowVersion = &H00000200
Const adFldCacheDeferred = &H00001000

'---- EditModeEnum Values ----
Const adEditNone = &H0000
Const adEditInProgress = &H0001
Const adEditAdd = &H0002

'---- RecordStatusEnum Values ----
Const adRecOK = &H0000000
Const adRecNew = &H0000001
Const adRecModified = &H0000002
Const adRecDeleted = &H0000004
Const adRecUnmodified = &H0000008
Const adRecInvalid = &H0000010
Const adRecMultipleChanges = &H0000040
Const adRecPendingChanges = &H0000080
Const adRecCanceled = &H0000100
Const adRecCantRelease = &H0000400
Const adRecConcurrencyViolation = &H0000800
Const adReegrityViolation = &H0001000
Const adRecMaxChangesExceeded = &H0002000
Const adRecObjectOpen = &H0004000
Const adRecOutOfMemory = &H0008000
Const adRecPermissionDenied = &H0010000
Const adRecSchemaViolation = &H0020000
Const adRecDBDeleted = &H0040000

'---- GetRowsOptionEnum Values ----
Const adGetRowsRest = -1

'---- PositionEnum Values ----
Const adPosUnknown = -1
Const adPosBOF = -2
Const adPosEOF = -3

'---- AffectEnum Values ----
Const adAffectCurrent = 1
Const adAffectGroup = 2
Const adAffectAll = 3

'---- FilterGroupEnum Values ----
Const adFilterNone = 0
Const adFilterPendingRecords = 1
Const adFilterAffectedRecords = 2
Const adFilterFetchedRecords = 3

'---- PropertyAttributesEnum Values ----
Const adPropNotSupported = &H0000
Const adPropRequired = &H0001
Const adPropOptional = &H0002
Const adPropRead = &H0200
Const adPropWrite = &H0400

'---- ErrorValueEnum Values ----
Const adErrInvalidArgument = &Hbb9
Const adErrNoCurrentRecord = &Hbcd
Const adErrIllegalOperation = &Hc93
Const adErrInTransaction = &Hcae
Const adErrFeatureNotAvailable = &Hcb3
Const adErrItemNotFound = &Hcc1
Const adErrObjectNotSet = &Hd5c
Const adErrDataConversion = &Hd5d
Const adErrObjectClosed = &He78
Const adErrObjectOpen = &He79
Const adErrProviderNotFound = &He7a
Const adErrBoundToCommand = &He7b

'---- ParameterAttributesEnum Values ----
Const adParamSigned = &H0010
Const adParamNullable = &H0040
Const adParamLong = &H0080

'---- ParameterDirectionEnum Values ----
Const adParamUnknown = &H0000
Const adParamInput = &H0001
Const adParamOutput = &H0002
Const adParamInputOutput = &H0003
Const adParamReturnValue = &H0004

'---- CommandTypeEnum Values ----
Const adCmdUnknown = 0
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004
%>
Saludos!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 13/03/2006, 19:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Cita:
Iniciado por k3n
...La pregunta ha cambiado, entonces. ¿Porqué es que ahora debo usar esos números, y porqué es que me anduvo funcioando sin problemas anteriormente?
¿Porqué nadie más utiliza este tipo de código? Porque como dije, en muchos ejemplos no he visto nada igual.
y otra más, ¿por qué alguien usa on error resume next? :-p

El archivo al que U_G se refiere, lo puedes descargar de la web, y se llama adovbs.inc

¿Porqué es que ahora debo usar esos números?
Por que no has definido las constantes, por ello puedes definirlas individualmente o con el include

¿y porqué es que me anduvo funcioando sin problemas anteriormente?
No creo que te funcionara sin las constates, lo que pasa es que con el on resume next no veías que tronaba

¿Porqué nadie más utiliza este tipo de código? La gran mayoría de los ejemplos que encuentres en este foro, usan los valores numéricos, por que sino, debes de incluir las constantes. Aunque claro, es mucho más claro con constantes ¿no crees?

Última edición por Myakire; 13/03/2006 a las 19:45
  #8 (permalink)  
Antiguo 14/03/2006, 13:20
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 19 años, 2 meses
Puntos: 0
Pues en eso del adovbs puedes tener razón, porque recuerdo haberlo incluído en otro momento. Me pregunto que habrá pasado con él. Eso quiere decie que si lo pongo, no tengo que poner números.
Aquello del "on error resume next" lo puse, porque vi algunos ejemplos que lo incluían. Como ando empezando en esto, pues copio no más, y si funciona no hay problema, y como te dije, sí funcionaba. Usaba el adCmdText en vez del adCmdStoredProc y no tenía problemas. La página hacía las búsquedas necesarias y todo. Por eso era que me extrañaba que dejara de funcionar. Pero bueno, echando a perder se aprende, y bastante.
Y sobre los valores numéricos, pues debo ser un despistado, o he visto otros foros porque, como dije, nunca vi ejemplo con valores numéricos. Supongo que como es usual, siempre falta mucho por aprender, y para eso estamos. Muchas gracias por la ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:36.