Fecha actual Mié Jun 26, 2024 1:08 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 7 mensajes ] 
Autor Mensaje
NotaPublicado: Dom Jul 23, 2006 3:25 pm 

Registrado: Jue Jul 20, 2006 8:36 pm
Mensajes: 143
Ubicación: Bilbao
Estoy haciendo los menus del programa, y antes he de lanzar mi rutina de creacion de las bases si no estan creadas, pero no encuentro como hacerlo... he buscado un metodo form:oncreate pero no lo veo...alguien me da una pista please?

_________________
(C) Josu Udaondo...el fiera de clipper 5
Bilbao 2006


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Jul 23, 2006 6:27 pm 
Avatar de Usuario

Registrado: Vie Oct 07, 2005 8:26 pm
Mensajes: 115
Ubicación: Valencia - España
Puedes utilizar el metodo ::OnShow, y activar todo lo que te haga falta antes de que se pinte el formulario.

::OnShow:={| oSender| AbrirBases() }

Antes de mostrarse el formulario se ejecutara tu funcion AbrirBases.

Espero que te sea util.

Un saludo.
Víctor


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Jul 24, 2006 12:41 am 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Victor escribió:
Puedes utilizar el metodo ::OnShow, y activar todo lo que te haga falta antes de que se pinte el formulario.

::OnShow:={| oSender| AbrirBases() }

Antes de mostrarse el formulario se ejecutara tu funcion AbrirBases.

Espero que te sea util.

Un saludo.
Víctor


Hola, Victor....

Completamente de acuerdo contigo, ya que en OnCreate (que si existe) no es aconsejable.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Jul 31, 2006 1:56 am 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 138
Ubicación: España
Hola Victor;
Veas si te aprobecha esto:

/*
* Evento OnCreate => Crear la Pantalla Principal.
*/
METHOD Form1OnCreate( oSender ) CLASS TForm1

//***> Configuración de la Hora y la Fecha.
set(_SET_DATEFORMAT,"dd/mm/yyyy")

//***> Configurarción Para Indices DBFCDX.
Request DbfCdx
RDDSETDEFAULT("DBFCDX")

//***> Crear la Base de Datos.
::CrearBaseDatos( oSender )

return

/*
* Evento OnClick => Crear la Base de Datos.
*/
METHOD CrearBaseDatos( oSender ) CLASS TForm1

//***> Buscamos las Bases de Datos.
if ! File('Fichero.dbf')

