Problema al transferir registros de una tabla temporal a un base de datos

hola amigos de todo expertos tengo una base de datos salarios con un campo clave que contiene varios registros cuando hago el filtrado para hacer la la búsqueda de los registros según el campo clave solo me muestra un registro en mi base de datos tempo que trabaja con un GRID ya que ese campo clave contiene varios registros.
select idservicio,descrip,cantidad,precio,monto, recno() as puntero from salarios where ; salarios.idcliente == sqlclientes.idcliente order by descrip into cursor sqlsalarios;
replace tempo.idservicio with sqlsalarios.idservicio replace tempo.descrip with sqlsalarios.descrip replace tempo.cantidad with sqlsalarios.cantidad replace tempo.precio with sqlsalarios.precio replace tempo.monto with sqlsalarios.monto
que puedo hacer para que me salgan los registros de ese campo clave ayuda por favor

1 Respuesta

Respuesta
1

Espero poder ayudarte! Gracias por consultar. Proba así:

select idservicio,descrip,cantidad,precio,monto, recno() as puntero from
salarios where ; salarios.idcliente = sqlclientes.idcliente order by
descrip into cursor sqlsalarios

**--Trasnferimos los datos del cursor sqlsalarios a TEMPO

SELECT sqlSalarios

GO TOP

**Scaneamos el cursor apra ir transfiriendo los datos

SCAN

replace tempo.idservicio with sqlsalarios.idservicio

replace tempo.descrip with sqlsalarios.descrip

replace tempo.cantidad with sqlsalarios.cantidad

replace tempo.precio with sqlsalarios.precio
replace tempo.monto with sqlsalarios.monto

END SCAN

**--

Proba y me avisas! :)

gracias amigo te todo experto hice lo que me indicaste pero solo me transmite el primer registro de la condición ya que la condición tiene varios registros que puedo hacer para que me remplace todos los registros que cumplan con la condición... gracias por tu apoyo

Disculpa la demora! :/ ¿Qué condición es esa de la que me hablas? ¿Oo? Explicame un poco para poder ayudarte mejor!

select idservicio,descrip,cantidad,precio,monto, recno() as puntero from salarios where ; salarios.idcliente == sqlclientes.idcliente order by descrip into cursor sqlsalarios;

la condición es la siguiente:

(salarios.idcliente == sqlclientes.idcliente)

te explico salarios.idcliente es un campo indice que contiene los servicios que se va prestar al cliente por ejemplo

idcliente idservicio descrip cantidad precio monto

01 02 llenado de libros contables 10 50.00 500.00

01 03 servicio de copias 120 0.10 12.00

01 05 asesoramiento tributario 3 200.00 600.00

donde al seleccionar el cliente 01 me tiene que aparecer los servicios que se le presta en un control grid que esta enlazado con una basa de datos tempo.

cuando hice lo que me indicaste solo me muestra el primer registro (llenado de libros contables).

cuando enlazo el control grid a una tabla temporal SQL me muestra todo los registros pero mi problema es que no se como agregar nuevos servicios, modificarlos o eliminarlos o en todo caso como agrego datos a una tabla temporal SQL y como modifico o elimino y guardo los datos ingresados. bueno ojala me ayas entendido... estoy plantado en este dilema.. gracias espero tu pronta respuesta

"pero mi problema es que no se como agregar nuevos servicios,
modificarlos o eliminarlos o en todo caso como agrego datos a una tabla
temporal SQL"

Aquí distes en un clavo! :D EL cursor que tu generas es en base a la consulta Select... INTO CURSOR ... este cursor es de lectura unicamente. No podes modificar sus datos. Coloca después del nombre del cursor ReadWrite y ya sera de modificación. Yo te recomiendo mejor que uses un cursor temporal pero con las mimas condiciones de una tabla .dbf! Con el comando CREATE CURSOR y luego lo cargas con los datos... ahí podrás tratar tus registros como si estuvieras en una tabla física (.dbf).

Ahora... que tal así:

select idservicio,descrip,cantidad,precio,monto from
salarios where ; salarios.idcliente = sqlclientes.idcliente order by
descrip into cursor sqlsalarios

Luego, scaneas el cursor temporal y por cada registro que se vaya "leyendo" vas guardándolo en simultaneo en tu talbla con replace, así:

**--Trasnferimos los datos del cursor sqlsalarios a TEMPO
SELECT sqlSalarios
GO TOP
**Scaneamos el cursor apra ir transfiriendo los datos
SCAN
replace tempo.idservicio with sqlsalarios.idservicio
replace tempo.descrip with sqlsalarios.descrip
replace tempo.cantidad with sqlsalarios.cantidad
replace tempo.precio with sqlsalarios.precio
replace tempo.monto with sqlsalarios.monto
END SCAN
**--

Debería funcionar. Proba, y si no, buscamos mas soluciones! No te preocupes! Puede parecer difícil, pero con el zorro todo es posible!

A tus ordeners, Ravenn! :D :D

gracias por tu interés ravenn pero sigo con lo mismo solo me muestra un registro no se que otra solución lo puedes encontrar a esto la idea es que cuando selecciono al cliente cargue los servicios y pueda modificar eliminar y agregar servicios, me dices que trabaje con CREATE CURSOR como se trabaja con este comando.... gracias nuevamente

¿De dónde sale sqlclientes? ¿Oo? ¿Es un cursor o una tabla?

sqlclientes es un cursor que esta asociado a una tabla clientes

Aquí esta. Lo que pasa es que cuando cargas el cursor sqlsalarios, extraes los datos de la tabla salarios que sean iguales (respecto al campo idcliente) a los contenidos en el cursor sqlclientes y aquí esta el problema. El cursor sqlclientes puede tener muchos registros... pero cuando ordenas la consulta, le decís que extraiga los que son iguales en el campo idclientes. ¿Por qué extrae solo 1? Por que el puntero de registro del cursor sql no se desplaza a todos los registros. Te explico. Por ejemplo si yo deseo sacar de la tabla salarios, todos aquellos registros cuyo idcliente sea = 10, entonces hago así

WHERE salarios.idcliente = 10 INTO CURSOR sqlsalarios

Y ahí me carga todos los registros cuyo campo idcliente es igual a 10. Pero tu le dices:

where salarios.idcliente = sqlclientes.idcliente

El puntero en el cursor sqlclientes esta en el primer registro. Y si ese registro tiene como idcliente 1 y es el único registro con ese idcliente (imagino que es así), al comparar con la tabla salarios, solo va a "jalar" ese dato a la consulta. ¿Por qué? Porque estas comparando el id de la tabla salarios SOLO CON EL 1ER REGISTRO DEL CURSOR sqlsalarios. ¿Me comprendes? LO que podes hacer es escanear el cursor sqlsalarios o la tabla salarios y por cada coincidencia, ir cargando un cursor con los datos.

Para crear un cursor temporal, ve al init() de tu form y pone un código como este:

**Nombras el cursor y seguidamente los campos.

**Si es numérico, antepones una N y () la extensión (width) del campo. SI es carácter C

**Si es fecha D(8)

CREATE CURSOR sqlsalarios(idcliente N(12), nombrecliente C(50))

Y luego lo puedes usar tal cual una tabla. Es de tipo lectura y escritura (modificable)

Avisame cualquier cosa! Aquí estoy para colaborar!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas