Consulta SQL dentro de un ciclo (Do While)
Publicado por Manue Raygoza (5 intervenciones) el 19/04/2008 05:39:46
Hola que tal. Necesito ayuda desesperadamente. Soy nuevo en Visual Fox Pro. Tengo una consulta SQL. Despues asigno un Do While !Eof() Posteriormente un append blank para agregar ciertos registros
Cada registro contiene una clave y en base a esa clave necesito hacer otra consulta, pero al ejecutar el programa me manda un mensaje de error que dice:
"La tabla no contiene ningun orden de indice establecido
Para continuar ejecute la opcion Generacion de Indices contenida en las utilerias del Menu Proceso"
El problema que verifique los indices de la tabla y si los tiene. Al dar clic en las propiedades del indice me aparece lo siguiente referente al indice (en la casilla "espresion":
Str(consecutiv,5)+tipomov+programa+unidad+estado+ambito+partida
Si ejecuto la consulta SQL fuera del ciclo funciona perfectamente pero solo me consulta un registro.
el codigo fuente es el siguiente:
Do While !Eof()
***
If CostoNivel ( VigIni, VigFinAuto, NoPlazas, TipoPlan, Ctabulac.Grupo, 'CAL' ,cestados.impuesto,"cTabulac","cInforma")
Select &pcTabla
**** Actualizar datos por partida
For pnConter = 1 to Alen(Vecpartidas)
fPartida = iif( pnConter = 1 And Ftipo != 'P' , '1103', VecPartidas ( pnConter ) )
Seek ( fPrograma + fUnidad + fEstado + fAmbito + fMunicip + fPartida )
If !Found()
Append Blank
Replace Programa with fPrograma, Unidad with fUnidad , ;
Estado with fEstado , Ambito with fAmbito , ;
Municipio with fMunicip , Partida with fPartida
Endif
Replace Movimiento With Val(fMovim) , ;
Tipomov With fTipoMov , ;
TipoPlan With fTipo , ;
Mes1 With Mes1 + CostoCalendar ( pnConter, 1) , ;
****etc,etc,etc
If val(ftipomov) = 1 Then
Clave = fPrograma + fUnidad + fEstado + fAmbito + fPartida
EndIf
**CREACION
If val(ftipomov) = 2 Then
**Obtiene la Prevision Presupuestal
Store '' To ProgPrevision, UnidPrevision, EdoPrevision, AmbPrevision, PartPrevision
Thisform.PrevisionPresupuestal(fPrograma, fUnidad, @ProgPrevision, @UnidPrevision, @EdoPrevision, @AmbPrevision, @PartPrevision, fPartida)
**Genera Cadena con clave Presupuestal
Clave = ProgPrevision + UnidPrevision + EdoPrevision + AmbPrevision + PartPrevision
EndIf
**********************************************************
**********************************************************
El problema surge en la siguiente consulta:
Select Adetalle.Programa, Adetalle.unidad, Adetalle.Estado, Adetalle.Ambito, Adetalle.partida, ;
sum(Adetalle.Mes1 + Adetalle.Mes2 + Adetalle.Mes3 + Adetalle.Mes4 + Adetalle.Mes5 + Adetalle.Mes6 + Adetalle.Mes7 + Adetalle.Mes8 + Adetalle.Mes9 + Adetalle.Mes10 + Adetalle.Mes11 + Adetalle.Mes12*iif(Adetalle.tipomov='1',-1,1)) as total,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes1*-1,Adetalle.mes1)) as mes1, sum(iif(Adetalle.tipomov='1'or Adetalle.tipomov='3',mes2*-1,mes2)) as mes2,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes3*-1,Adetalle.mes3)) as mes3, sum(iif(Adetalle.tipomov='1',Adetalle.mes4*-1,Adetalle.mes4)) as mes4,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes5*-1,Adetalle.mes5)) as mes5, sum(iif(Adetalle.tipomov='1',Adetalle.mes6*-1,Adetalle.mes6)) as mes6,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes7*-1,Adetalle.mes7)) as mes7, sum(iif(Adetalle.tipomov='1',Adetalle.mes8*-1,Adetalle.mes8)) as mes8,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes9*-1,Adetalle.mes9)) as mes9, sum(iif(Adetalle.tipomov='1',Adetalle.mes10*-1,Adetalle.mes10)) as mes10,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes11*-1,Adetalle.mes11)) as mes11, sum(iif(Adetalle.tipomov='1',Adetalle.mes12*-1,Adetalle.mes12)) as mes12 ;
From Adetalle;
Where !Deleted() And Adetalle.Mes1 + Adetalle.Mes2 + Adetalle.Mes3 + Adetalle.Mes4 + Adetalle.Mes5 + Adetalle.Mes6 + Adetalle.Mes7 + Adetalle.Mes8 + Adetalle.Mes9 + Adetalle.Mes10 + Adetalle.Mes11 + Adetalle.Mes12 > 0 ;
And Adetalle.Programa + Adetalle.unidad + Adetalle.Estado + Adetalle.Ambito + Adetalle.partida = Clave ;
Group by Adetalle.Programa, Adetalle.Unidad, Adetalle.Estado, Adetalle.Ambito, Adetalle.Partida;
Into cursor PartidaDinero
next
En si la consulta funciona correctamente, pero no me funciona dentro del ciclo. La verdad ya me despere. Ayudenme por favor.
Me menciona el error que tiene que ver porque no tiene indices establecidos.
Al obtener la variable Clave necesito compararla en la condicion Where de la consulta. No se que estoy haciendo mal.
Cada registro contiene una clave y en base a esa clave necesito hacer otra consulta, pero al ejecutar el programa me manda un mensaje de error que dice:
"La tabla no contiene ningun orden de indice establecido
Para continuar ejecute la opcion Generacion de Indices contenida en las utilerias del Menu Proceso"
El problema que verifique los indices de la tabla y si los tiene. Al dar clic en las propiedades del indice me aparece lo siguiente referente al indice (en la casilla "espresion":
Str(consecutiv,5)+tipomov+programa+unidad+estado+ambito+partida
Si ejecuto la consulta SQL fuera del ciclo funciona perfectamente pero solo me consulta un registro.
el codigo fuente es el siguiente:
Do While !Eof()
***
If CostoNivel ( VigIni, VigFinAuto, NoPlazas, TipoPlan, Ctabulac.Grupo, 'CAL' ,cestados.impuesto,"cTabulac","cInforma")
Select &pcTabla
**** Actualizar datos por partida
For pnConter = 1 to Alen(Vecpartidas)
fPartida = iif( pnConter = 1 And Ftipo != 'P' , '1103', VecPartidas ( pnConter ) )
Seek ( fPrograma + fUnidad + fEstado + fAmbito + fMunicip + fPartida )
If !Found()
Append Blank
Replace Programa with fPrograma, Unidad with fUnidad , ;
Estado with fEstado , Ambito with fAmbito , ;
Municipio with fMunicip , Partida with fPartida
Endif
Replace Movimiento With Val(fMovim) , ;
Tipomov With fTipoMov , ;
TipoPlan With fTipo , ;
Mes1 With Mes1 + CostoCalendar ( pnConter, 1) , ;
****etc,etc,etc
If val(ftipomov) = 1 Then
Clave = fPrograma + fUnidad + fEstado + fAmbito + fPartida
EndIf
**CREACION
If val(ftipomov) = 2 Then
**Obtiene la Prevision Presupuestal
Store '' To ProgPrevision, UnidPrevision, EdoPrevision, AmbPrevision, PartPrevision
Thisform.PrevisionPresupuestal(fPrograma, fUnidad, @ProgPrevision, @UnidPrevision, @EdoPrevision, @AmbPrevision, @PartPrevision, fPartida)
**Genera Cadena con clave Presupuestal
Clave = ProgPrevision + UnidPrevision + EdoPrevision + AmbPrevision + PartPrevision
EndIf
**********************************************************
**********************************************************
El problema surge en la siguiente consulta:
Select Adetalle.Programa, Adetalle.unidad, Adetalle.Estado, Adetalle.Ambito, Adetalle.partida, ;
sum(Adetalle.Mes1 + Adetalle.Mes2 + Adetalle.Mes3 + Adetalle.Mes4 + Adetalle.Mes5 + Adetalle.Mes6 + Adetalle.Mes7 + Adetalle.Mes8 + Adetalle.Mes9 + Adetalle.Mes10 + Adetalle.Mes11 + Adetalle.Mes12*iif(Adetalle.tipomov='1',-1,1)) as total,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes1*-1,Adetalle.mes1)) as mes1, sum(iif(Adetalle.tipomov='1'or Adetalle.tipomov='3',mes2*-1,mes2)) as mes2,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes3*-1,Adetalle.mes3)) as mes3, sum(iif(Adetalle.tipomov='1',Adetalle.mes4*-1,Adetalle.mes4)) as mes4,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes5*-1,Adetalle.mes5)) as mes5, sum(iif(Adetalle.tipomov='1',Adetalle.mes6*-1,Adetalle.mes6)) as mes6,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes7*-1,Adetalle.mes7)) as mes7, sum(iif(Adetalle.tipomov='1',Adetalle.mes8*-1,Adetalle.mes8)) as mes8,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes9*-1,Adetalle.mes9)) as mes9, sum(iif(Adetalle.tipomov='1',Adetalle.mes10*-1,Adetalle.mes10)) as mes10,;
sum(iif(Adetalle.tipomov='1',Adetalle.mes11*-1,Adetalle.mes11)) as mes11, sum(iif(Adetalle.tipomov='1',Adetalle.mes12*-1,Adetalle.mes12)) as mes12 ;
From Adetalle;
Where !Deleted() And Adetalle.Mes1 + Adetalle.Mes2 + Adetalle.Mes3 + Adetalle.Mes4 + Adetalle.Mes5 + Adetalle.Mes6 + Adetalle.Mes7 + Adetalle.Mes8 + Adetalle.Mes9 + Adetalle.Mes10 + Adetalle.Mes11 + Adetalle.Mes12 > 0 ;
And Adetalle.Programa + Adetalle.unidad + Adetalle.Estado + Adetalle.Ambito + Adetalle.partida = Clave ;
Group by Adetalle.Programa, Adetalle.Unidad, Adetalle.Estado, Adetalle.Ambito, Adetalle.Partida;
Into cursor PartidaDinero
next
En si la consulta funciona correctamente, pero no me funciona dentro del ciclo. La verdad ya me despere. Ayudenme por favor.
Me menciona el error que tiene que ver porque no tiene indices establecidos.
Al obtener la variable Clave necesito compararla en la condicion Where de la consulta. No se que estoy haciendo mal.
Valora esta pregunta


0