FoxPro/Visual FoxPro - Consulta SQL dentro de un ciclo (Do While)

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta SQL dentro de un ciclo (Do While)

Publicado por Plinio (7841 intervenciones) el 19/04/2008 13:28:51
Es que no importa si tienes varios indices, lo que importa es que selecciones el indice, ejemplo en esta parte (Pondre en mayuscula mi psudocodigo)

SELECT tabla_abuscar
SET ORDER TO indice_a_usar

Seek ( fPrograma + fUnidad + fEstado + fAmbito + fMunicip + fPartida )

If !Found()
Append Blank
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar