Hola Atilio:
Con referencia a la instrucción que se ejecute linea por linea en un panel supongo que te referirás a que se ejecute tantas veces como registros tenga el panel y que tendrá que tomar algún/os dato/s de cada linea. También supongo que querrás hacerlo con macros. Hace tiempo que abandoné las macros y ahora mismo no tengo ni idea de como solucionarlo así. Pero si sé cómo resolverlo con lenguaje script.
Los registros que aparecen en un panel, tienen una relación con un registro de otro dbf "principal". Entonces también se pueden seleccionar con un SQL. Y cómo los datos también son accesibles a través de SQL, con un bucle se pueden tratar todos. Básicamente:
Dim QRY As Query
Dim RST As ResultSet
Dim CON As Connection
CD = Chr(34) '----- Comillas dobles
Path = "C:/Carpeta donde está el dbf/" 'Via completa al archivo
File="Archivo.dbf" 'Nombre del dbf"
Set CON = New Connection
Set QRY = New Query
Set RST = New ResultSet
CON.ConnectTo("dBASE IV")
Set QRY.Connection = CON
QRY.TableName = Path + File
Set RST.Query = QRY
La carga de variables con valores del formulario se hace con el método .Text de los campos del formulario:
El nombre de campo está en "nombre de campo" de la pestaña "Macros" del cuadro de propiedades del campo.
"Leer" el contenido de un campo del formulario:
ValorCampo = CurrentView.Body.NOMBREDECAMPO.Text
'--- Seleccionar los regitros
QRY.SQL = "SELECT * FROM " & CD & Table & CD & WHERE condiciones "
Set RST.Query = QRY
RST.Execute
NUMRECORDS = RST.NumRows 'Cuantos registros cumplen las "condiciones"
'Y ahora el bucle
WHILE NOT RST.IsEndOfData ' Hasta el último registro del ResultSet
'Almacena en la variable "VALOR" el contenido de "nombre de campo"
VALOR = RST.GetValue("nombre de campo")
'Cálculos o procesos que tengas que hacer
'Guarda en "nombre de campo" el contenido de VARIABLE
RESULT = RST.SetValue("nombre de campo",VARIABLE)
'Actualiza el registro
RESULT = RST.UpdateRow
IF RESULT <> -1 THEN
'La actualización no ha ido bien
END IF
RST.NextRow 'Siguiente registro
WEND
'Si has modificado datos que aparecen en el panel y quieres que que esas modificaciones se "actualizen" en el formulario (en el .dbf ya están"), se hace con el método Refresh.
CurrentWindow.Refresh 'Equivale a la opcion "Actualizar datos" del menú "Registro"
Creas un botón de "Actualización", por ejemplo, y en el evento "Click" del botón, escribes las instrucciones. Cuando hagas click en el botón, se ejecutarán las instrucciones. Tendrás que modificar las condiciones del SELECT,y los procesos dentro del bucle a tus necesidades. Si hay alguna cosa que no entiendes, me lo comentas. Si no estás familiarizado con ésta programación y se te hace un poco duro, puedo enviarte algún ejemplillo que tengo por ahí.
Un saludo.
Manolo.