no carga base de datos

Hola de nuevo, resulta que en mi aplicacion tengo puesto esto para conectar con la base de datos:

db=new SQLiteDatabase 'CREA LA BASE DE DATOS LLAMADA DB

dim f as FolderItem
f = App.ExecutableFile.Parent.Parent.Child(“database.sqlite”)

'dim f as FolderItem=SpecialFolder.Desktop.child(“formulario casting”).child(“database.sqlite”) ’ ABRE LA BASE DE DATOS DEL ESCRITORIO/FORMULARIO CASTING/DATABASE.SQLITE
db.DatabaseFile=f
if db.Connect then ’ SI CONECTA A LA BASE DE DATOS… HACER LO QUE HAY DENTRO DEL BLOQUE
'msgbox(“conectada”)
Cargadatos
end if

Me funciona perfecto, pero cuando la compilo, y la llevo a otra carpeta junto a su archivo de base de datos “database.sqlite”, no me carga la base de datos, ni en windows ni en mac. ¿Que hago mal?. Yo creia que "app.executablefile.parent.parent.child(“database.sqlite”) era para cargar la base de datos de la propia carpeta donde se encuentra la aplicacion, independientemente de donde este o como se llame esa carpeta, pero no me funciona. ¿alguna idea?

Y otra cosa, para no ir abriendo posts a diestro y siniestro… ¿Sabeis como puedo bloquear los textfields para que no se puedan modificar o escribir en ellos?. En visual basic tenian una propiedad que se llamaba “locked” pero aqui no la encuentro. Le faltan muchisimas propiedades a los controles.

Hola Antonio,

Si no me equivoco te sobra un “parent”. El primer parent te lleva a la carpeta que contiene tu ejecutable, y ah tienes que buscar el child que te interesa.

Un textfield se puede bloquear deshabilitandolo (enabled=false), o podras deshacer los cambios en el evento TextChange.

Tengo curiosidad por tu comentario sobre las propiedades que faltan en los controles. Qu propiedades echas de menos?

Julen

hola julen, gracias por tu ayuda. Veras, googleando he pegado este codigo al cargar la base de datos y me funciona, tanto en mac como en windows.

if TargetWin32 and DebugBuild then
f = GetFolderItem("").Parent.Child(“database.sqlite”)
else
f = GetFolderItem(“database.sqlite”)
end

Como me funciona, pues asi lo dejo jeje, porque anteriormente estuve probando a quitar un “parent” creo recordar y no me funciono.

Respecto a lo de bloquear el textfield… se que puedo hacerlo con enabled=false, pero no me gusta, porque sale como sombreado. En visual basic, habia una propiedad que era Locked, y si la ponias “enabled”, no modificaba visualmente el cuadro de texto, solo que si hacias click en el, no podias escribir ni modificar datos.

Hay muchas propiedades que hecho en falta basicas que no entiendo como en un lenguaje mas moderno no estan, o algunas hay que hacerlas con lineas de codigo, como por ejemplo… en los labels, ponerles bordes o quitarselos, en los cuadros de texto, ponerlos en 3d, planos, con bordes, cambiarle los colores a todo, en un control de imagen, poder decirle si la reescala segun lo grande que sea, nose, muchas cosas faltan. Sobretodo a nivel visual. Xojo es bastante mas simple (y eso que es orientado a objetos).

Tiene que haber una forma de bloquear un textfield diferente de dejarlo enabled=False

Sí, volver a mostrar el texto antiguo cada vez que se intente cambiar, usando el evento TextChange.

He preparado un ejemplo: https://dl.dropboxusercontent.com/u/3800071/Locked%20TextField.xojo_binary_project

En mi ejemplo he hecho una subclase de TextField Para añadirle dos propiedades, una booleana que indica si está bloqueado y otra de tipo string que guarda el texto a consrvar cuando está bloqueado.

Julen

Julen, cuando pincho en el enlace que has puesto me abre una ventana nueva en el navegador y me salen todo caracteres raros, como si fueran los datos del archivo por dentro

Ya lo he conseguido, he puesto esto en todos los textfields en el evento “key Down”, y dependiendo de una variable global, el valor que tenga, me deja escribir en ellos:

if textfields_bloqueados=“si” then
if asc(key) >= 32 then
return true
end if
end if

Gracias de todas formas Julen. Un saludo

Hola Antonio,

La mejor estrategia es como dice Julen: creando subclases y aadiendo las propiedades (booleana en este caso) que te permitan controlar esa cuestin. De esa forma la tendrs siempre “lista para usar”, reducirs la complejidad inherente del mantenimiento y tambin la duplicacin de cdigo (imagina que necesitas otro campo con esas mismas caractersticas)

En cuanto a lo que hechas en falta, utiliza la aplicacin Feedback tanto para el envo de bugs como para la solicitud de aquellas caractersticas/capacidades que eches en falta! (yo acabo de hacerlo apenas hace un da ;-D)

Saludos!

Javier Rodrguez
Evangelista Xojo en Espaol, Desarrollador, Consultor y Formador Xojo
Autor del libro “Programacin Multiplataforma Xojo
Autor del plug-in GuancheMOS para Xojo
Snippery para OS X: editor y gestor de fragmentos y ms!

Hola Antonio,

Me imagino que ests viendo el contenido del archivo directmente en tu browser. Descrgalo (haz click derecho sobre el enlace) en vez de abrirlo.

Como dice Javier, se recomienda usar pocos mtodos y propiedades globales, y adems generar una subclase del control que quieres adecuar a tu aplicacin tiene la ventaja de que lo puedes reutilizar cuanto quieras.

Julen

Gracias, lo tendre en cuenta y lo mirare, todo lo que sea simplificar codigo se agradecer a la larga.

Tengo otra duda que no encuentro la propiedad en el control… como hago para escribir en un textfield en multilinea?. Es un textfield de “observaciones”, en el que se va a escribir un parrafo grande de texto, y cuando escribo, sigue en la misma linea hasta el infinito y mas alla.

Es otra propiedad, Julen, que hecho en falta de Visual Basic, el cual te lo hacia automtico.

Si quieres que sea multilnea necesitas un TextArea en vez de un textField, que est limitado a slo una lnea.

Julen

[quote=268460:@Julen Ibarretxe Uriguen]Si quieres que sea multilínea necesitas un TextArea en vez de un textField, que está limitado a sólo una línea.

Julen[/quote]

Gracias!, era eso.