FoxPro/Visual FoxPro - Tablas grandes con SQL

 
Vista:

Tablas grandes con SQL

Publicado por Alejo (3 intervenciones) el 19/01/2007 12:58:10
Hola a todos

Soy bastante nuevo con Fox y tengo un problema con tablas grandes en SQL.
Necesito abrirlas y modificarlas sin filtrarlas via Where.

He utilizado CursorAdapters - Vistas remotas y algunas pruebas con Pass-Through

Alguien sabe como obtener un cursor FOX modificable contra SQLServer de una tabla grande (500000 registros aprox) y que no tarde la apertura ?
No me importa la tecnologia a usar (cualquiera de las 3 que mencioné anteriormente está bien)

Algunas pruebas que ya he hecho las cuento a continuación

1) CURSOR ADAPTER
En el caso de cursor adapters
Necesito saber como hacer para que funcione la propiedad FetchAsNeeded

Parametrizo el recordset (loRS) de modo que el cursor sea en el Servidor y dinámico

loRS.CursorType = 2 && adOpenDynamic
loRS.CursorLocation = 2 && adUseServer

MiCursorAdapter.FetchAsNeeded = .T.
MiCursorAdapter.DataSource = loRS

El problema es que cuando ejecuto

MiCursorAdapter.CursorFill()

Se trae todos los registros !!!!! (me pregunto ¿ para que sirve la propiedad FeetchAsNeeded ?)

Esto es así ? (pareciera que el cursor fuera adUseClient adOpenStatic)

¿ Se puede lograr que los registros se traigan a medida que se necesitan usando ADO ? (esto es, FetchasNeeded = .T.)
Esto lo he resuelto en otro lenguaje y Recodsets de ADO pero no puedo con Cursoradapters
Fox exije (al menos eso creo) que los recordsets soporten bookmarks, pero esto hace lenta la apertura de una tabla grande, ya sea utilizando cursores en el servidor o en el cliente.

2) VISTAS REMOTAS
Para el caso de vistas remotas me he topado con el problema de "connection busy" que tanto figura en los foros
Lo cierto es que con vistas remotas, no puedo poner

DBSetProp('Ventas','View','FetchSize',100)
DBSetProp('Ventas','View','FetchAsNeeded',.T.)
DBSetProp('Ventas','View','SendUpdates',.T.)
DBSetProp('Ventas','View','MaxRecords',-1)

Esto da Connection Busy, a menos que ponga MaxRecords < FetchSize (lo cual no me sirve, justamente, quiero que los fetch, sean "AsNeeded")

Muchas gracias
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:Tablas grandes con SQL

Publicado por Antonio R. Moquete Mejia (207 intervenciones) el 19/01/2007 15:07:55
Saludos,

Alejo, mira yo utilizo vistas remotas, con mas registros que los que mencionas, y me funciona perfectamente, pero con las opcion de que cuando estoy creando la vista para actualizar algun registo hago lo siguiente.

Creo la vista, y en la opcion de filtro de esta pongo el o los campos por donde quiero Filtrar.


Por Ej. codigo en el filtro le pngo ?codigo

si queires filtar con mas campos puedes ponerlos

Codigo ?V_codigo
and
Fecha ?V_fecha
and
status ?V_status

Entonces antes de seleccionar la vista tienes que declarar publicas las variames que enviaras a la vista, y le pasas los valores a estas variables y luego le das select a la vista y ya esta.

Public V_codigo, V_fecha, V_status

store (ThisForm.text1.Value) to V_codigo
store DtoC(ThisForm.text2.value) to V_fecha
store (Thisform.text3.value) to V_status

Select Vistaviwer1
Requery()
brows

Si queires actualizar algo tienes primero que darle

=Tableupdate(.T.)
y luego Requery()

Trata de hacerlo y veras que si funciona.

Puedes crearte diferentes vistas con diferentes filtros para una sola tabla en sql.

att.
Antonio R. Moquete Mejia
Santo Domingo, Republica Dominicana (E P D M)
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

RE:Tablas grandes con SQL

Publicado por Alejo (3 intervenciones) el 21/01/2007 13:23:50
Gracias Antonio por tu respuesta.

Pero nos es lo que ando necesitando. Quizás expresé mal mi duda, pero como tengo mucho código para modificar, no quiero aplicar ningún tipo de filtro, ya sea vía where o parámetro. El problema radica en que el software a migrar es bastante grande y hoy está funcionando contra una base Fox.
Este trabajo ya lo he hecho con éxito utilizando ADO y Delphi.

Pero me he encontrado conque FoxPro exige bookmarks a los recordsets para que sus cursores sean modificables. Esto desde Delphi no es necesario. La exigencia de bookmarks hace inusable el soft cuando las tablas superan los 5000 - 10000 registros dependiendo de las circunstancias.

He intentado con cursoradapters ya que estos me daban control sobre el recordset, pero no ha funcionado por lo expuesto anteriormente.

Con vistas remotas me he chocado con otros inconvenientes (conexión ocupada).

Cabe aclarar que no soy bastante nuevo con el Fox y por eso recurro a estos medios.

Bueno, seguiré buscando en los foros ya que me resisto a pensar que FoxPro tenga semejante limitación.

Muchas gracias

Alejo
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