Sv Community El Salvador
Soporte y Tecnología => Programación => FOX => Mensaje iniciado por: gilanrodas en mayo 24, 2008, 10:30:21 am
-
¿Porque cuando declaro una variable en Visual Fox me devuelve un resultado lógico? Por ejemplo:
Local mivariable as string
mivariable = this.parent.combo1.value
En tal caso asumo que me tiene que devolver el valor del combobox pero me devuelve .F.
Ya lo comprobé con un
MESSAGEBOX(mivariable)
¿A qué se debe esto? ¿Qué hago para que me devuelva el valor en string?
¡Muchas gracias!
-
prueba lo siguiente.
esto aplica si estas dentro del combo de lo contrario ocupa THISFORM
1.
mivariable=this.combo1.value
2. quita la declaración (string) y prueba lo anterior.
cualquier cosa aquí estamos ..
-
Pues, ahora no me da ningún error, pero me retorna un valor en blanco, osea nada. Por ejemplo si le pongo que me lo muestre en el messagebox, sólo me aparece el cuadro con el botón aceptar sin el valor de la variable.
-
no es necesario declarar ninguna variable podes usar directamente el combo
asi:
messagebox(thisform.combo1.value)
o con variable local asi:
mivariable=Thisform.combo1.value
messagebox(mivariable)
Tip: agregale siempre el "Alltrim"
alltrim(Thisform.combo1.value)
Nota: el this.parent es cuando tenes los controles dentro de un Contenedor quizas alli sea tu problema
-
GilanRodas resolviste finalmente tu problema?
-
Jeje, sí, muchas gracias. Problema resuelto.
Ahora, mil disculpas porque soy nuevo trabajando con Fox, de hecho, sólo llevo una semana y me ha tocado hacer todo un programa.
Otra cosa con la que tengo problema. Tengo un grid que quiero llenarlo con los datos de una tabla pero donde el campo cod_cel de la tabla sea igual a thisform.txtcodcel. ¿Alguien me puede decir cómo se hace esto?
-
Puedes hacer dos cosas, o filtrar o crear un select
si es un select
thisform.grid.recordsource = ''
select 0
select * from mytabla where cod_cel = thisform.txtcodcel.value into cursor mycursor
thisform.grid.recordsource = "mycursor"
thisform.grid.refresh
si es con algun filtro
digamos q ya tienes asignado tu tabla al grid entonces solo le das
select mytabla
set filter to cod_cel = thisform.txtcodcel.value
thisform.grid.refresh
Mas o menos asi andaria la situacion ahi tienes q adaptarla a tu caso particular.
-
El último código, el del filtro, ¿se lo escribo al grid en sí, a algún botón, al formulario o adónde?
Fijate que el select mytable y el set filter lo puse en la propiedad init del grid y el thisform.refresh.grid lo puse en los botones anterior, siguiente, etc, que me sirven para moverme (y mostrarme) entre los registros de la otra tabla que maneja los códigos y datos principales.
¿Está bien hecho esto o pude haberme ahorrado código?
Osea, es que tengo el formulario de los datos generales y abajo el grid de datos de asistencia correspondiente al código del formulario.
No sé si me doy a entender.
-
El último código, el del filtro, ¿se lo escribo al grid en sí, a algún botón, al formulario o adónde?
Fijate que el select mytable y el set filter lo puse en la propiedad init del grid y el thisform.refresh.grid lo puse en los botones anterior, siguiente, etc, que me sirven para moverme (y mostrarme) entre los registros de la otra tabla que maneja los códigos y datos principales.
¿Está bien hecho esto o pude haberme ahorrado código?
Osea, es que tengo el formulario de los datos generales y abajo el grid de datos de asistencia correspondiente al código del formulario.
No sé si me doy a entender.
Me parece bien como los has echo como te digo ahi seria ya de ver como se comporta el formulario....
el filtro puede estar donde aplique en el valid del objeto thisform.txtcodcel.value o el algun boton...
Espero te funcione si no....talvez puedas subir tu proyecto a algun lugar para poder ver los formularios y ayudar ya asi de primera mano.
-
¿Qué significa que me salga un mensaje con un error que dice ""Error al cargar el archivo - número de registro 9. FormControlCelular <o uno de sus miembros>. Cargando el formulario o el entorno de datos.: THISFORM sólo puede usarse en un método."
-
Seguramente es codigo q tienes en el init del grid...
prueba comentariando esa parte del codigo..si funciona bien....
significa q para ese momento aun no sea creado el objeto al q hace referencia el grid.
Para solucionar esto...traslada dicho codigo al INIT del formulario.
-
Este es el código que tengo en el init del grid:
SELECT asistencia
SET FILTER TO cod_cel=thisform.txtcodcel.Value
¿No tendré problema si lo traslado al init del formulario? Osea, quiero aplicar el filtro al grid
-
Este es el código que tengo en el init del grid:
SELECT asistencia
SET FILTER TO cod_cel=thisform.txtcodcel.Value
¿No tendré problema si lo traslado al init del formulario? Osea, quiero aplicar el filtro al grid
Tal y como te dije el error radica en q cuando se esta creando el objeto grid (init) aun no se ha creado el objeto thisform.txtcodvel...entonces no lo encuentra...
porque en fox...un formulario se crea de adentro hacia afuera (primero sus objetos inferiores hasta llegar a los superiores ..formulario principal)
Con q lo pases al init del formulario no deberia de darte ningun problema..el cambio deberia ser transparente..
-
¿Cómo hago para que al dar clic sobre un item "Agregar nuevo" dentro de un combobox me abra un cuadro o ventana para agregar los detalles para ese nuevo item?
-
¿Cómo hago para que al dar clic sobre un item "Agregar nuevo" dentro de un combobox me abra un cuadro o ventana para agregar los detalles para ese nuevo item?
No se si entendi bien...pero
en el evento click de ese combobox, colocas tu codigo...
supongo q tienes un formulario para agregar detalles de ese items?
o si no le puedes dar un simple browse y ahi q coloquen los datos...pero te sugiero mejor un formulario..
-
No se si entendi bien...pero
en el evento click de ese combobox, colocas tu codigo...
supongo q tienes un formulario para agregar detalles de ese items?
o si no le puedes dar un simple browse y ahi q coloquen los datos...pero te sugiero mejor un formulario..
¿Osea que el evento click se ejecuta cuando le das clic a algún ítem? Es que en la lista de ítems me muestra los nombres y códigos de distintos coordinadores, pero al final he colocado un ítem "Nuevo Coordinador" y lo que quiero es que, al darle click o seleccionar esa opción me abra un nuevo formulario (como un cuadro de diálogo) que me permita ingresar los datos de este nuevo coordinador, y después de agregarlo a la BD me sería mostrado en al final del combobox antes de la opción "Nuevo Coordinador" sin salirme del formulario principal.
-
asi es...
en el click tu coloca una condicion
if this.value = 'Nuevo Coodirnador'
do form detalles
endif
a lo q me refiero es q identifiques q el q esta seleccionado es el items : Nuevo Coordinador porqeu cuando sea asi tiene q mostrar el formulario...caso contrario no mostrar nada.
-
Básicamente ya está terminado el programita este, al menos, lo que precisa por el momento.
Lo que quiero saber ahora es cómo le indico al formulario que cuando se abra, se muestre en el centro de la pantalla y, además, cómo le indico a un formulario lo que en Visual Basic se conoce como MDIparent por ejemplo. Es que quiero que cuando el formulario1 llame al formulario2, el formulario1 quede enabled=.F. y cuando se cierre el formulario2 vuelva nuevamente enabled=.t.
-
Básicamente ya está terminado el programita este, al menos, lo que precisa por el momento.
Lo que quiero saber ahora es cómo le indico al formulario que cuando se abra, se muestre en el centro de la pantalla y, además, cómo le indico a un formulario lo que en Visual Basic se conoce como MDIparent por ejemplo. Es que quiero que cuando el formulario1 llame al formulario2, el formulario1 quede enabled=.F. y cuando se cierre el formulario2 vuelva nuevamente enabled=.t.
para que te lo cnetre pone verdadero el valor de la propiedad autocenter
para lo segundo en vez de utilizar habilitar desabilitar los formularios podrias
thisform.Hide
do from formulario2
thisform.show
simpre pero tienes que poner la propiedad windows type en modal para y listo..
-
Básicamente ya está terminado el programita este, al menos, lo que precisa por el momento.
Lo que quiero saber ahora es cómo le indico al formulario que cuando se abra, se muestre en el centro de la pantalla y, además, cómo le indico a un formulario lo que en Visual Basic se conoce como MDIparent por ejemplo. Es que quiero que cuando el formulario1 llame al formulario2, el formulario1 quede enabled=.F. y cuando se cierre el formulario2 vuelva nuevamente enabled=.t.
Para colocar al centro...coloca la propiedad del formulario : AutoCenter = .t.
podrias colocar la propiedad windows type = 0 (Modal) del formulario 2
-
Muchas gracias a los dos, eso quería lograr... pero cómo puedo hacer para darle un refresh al combo del formulario1 desde el formulario2 porque en éste último agrego un nuevo registro a una tabla, el cual debe ser mostrado en el combo del formulario1
-
alli seria de la siguiente forma
formulario1.refresh (para que salga mas facil =) )
o sino:
formulario1.combo1.refresh
OJO. tendrian que estar los dos formularios cargados para que funcione de esa forma :mosh:
-
He creado un informe en cuyo entorno de datos están las tablas celula y la tabla coordinador. Hay un campo en el informe en el que se tiene que mostrar el nombre y apellido del coordinador concatenados, pero en la tabla celula sólo tengo el campo código, mientras que en la tabla coordinador tengo los campos código, nombre y apellido. ¿Cómo hago para hacer la validación que me ingrese el nombre y apellido del coordinador cuyo codigo es igual al código de la tabla celula si al hacer informes no me permite usar el "select"? O si me pueden decir cómo funciona el where en la creación de informes me serviría mucho. ¡Gracias!
-
He creado un informe en cuyo entorno de datos están las tablas celula y la tabla coordinador. Hay un campo en el informe en el que se tiene que mostrar el nombre y apellido del coordinador concatenados, pero en la tabla celula sólo tengo el campo código, mientras que en la tabla coordinador tengo los campos código, nombre y apellido. ¿Cómo hago para hacer la validación que me ingrese el nombre y apellido del coordinador cuyo codigo es igual al código de la tabla celula si al hacer informes no me permite usar el "select"? O si me pueden decir cómo funciona el where en la creación de informes me serviría mucho. ¡Gracias!
Y porque no haces el select antes de llamar a tu reporte....y asi tu reporte q apunte a un cursor q seria el resultado de tu select.
-
Y porque no haces el select antes de llamar a tu reporte....y asi tu reporte q apunte a un cursor q seria el resultado de tu select.
El problema es que ahorita necesito incluso imprimir el informe sin llamarlo desde un formulario, osea, sólo trabajando el reporte y la base de datos nada más. ¿No se podría hacer una especie de select... where... en el campo del reporte?
-
El problema es que ahorita necesito incluso imprimir el informe sin llamarlo desde un formulario, osea, sólo trabajando el reporte y la base de datos nada más. ¿No se podría hacer una especie de select... where... en el campo del reporte?
entonces...
en el entorno de datos del reporte crea la relacion entre las dos tablas
ya con eso deberia de bastar para hacer lo q necesitas..
-
Hey, mara, tengo un formulario y un botón a través de los que unos datos son seleccionados y mostrados en un grid, pero el problema es que cuando presiono el botón, el espacio del grid se me pone totalmente en blanco y me muestra los datos del cursor hasta que cierro la ventanita y la vuelvo a abrir. No me funciona poner un refresh ni nada porque ya me muestra los datos que quiero, pero no al momento de dar clic en el botón sino hasta que cierro y ejecuto la aplicación otravés. ¿A qué se debe? ¿Qué me falta o qué estoy haciendo mal?
-
Hey, mara, tengo un formulario y un botón a través de los que unos datos son seleccionados y mostrados en un grid, pero el problema es que cuando presiono el botón, el espacio del grid se me pone totalmente en blanco y me muestra los datos del cursor hasta que cierro la ventanita y la vuelvo a abrir. No me funciona poner un refresh ni nada porque ya me muestra los datos que quiero, pero no al momento de dar clic en el botón sino hasta que cierro y ejecuto la aplicación otravés. ¿A qué se debe? ¿Qué me falta o qué estoy haciendo mal?
para este caso tiens que hacer algo antes de
al principio de la aplicacion tienes que hacer esto
por poner un ejemplo
thisform.grid1.RecordSource = ''
luegos haces el select o todas las operaciones que necesites hacer
una ves terminado los procesos
nuevemente pones esto
thisform.grid1.RecordSource = 'nombre_tabla_o_cursor'
thisform.grid1.refresh
y listo
-
¡Muchas gracias! Ese problema con el grid ha sido resuelto. Ahora hay otras dos cositas que quiero preguntarles.
Primero:
Tengo el código a continuación en un botón Eliminar, pero no sé cómo aplicar el pack para que me elimine los registros que son marcados con el Delete From, ya que cuando lo escribo como está en el código me dice que la tabla debe ser abierta en modo exclusivo y necesito que el registro se borre de una vez después de marcarlo, aunque si se pudiera eliminar de un sólo sin ser marcado sería mejor.
DO CASE
CASE thisform.btneliminar_cancel.Caption="Eliminar"
nAnswer = MESSAGEBOX("¿Seguro que desea eliminar este registro?",4+32,'Eliminar registro')
IF nAnswer=6
DELETE FROM celula WHERE cod_cel=thisform.txtcodcel.Value
PACK
ENDIF
ENDCASE
thisform.datosCelula.Init
thisform.grdasis.Refresh
Segundo:
Tengo un form1 con un botón Buscar que me abre un form2 para hacer una búsqueda de registros ya sea por código, por nombre, por dirección, teléfono, etc. Mientras la búsqueda no se haga por el campo clave me resultarán varios registros, los cuales se me muestran en éste form2 a través de un grid. ¿Cómo hago para que, a través de un botón, pueda referirme a un registro seleccionado por clic en el grid y lo muestre en los textboxes y comboboxes del form1?
-
1 - porque necesitas q se vaya borrando de inmediato?
para q no te aparezcan los marcados coloca set delete on
y finalmente deberias de hacer un formulario de mantenimiento, q se encargara de hacerle pack a todas las tablas pero se le da una advertencia al usuario q este proceso es delicado q todos tienen q estar fuera del sistema, pero q se encarga de optimizar bla bla bla.. eso seria mi recomendacion...
2 - desde el form1 uno coloca
do form form2 to xcodigo
luego aca haces una rutina para buscar el codigo tomando como criterio xcodigo
en el form 2 en el upload le das
Return codigo (en donde codigo es el codigo del registro nose como se llama tu campo pero esa es la idea)
esto es por si no comparte en el entorno de datos.
si comparten el entorno de datos no tendrias q hacer nada con solo q se mueva el registro en el form2, se movera y actualizara en el form1
l
-
Si entiendo bien, la búsqueda la estoy haciendo por el código que aparece en el form1, pero la situación es que la búsqueda la tengo que hacer por cualquiera de los campos del grid del form2 y mandar los datos de la fila que seleccione en el grid a los espacios en el form1. No sé si en este caso se puede usar el ActiveRow o Recno.
A continuación las capturas de los formularios:
(http://www.geocities.com/gilanrodas/formcontrolcelular.jpg)
(http://www.geocities.com/gilanrodas/formbuscar.jpg)
En este último formulario, en el combobox, se escoge si se quiere buscar por código, día, etc..., y lo que quiero es que al darle clic en el botón Seleccionar me envíe los datos de la fila marcada al formulario Control Celular.
-
seria de la misma forma como se te ejemplifico anteriormente:
formulario1.control.valor=formulario2.control.valor
otra forma es usando variables publicas, pero eso te consumiria recursos en memoria.
-
seria de la misma forma como se te ejemplifico anteriormente:
formulario1.control.valor=formulario2.control.valor
otra forma es usando variables publicas, pero eso te consumiria recursos en memoria.
Ahora entiendo mejor, pero necesito referirme al código de un registro que esté seleccionado por clic en el grid, ya que en el textbox puede que se haya especificado un valor que no sea llave primaria; quizá algo así como:
formulario1.txtcodcel.value=formulario2.grid1.<comando_que_se_refiera_a_la_fila_seleccionada>.column1.value
No sé si hay algún comando que sirva para hacer referencia a la fila seleccionada o cuál sería la sintaxis correcta.
-
te entiendo lo siguiente:
estas en el grill y queres que lo que seleccionas sea el dato que aparezca en el formulario uno.
en ese caso basta con poner lo siguiente en el evento que creas conveniente:
formulariouno.control.valor=This.value
This.value funciona si estas en un evento correspondiente a un control y hace referencia a ese control =)
-
¿Cómo puedo hacer para crear una tabla mediante código en un directorio específico?
Cuando escribo create table... me la crea en "Mis documentos\Proyectos de Visual Fox" y yo quiero que me la cree en "Mis documentos\Proyectos de Visual Fox\Otra carpeta".
¿Cómo le especifico a Visual Fox el directorio en el que quiero que me cree la tabla?
-
create table 'C:/mytabla.dbf' (etc)
-
es muy sencillo solo pon el nombre de la taba con todo y la path donde quieres que se cree como
asi:
create table 'c:\documentos\Proyectos de Visual Fox\Otra carpeta\tabla.dbf' (Campo1 tipo1,campo2 tipo 2, etc...)
-
Tengo el siguiente pedazo de código, pero no entiendo por qué al ejecutarlo, la comparación del if me la hace sólo una vez. Ya lo intenté con un Do Case y también cuando hago eso sólo los ejecuta una vez y aplica ese mismo resultado para todos los demás registros de la tabla sin evaluar cada uno de ellos.
SELECT tblasist
SCAN
IF imp_cel="Sí" then
UPDATE tblasist SET num_imp = 1
MESSAGEBOX("a")
ELSE
IF imp_cel="sí" then
UPDATE tblasist SET num_imp = 1
MESSAGEBOX("b")
ELSE
IF imp_cel="No" then
UPDATE tblasist SET num_noimp = 1
MESSAGEBOX("c")
ELSE
IF imp_cel="no" then
UPDATE tblasist SET num_noimp = 1
MESSAGEBOX("d")
ENDIF
ENDIF
ENDIF
ENDIF
MESSAGEBOX(imp_cel)
ENDSCAN
Nota: imp_cel, num_imp y num_noimp son campos de la tabla tblasist
¡Muchas gracias por su ayuda!
-
El problema es que cuando usas el UPDATE como no le has puedo ninguna condicien el el WHERE entonces el lo replaza todo y en la primera iteraccion del scan despues de haber realizado el UPDATE el cursor queda al final y se sale del scan por eso te pasa eso prueba con esto y veremos....
Select tblasist
Go Top
SCAN
If imp_cel="Sí" Then
*Update tblasist Set num_imp = 1
REPLACE num_imp with 1
Messagebox("a")
Else
If imp_cel="sí" Then
*Update tblasist Set num_imp = 1
REPLACE num_imp with 1
Messagebox("b")
Else
If imp_cel="No" Then
*Update tblasist Set num_noimp = 1
REPLACE num_imp with 1
Messagebox("c")
Else
If imp_cel="no" Then
*Update tblasist Set num_noimp = 1
REPLACE num_imp with 1
Messagebox("d")
Endif
Endif
Endif
ENDIF
Messagebox(imp_cel)
Endscan
-
Tengo la siguiente sintaxis:
SELECT COUNT(imp_cel) FROM asistencia WHERE UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit
y quiero almacenar el valor resultante en una variable. ¿Cómo hago eso?
-
SELECT COUNT(imp_cel) as resultado FROM asistencia WHERE UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit;
INTO CURSOR mycursor
Select Mycursor
go top
myvariable = mycursor.resultado
-
Tengo la siguiente sintaxis:
SELECT COUNT(imp_cel) FROM asistencia WHERE UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit
y quiero almacenar el valor resultante en una variable. ¿Cómo hago eso?
sencillo
SELECT COUNT(imp_cel) as variable FROM asistencia WHERE UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit;
INTO CURSOR 'tmp_resultado'
if _tally > 0
go top
x_variable = tmp_resultado.variable
endif
y listo...
-
Jeje, muchas gracias. Me funcionó a la perfección. Estaba bien fácil, no sé cómo no se me ocurrió :embarassed:
¿Será que alguien me puede explicar lo siguiente?:
Al escribir la siguiente sintaxis no me devuelve registros y, si me muestra algo, me los devuelve nulos, pero cuando le quito el where me los muestra bien. Ahora, todos los campos a excepción de los campos por los que hago la comparación con el where (cod_cel y no_distrit), son INT o DOUBLE.
cod_cel y no_distrit son de tipo char
SELECT cod_cel, asist_adult, asist_niños, visitas, convertidos, ofrenda FROM asistencia WHERE SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit
Otra cosa, ¿puedo tener dos SCAN anidados? Por ejemplo:
Select Tabla1
SCAN
select Tabla2
SCAN
<Operaciones>
ENDSCAN
ENDSCAN
-
imagino q TblGeneral es una tabla
mejor ese valor asignaselo a una variable
Myvariable = TblGeneral.no_distrit
y el where te qeudaria asi :
where substr(asistencia.cod_cel,1,2) = Myvariable
Y con los scan aninados si se puede, pero procura no pasarte de 3, ya q si te pasas de 3 posiblemente haya otra forma de hacerlo (otra logica)
-
¡Gracias RgGuillen! Otra cosa, tengo en un formulario un cuadro de texto para una fecha que debe ingresar el usuario. El tipo de dato en la BD es DATE. Cuando ejecuto el formulario e ingreso el dato me aparece un error que dice "Faltan argumentos". ¿Qué significa o a qué se debe este error?
-
¡Gracias RgGuillen! Otra cosa, tengo en un formulario un cuadro de texto para una fecha que debe ingresar el usuario. El tipo de dato en la BD es DATE. Cuando ejecuto el formulario e ingreso el dato me aparece un error que dice "Faltan argumentos". ¿Qué significa o a qué se debe este error?
algun comando q has colocado en el objeto cuadro de texto esta mal escrito o le falta algun parametro, no se si has colocado algun codigo?
es necesario q identifiques exactamente cuando ocurre dicho error para asi ir a ver los metodos y determinar asi q esta pasando o por lo menos colocar aca los codigos q has escrito para ver si vemos alguna clase de error
-
algun comando q has colocado en el objeto cuadro de texto esta mal escrito o le falta algun parametro, no se si has colocado algun codigo?
es necesario q identifiques exactamente cuando ocurre dicho error para asi ir a ver los metodos y determinar asi q esta pasando o por lo menos colocar aca los codigos q has escrito para ver si vemos alguna clase de error
Este es el código que tengo:
DO FORM 'e:\ControlCelularmodif\Formularios\fechasinformes.scx' TO fecha
tipofecha=SUBSTR(fecha,1,12)
fechadesde='06/18/2008'
fechahasta='07/01/2008'
IF thisform.chkInfGral.Value=1
IF DIRECTORY('e:\ControlCelularmodif\Tablas\TblGeneral.dbf')=.f. then
DROP TABLE TblGeneral
ENDIF
CREATE Table 'e:\ControlCelularmodif\Tablas\TblGeneral.dbf'(no_distrit char(2)null, impartidas INT(4) null, noimpartidas INT(4) null, ;
adultos INT(4) null, niños INT(4) null, visitas INT(4) null, conversiones INT(4) null, ofrenda B(2) null, ofrsemant B(2) null, ofrpend B(2) null)
SELECT distrito
SCAN
INSERT INTO TblGeneral(no_distrit) VALUES(distrito.no_distrit)
DO case
CASE tipofecha='opcFecImpCel'
SELECT COUNT(imp_cel) as celimp FROM asistencia WHERE (asistencia.fec_cel>=DATE(fechadesde) AND ;
asistencia.fec_cel<=DATE(fechahasta)) AND UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit INTO CURSOR celimpartidas
CASE tipofecha='opcFecIngSis'
SELECT COUNT(imp_cel) as celimp FROM asistencia WHERE (asistencia.fec_ingrdatos>=DATETIME(fechadesde) AND ;
asistencia.fec_ingrdatos<=DATETIME(fechahasta)) AND UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit INTO CURSOR celimpartidas
ENDCASE
la variable fecha al principio me devuelve una cadena de la que extraigo el tipo, fechadesde y fechahasta, pero por el momento los he asignado directamente para ver qué pasa, pero aun así me da el error. No sé si está mal el formato de la fecha o algo.
-
sabes como depurar en fox?
porque necesito q identifiques la linea problematica.....
antes de esta linea :
tipofecha=SUBSTR(fecha,1,12)
quiero q coloques : SET STEP ON
por lo tanto te quedara asi :
SET STEP ON
tipofecha=SUBSTR(fecha,1,12)
ok luego ejecuta tu programa, veras q llega un momento en q se detiene(gracias a q hemos colocado set step on), te abrira el depurador, ahi vas precionando F6 y veras q una flechita se va moviendo linea por linea...a medida vas precionando F6, llegara un momento en q te dara el error chequea en q linea estas y nos mandas esa linea de codigo.
-
El error me lo da en los dos SELECT:
CASE tipofecha='opcFecImpCel'
SELECT COUNT(imp_cel) as celimp FROM asistencia WHERE (asistencia.fec_cel>=DATE(fechadesde) AND ;
asistencia.fec_cel<=DATE(fechahasta)) AND UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit INTO CURSOR celimpartidas
CASE tipofecha='opcFecIngSis'
SELECT COUNT(imp_cel) as celimp FROM asistencia WHERE (asistencia.fec_ingrdatos>=DATETIME(fechadesde) AND ;
asistencia.fec_ingrdatos<=DATETIME(fechahasta)) AND UPPER(SUBSTR(imp_cel,1,1))='S' ;
AND SUBSTR(asistencia.cod_cel,1,2)=TblGeneral.no_distrit INTO CURSOR celimpartidas
-
ok ya con eso vamos bien...
el error podria ser esto :
DATE(fechadesde), realmente yo nunca lo he usado asi y no se si se puede....pero
esto sustituilo por ctod(fechadesde) lo mismo para el otro q tienes asi datetime...
prueba y luego nos avisas.
Nota :
antes de tu programa coloca
set date british
set century on
-
Fijate que me sigue dando el mismo error. El "set date british" y "set century on" los puse al principio del código para el botón donde me da el problema. Por otro lado ¿no interfiere el CTOD porque en la base de datos tengo asignados los tipos de datos a DATE y DATETIME?
Otra cosita nada que ver: al modificar un registro directamente en una tabla a través de un grid, ¿cómo puedo hacer para que un campo fecingdatos (Fecha de ingreso de datos) se actualice a la fecha y hora actual DATETIME() automáticamente? ¿o no se puede hacer esto a menos que modifique datos a través de botones y formularios?
-
Fijate que me sigue dando el mismo error. El "set date british" y "set century on" los puse al principio del código para el botón donde me da el problema. Por otro lado ¿no interfiere el CTOD porque en la base de datos tengo asignados los tipos de datos a DATE y DATETIME?
Otra cosita nada que ver: al modificar un registro directamente en una tabla a través de un grid, ¿cómo puedo hacer para que un campo fecingdatos (Fecha de ingreso de datos) se actualice a la fecha y hora actual DATETIME() automáticamente? ¿o no se puede hacer esto a menos que modifique datos a través de botones y formularios?
con lo primero tienes q cambiar a ctod ya q tu haces esto :
fechadesde='06/18/2008' con esto fechadesde no es tipo fecha si no tipo caracter
entonces con ctod lo q hago es convertirlo de caracter a fecha.
con lo segundo si se puede tendrias q tener un trigert de update en tu base de dato, no se si estas manejando base de datos o tablas libres.
-
con lo segundo si se puede tendrias q tener un trigert de update en tu base de dato, no se si estas manejando base de datos o tablas libres.
Estoy manejando Base de Datos
-
Estoy manejando Base de Datos
entonces si lo puedes hacer, abre tu base de datos y busca ahi los procedimientos almacenados, o busca en la ayuda y documentate sobre su uso..
-
Al ejecutar el programa me está mostrando un mensaje de error que no entiendo cuando intento modificar un registro. El mensaje es el siguiente: "Error del desencadenador en Celula".
¿Me podrían decir a qué se refiere y qué puedo hacer para resolverlo? ¡Gracias!
-
Al ejecutar el programa me está mostrando un mensaje de error que no entiendo cuando intento modificar un registro. El mensaje es el siguiente: "Error del desencadenador en Celula".
¿Me podrían decir a qué se refiere y qué puedo hacer para resolverlo? ¡Gracias!
le colocaste un procedimiento almacenado a la base de datos?
-
Al ejecutar el programa me está mostrando un mensaje de error que no entiendo cuando intento modificar un registro. El mensaje es el siguiente: "Error del desencadenador en Celula".
¿Me podrían decir a qué se refiere y qué puedo hacer para resolverlo? ¡Gracias!
tiene algun error en algun procedimiento almacenado o en algun triger tienes que revisar eso... puede ser alguana variable publica que no este declarada.. o algo por el estilo...
-
le colocaste un procedimiento almacenado a la base de datos?
He escrito en el código un procedimiento para que me genere un código ID en base a otros datos de la tabla, osea que cuando se modifique alguno de esos datos -dependiendo del dato que se modifique -el código ID puede cambiar y ser sustituído en la BD.
Anteriormente no me estaba dando ese error y no he modificado nada, por eso no entiendo. ¿No tiene nada que ver con que se viole por así decirlo el hecho que la llave primaria sea única o sí? Aunque de todos modos no he duplicado (al menos eso creo) ninguna llave primaria.
-
bueno compadre no te queda de otra mas que depurar utiliza el SET STEP ON y vas precionando F8 y ahi veras que es lo que te esta dando erros pero claro esto tiene que se en modo diseño....
-
bueno compadre no te queda de otra mas que depurar utiliza el SET STEP ON y vas precionando F8 y ahi veras que es lo que te esta dando erros pero claro esto tiene que se en modo diseño....
El código es el siguiente:
SCAN
IF no_correlativo=numcorr then
replace cod_cel WITH codigocelula, nomb_anf WITH nombreanfi, ;
apell_anf WITH apellidoanfi, direcc_cel WITH direccion, ;
zona_cel WITH zona, dia_cel WITH diacelula, ;
hora_cel WITH hora, nomb_colider WITH nombrecoli, ;
apell_colider WITH apellidocoli, nomb_lidninios WITH nombrelidni, ;
apell_lidninios WITH apellidolidni, am_pm WITH ampm, ;
cod_coord WITH codigocoord, ;
no_distrit WITH numdistrit, cod_cel WITH codigocelula, ;
correlativo WITH var1, colonia WITH _colonia, calle_av_pje WITH CalleAvPje, ;
nomb_depto WITH depto, nomb_munic WITH munic, telefono WITH _telefono, ;
celular WITH _celular
**UPDATE celula SET cod_cel=codigocelula, nomb_anf=nombreanfi, ;
apell_anf=apellidoanfi, direcc_cel=direccion, ;
zona_cel=zona, dia_cel=diacelula, ;
hora_cel=hora, nomb_colider=nombrecoli, ;
apell_colider=apellidocoli, nomb_lidninios=nombrelidni, ;
apell_lidninios=apellidolidni, am_pm=ampm, ;
cod_coord=codigocoord, ;
no_distrit=numdistrit, cod_cel=codigocelula, ;
correlativo=var1, colonia=_colonia, calle_av_pje=CalleAvPje, ;
nomb_depto=depto, nomb_munic=munic, telefono=_telefono, ;
celular=_celular WHERE no_correlativo=numcorr
ENDIF
ENDSCAN
El error está en el "replace". Antes de ponerle el "SCAN" usaba el "update" y no me daba problema (claro, tampoco era necesario utilizar el "IF"). Utilicé el "replace" porque, como me parece que me lo planteaste unos mensajes atrás, debido al "SCAN", cuando se ejecuta el "update", se sale del "SCAN" y aplica lo mismo a todo.
-
El código es el siguiente:
SCAN
IF no_correlativo=numcorr then
replace cod_cel WITH codigocelula, nomb_anf WITH nombreanfi, ;
apell_anf WITH apellidoanfi, direcc_cel WITH direccion, ;
zona_cel WITH zona, dia_cel WITH diacelula, ;
hora_cel WITH hora, nomb_colider WITH nombrecoli, ;
apell_colider WITH apellidocoli, nomb_lidninios WITH nombrelidni, ;
apell_lidninios WITH apellidolidni, am_pm WITH ampm, ;
cod_coord WITH codigocoord, ;
no_distrit WITH numdistrit, cod_cel WITH codigocelula, ;
correlativo WITH var1, colonia WITH _colonia, calle_av_pje WITH CalleAvPje, ;
nomb_depto WITH depto, nomb_munic WITH munic, telefono WITH _telefono, ;
celular WITH _celular
**UPDATE celula SET cod_cel=codigocelula, nomb_anf=nombreanfi, ;
apell_anf=apellidoanfi, direcc_cel=direccion, ;
zona_cel=zona, dia_cel=diacelula, ;
hora_cel=hora, nomb_colider=nombrecoli, ;
apell_colider=apellidocoli, nomb_lidninios=nombrelidni, ;
apell_lidninios=apellidolidni, am_pm=ampm, ;
cod_coord=codigocoord, ;
no_distrit=numdistrit, cod_cel=codigocelula, ;
correlativo=var1, colonia=_colonia, calle_av_pje=CalleAvPje, ;
nomb_depto=depto, nomb_munic=munic, telefono=_telefono, ;
celular=_celular WHERE no_correlativo=numcorr
ENDIF
ENDSCAN
El error está en el "replace". Antes de ponerle el "SCAN" usaba el "update" y no me daba problema (claro, tampoco era necesario utilizar el "IF"). Utilicé el "replace" porque, como me parece que me lo planteaste unos mensajes atrás, debido al "SCAN", cuando se ejecuta el "update", se sale del "SCAN" y aplica lo mismo a todo.
una pregunta que tabla estas barriendo con el SCAN ????? por que se supone que es otra tabla distinta que la de de CELULAR verdad????
en el segmento de codigo que has puesto ahi no seleccionas en nungun momento la tabla selular por eso te da eeror por que puede ser uqe no este habierta o no no la has seleccionado entonces deberias de hacer lo siguiente
Scan
If no_correlativo=numcorr Then
IF !USED('celular')
USE 'celular'
ENDIF
Replace cod_cel With codigocelula, ;
nomb_anf With nombreanfi, ;
apell_anf With apellidoanfi, ;
direcc_cel With direccion, ;
zona_cel With zona, ;
dia_cel With diacelula, ;
hora_cel With hora, ;
nomb_colider With nombrecoli, ;
apell_colider With apellidocoli, ;
nomb_lidninios With nombrelidni, ;
apell_lidninios With apellidolidni, ;
am_pm With ampm, ;
cod_coord With codigocoord, ;
no_distrit With numdistrit, ;
cod_cel With codigocelula, ;
correlativo With var1, ;
colonia With _colonia, ;
calle_av_pje With CalleAvPje, ;
nomb_depto With depto, ;
nomb_munic With munic, ;
telefono With _telefono, ;
celular With _celular ;
FOR no_correlativo=numcorr
**UPDATE celula SET cod_cel=codigocelula, ;
nomb_anf=nombreanfi, ;
apell_anf=apellidoanfi, ;
direcc_cel=direccion, ;
zona_cel=zona, ;
dia_cel=diacelula, ;
hora_cel=hora, ;
nomb_colider=nombrecoli, ;
apell_colider=apellidocoli, ;
nomb_lidninios=nombrelidni, ;
apell_lidninios=apellidolidni, ;
am_pm=ampm, ;
cod_coord=codigocoord, ;
no_distrit=numdistrit, ;
cod_cel=codigocelula, ;
correlativo=var1, ;
colonia=_colonia, ;
calle_av_pje=CalleAvPje, ;
nomb_depto=depto, ;
nomb_munic=munic, ;
telefono=_telefono, ;
celular=_celular ;
WHERE no_correlativo=numcorr
Endif
SELECT <'tabla o anterior al SCAN'>
Endscan
si te fijas le incorpore una FOR a la sentencia REPLACE por que si no el cambio siempre se lo hara al primer registro de la tabla celular y tome como referencia lo que tenias en el WHERE de las sentencio UPDATE
lo unico que tiene que regresar el foco a la tablo o cursor que estas barriendo con el SCAN...
-
una pregunta que tabla estas barriendo con el SCAN ????? por que se supone que es otra tabla distinta que la de de CELULAR verdad????
en el segmento de codigo que has puesto ahi no seleccionas en nungun momento la tabla selular por eso te da eeror por que puede ser uqe no este habierta o no no la has seleccionado
Antes del SCAN escribo "SELECT Celula"
Ahora, el error me da sólo cuando el código cambia. Ya lo intenté cambiar "a pie" y me muestra el error. Con ningún otro dato tengo problema, sólo con el codigo por ser, creo, llave primaria.
-
Antes del SCAN escribo "SELECT Celula"
Ahora, el error me da sólo cuando el código cambia. Ya lo intenté cambiar "a pie" y me muestra el error. Con ningún otro dato tengo problema, sólo con el codigo por ser, creo, llave primaria.
UMmmmmm
bueno entonce sel problema es que el desencadenante que la tabla es la que te esta dando problemas quisas re repite o estas intentando cambiar algun campo primario y no te deja ahi el probelmas lo tenes en la bases de datos
mira la pase de datos y revisas los procedimentos almacenados
o abri la tabla desde fox y trata de modificar el registro en el que te da error directamente desde la tabal si te da el error definitibamente es la base la que te esta dando problemas...
-
UMmmmmm
bueno entonce sel problema es que el desencadenante que la tabla es la que te esta dando problemas quisas re repite o estas intentando cambiar algun campo primario y no te deja ahi el probelmas lo tenes en la bases de datos
mira la pase de datos y revisas los procedimentos almacenados
o abri la tabla desde fox y trata de modificar el registro en el que te da error directamente desde la tabal si te da el error definitibamente es la base la que te esta dando problemas...
Ya modifiqué la tabla directamente desde Fox y me da el mismo error. Tengo entendido que una llave primaria puede ser modificada siempre y cuando no se repita.
Perdón mi ignorancia, pero no sé qué es exactamente el "desencadenador" ni cómo ver o a qué se refieren los procedimientos almacenados en Visual Fox. ¿Se refieren a que estén siendo referenciados algunos campos en otra tabla o qué? :embarassed: :sorry:
-
solo una pregunta mira si el campo es auto incremental si es asi no se puede modificar...
otra seria si por caualidad ya existe un campo con el mismo valor para el caso si es cero mira que no exista el valor que estar queriendo almacenar esto podria ser que esta borrado borrado revisalo con el SET DELETE OFF para que te aparezcan los que estan marcados como borrados
con respecto a los desencadenadores son los famosos trigers, disparadores etc... es lo mismo esotos son y estos actuan cuando se crean reglas en las bases de datso por ejemplo cuendo creas relaciones en las bases de datos PADRE-HIJO y le pones unaregla por ejemplo no puede sistir un registro en la tabla hijo sino existe un regigros padre en la tabla padre
ahi se cre a un desencadenador que tu no lo controlas si se dispara cuando se hace cierta accion no es controlado a voluntad asino que se depara automaticamente cuando se realiza una deperminada accion por ejemplo cuendo la relacion es en cascada si actualizo uncamp llave en la tabla padre automaticamente cambia los registros que pertenecia a ese registro en tabla hijo...
y los procedimeintos almacenado son segmentos de de codigo qque pueden ser ejecutados por el usuario funcionan como las funcionas de la bases de datos las puedes mandar a llamar desde cualquier lado incluso dentro de un formulario claro siempre y cuendo tengas habierta la base de datso..
aqui hay una referencia
http://support.microsoft.com/kb/299820/es (http://support.microsoft.com/kb/299820/es)
http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/oracle/respuestas/878844/store-procedure (http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/oracle/respuestas/878844/store-procedure)
-
Hey, resolví el problemilla ohyea: Había en el trigger un "return .F." que es adonde se detenía el programa y lo cambié por "return .T." y ya me funciona bien. ¡Gracias!
Tres preguntas concretas:
1. ¿Cómo hago para inhabilitar la escritura en un combobox a modo que al dar clic sobre él sólo pueda escoger una opción de la lista de items sin poder escribir nada?
2. ¿Cómo hago para que el valor que contenga una celda de un grid seleccionada por clic me sea mostrada por ejemplo en un messagebox al dar clic en otro botón después de seleccionar la celda?
3. ¿Cómo hago referencia a un textbox en blanco? Por ejemplo, si el textbox no contiene ningún dato que muestre un mensaje "Datos incompletos. Favor llenar todos los campos.", caso contrario, que proceda. Intenté con un textbox.value="" pero no me funcionó, ya que aunque tuviera datos, en el IF me evalúa solamente la primera condición y siempre me muestra el messagebox con el mensaje "Datos imcompletos" aunque el textbox tenga algo escrito dentro.
-
1.)
en la propiedad del combo style selecciona la opcion 2 Dropdown list y listo
2.)
en el evento click de la grid pone
x_valor = this.value
x_valor la debes haver declarado antes y publicado o simple mente create una propiedad en el formularion si es asi entonces seria
thisform.x_valor = this.value
y en el boton donde quieres que se muestre en el evento click pon esto
messagebox(x_valor) o messagebox(thisform.x_valor) segun sea el caso
3.)
para eso lo puedes hacer de varias formas segun tu creas comveniente
if len(alltrim(thisform.textbox.value)) > 0
messgebox('Datos incompleto....')
thisform.textbox.setfocus
endif
o
if empty(thisform.textbox.value)
messgebox('Datos incompleto....')
thisform.textbox.setfocus
endif
esperote funcione....
-
¿Alguien podría decirme como almaceno en la memoria de la computadora el valor que se le asigne a una variable, a modo que cuando cierre Visual Fox y lo vuelva a abrir, el valor de la variable se mantenga y, si cambio el valor de la variable y vuelvo a cerrar y abrir Visual Fox, se haya almacenado el nuevo valor, sin necesidad de guardarlo en una Base de Datos? El dato que quiero almacenar es el valor contenido en un textbox dentro de un formulario, osea que:
mivariable=thisform.textbox.value
y, claro, sería un textbox con la propiedad Enabled=.T.
Lo que quiero es que al abrir nuevamente la aplicación se me muestre en el textbox el último valor asignado a esa variable.
Espero haberme dado a entender. ¡Muchas gracias!
-
en este caso tendrias que ocupar el Regedit o bien un archivo *.txt o *.ini, quizas lo mas sencillo seria un lo del archivo en texto plano.
chekate estas funciones en la ayuda del fox.
STRTOFILE( )
y
FILETOSTR()
espero te sirvan.
-
Ahora, he armando una base de datos para una tienda, pero, por ejemplo, para el caso de la tabla de los detalles de la factura, tengo los campos "cantidad", "descripción", "precio_unitario", "venta_total". ¿Cómo hago para que automáticamente me aparezca en el campo "venta_total" el resultado de la multiplicación de "cantidad" por "precio_unitario"? ¿Adónde especifico esa regla, restricción o lo que sea?
-
si te referis a insertar una columna que te gener el resultado automatico entonces se hace en el diseñador de tablas, pero tiene que ser un indice no importa si es normal el indice y luego en donde dice expresión pones "cantidad*precio_unitario
aunque en realidad nunca he probado esa función x_x asi que no aseguro que sirva, hace la prueba y nos contas XD
ERROR GARRAFAL
no es asi :D
creo que no se puede =(
se podria pero en una consulta, pero en una tabla no :phew:
-
ERROR GARRAFAL
no es asi :D
creo que no se puede =(
se podria pero en una consulta, pero en una tabla no :phew:
Voy a probar con una consulta entonces o ya voy a ver cómo me las ingenio. ¡Gracias!
-
Estoy creando un programa en el que quiero tener una barra de herramientas con un botón nuevo, guardar, modificar, cancelar o eliminar, primero, anterior, siguiente, último registro. No quiero tener que colocar en cada formulario un botón para guardar los cambios por ejemplo, sino que cada uno de los botones de ésta barra de herramientas funcionen para todos los formularios.
No sé si en el evento click de cada botón tengo que hacer un Do Case y, dependiendo del formulario activo o abierto en ese momento, realizar determinados procedimientos. Aunque esa es la idea que tengo, no sé cómo plantearlo en el código o hacer referencia al formulario abierto. Espero puedan ayudarme.
-
juepuya, si fuera en vb6 o vb.Net te diria como, pero en fox no se como x_x
pero te pregunto, no podes llamar al formulario activo!
en vb6 hacia algo así
> frmMDI.ActiveForm.Nuevo
frmMDI; mi formulario mdi
ActiveForm; era una propiedad que tomaba una instancia del frm activo en el mdi
Nuevo; era el procedimiento "público" de cada formulario donde estaba el código respectivo a cada caso...
será que hay algo parecido en fox?
ya vendrán los master en fox a ayudarte no desesperes :)
-
juepuya, si fuera en vb6 o vb.Net te diria como, pero en fox no se como x_x
pero te pregunto, no podes llamar al formulario activo!
en vb6 hacia algo así
> frmMDI.ActiveForm.Nuevo
frmMDI; mi formulario mdi
ActiveForm; era una propiedad que tomaba una instancia del frm activo en el mdi
Nuevo; era el procedimiento "público" de cada formulario donde estaba el código respectivo a cada caso...
será que hay algo parecido en fox?
ya vendrán los master en fox a ayudarte no desesperes :)
Yo creo que ha de haber, pero no sé, jeje. Es que sólo tengo las bases de Fox, y nunca había trabajado con los botones de una barra de herramientas.
-
esto es sencillo si trabajas tus texbox con variables de memoria.
por ejemplo:
nuevo
scatter memvar blank
thisform.setall("enabled",.t.,"textbox")
thisform.text1.setfocus
guardar
gather memvar
thisform.setall("enabled",.f.,"textbox")
Siguiente registro
SKIP
IF EOF() THEN
GO BOTTOM
ENDIF
scatter memvar
pero si no lo haces con variables de memorias entonces se complica un poquito o mas la cosa.
si necesitas mas detalles me avisas.