//***> Si no la Encuentra la Crea.
dbcreate('Fichero',{{'X1','N',10,0},{'X2,'C',34,0}})

dbcloseall()
Endif

// Busca el Indice de Datos
if ! File('Fichero.cdx')

// Si no lo Encuentra lo Crea.
Use Fichero
Index On Field->X1 Tag "X1"
Index On Field->X2 Tag "X2"
dbcloseall()
Endif
return

Esto al cargar el programa lo primero que hace antes de presentar el menú principal, es buscar la base de Datos y su Indice, si no los encuentra te los crea automaticamente y a continuación te muestra el Menú Principal.

Un Saludo.
Fraguibo


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Jul 31, 2006 1:16 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Fraguibo escribió:
Hola Victor;
Veas si te aprobecha esto:

/*
* Evento OnCreate => Crear la Pantalla Principal.
*/
METHOD Form1OnCreate( oSender ) CLASS TForm1

//***> Configuración de la Hora y la Fecha.
set(_SET_DATEFORMAT,"dd/mm/yyyy")

//***> Configurarción Para Indices DBFCDX.
Request DbfCdx
RDDSETDEFAULT("DBFCDX")

//***> Crear la Base de Datos.
::CrearBaseDatos( oSender )

return

/*
* Evento OnClick => Crear la Base de Datos.
*/
METHOD CrearBaseDatos( oSender ) CLASS TForm1

//***> Buscamos las Bases de Datos.
if ! File('Fichero.dbf')

//***> Si no la Encuentra la Crea.
dbcreate('Fichero',{{'X1','N',10,0},{'X2,'C',34,0}})

dbcloseall()
Endif

// Busca el Indice de Datos
if ! File('Fichero.cdx')

// Si no lo Encuentra lo Crea.
Use Fichero
Index On Field->X1 Tag "X1"
Index On Field->X2 Tag "X2"
dbcloseall()
Endif
return

Esto al cargar el programa lo primero que hace antes de presentar el menú principal, es buscar la base de Datos y su Indice, si no los encuentra te los crea automaticamente y a continuación te muestra el Menú Principal.

Un Saludo.
Fraguibo


Hola a todos.

Fraguibo, una pregunta.

El codigo que muestras como ejemplo, me parece correcto, pero...
¿que haces si una misma tabla la tienes que volver a abrir?
Una posible respuesta sería:
Es que no abro las tablas más de una vez. Ok, entonces la pregunta queda invalidada, pero yo es que si las abro, tantas como necesite (busquedas, por ejemplo). De cualquier modo creo que seria MAS efectivo comprobar las tablas ANTES de entrar en ningun form, por ejemplo en el OnShow de TAplication.
Ya nos diras tu opinion.

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Jul 31, 2006 1:23 pm 
Avatar de Usuario

Registrado: Dom Oct 09, 2005 11:26 am
Mensajes: 362
Ubicación: Salamanca - España
Hola de nuevo a todos y en especial a Fraguibo.

Me respondo a mi mismo :roll:

Perdon, Fraguibo, por no leer tu codigo detenidamente, ya que al mirarlo de nuevo descubrí que estas haciendolo en el Form Principal y eso tambien me parece correcto, solo un pequeño apunte, yo no soy partidario de hacer las comprobaciones de tablas (ni otras muchas de otro tipo) en el OnCreate ya que en ese momento puedes encontrarte variables AUN NO INICIALIZADAS (me ha pasado) si embargo en el OnShow, no me ha sucedido esto.
Un saludo y perdoname por no leer bien.... :oops:

_________________
Un saludo.
Jesús P. Melgar Velasco


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Jul 31, 2006 4:27 pm 
Avatar de Usuario

Registrado: Mar Oct 11, 2005 6:58 pm
Mensajes: 138
Ubicación: España
Jesús;
En primer lugar perdona por que mi ejemplo iva dirigido a "Jesu" y por equivocación puse "Victor".

En segundo lugar si NO lo he interpretado mal, lo que "Jesu" pretende es comprobar si existe la Tabla y si NO existe crearla antes de mostrar el Form.

En tercer lugar lo que "Victor" nos muestra en su ejemplo:
::OnShow:={| oSender| AbrirBases() } , es habrir la tabla y NO crearla, lo cual como tu sabes NO se puede hacer, si NO la has creado antes.

En cuarto lugar con la siguiente rutina, puedes habrir la Base de Datos, tantas veces como te haga falta y desde el lugar que lo necesites, ya que solo tienes que llamarla.

/*
* Evento OnClick > Buscar la Base de Datos.
*/
METHOD BuscaBaseDatos( oSender) CLASS TForm1

//***> Busca la Base de Datos.
if ! File('Archivo.dbf')

//***> Si no la Encuentra nos Avisa que no Existe.
::MensageAutomatico( oSender,530,296,1,2,clRed )
return
else
//***> Si la Encuentra nos la abre para hacer lo que necesitemos.
DbUseArea( .T., "DbfCdx", "Archivo.dbf", "Archivo", .T., .F. )
Archivo->( OrdCreate( "Archivo.cdx", "X2", "Upper( X2 )", ;
{ || Upper( Field->X2 ) }, .F. ) )

//***> Entrada o Salida de Datos, segun nuestras necesidades.

dbCloseAll()

endif
return

Jesús si crees que me estoy explicando mal, no dudes en corregirme, ya que hay un refran que dice "Ven más dos ojos que uno"

Un Saludo
Fraguibo


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 7 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron