dudas foxydb y firebird

205 views
Skip to first unread message

Cesar Diaz

unread,
Jan 7, 2015, 4:38:37 AM1/7/15
to publice...@googlegroups.com
Buenos dias y feliz año a todos:
Tengo un pa de problemas con foxydb y firebird y ya no se si soy yo o que, me vuelvo loco con el tema de las comillas dobles y simples del firebird con lo cual no logro hacer hacer andar la libreria foxydb,
mi duda hay alguna forma de configurar el firebird para que no tenga que estar pasandole las sentencias con las dichosa comillas o me tengo que pelear hasta lograr encajar las combinaciones de comillas y me acepte lassentencias sql?

Es que todos los ejemplos que veo tanto para foxydb como en el blog firebird21 no se usan las comillas

gracias

mapner

unread,
Jan 7, 2015, 9:49:28 AM1/7/15
to publice...@googlegroups.com
Hola,

no conozco a fondo la librería FoxyDB pero para Firebird debes tomar en cuenta que las constantes tipo string se encierran en comillas simples 

ejemplo
SELECT * FROM CLIENTES WHERE NOMBRE = 'JOSE'  AND APELLIDO = 'PEREZ' 

para lo cual si desde VFP intentas hacer una sentencia SQL para envíar luego a FB debes usar o bien TEXT ENDTEXT o bien comillas dobles o bien corchetes [] como delimitadores externos. 

ejemplo

TEXT TO cSQL NOSHOW PRETEXT 7
  SELECT * FROM CLIENTES WHERE NOMBRE = 'JOSE'  AND APELLIDO = 'PEREZ' 
ENDTEXT


cSQL =  " SELECT * FROM CLIENTES WHERE NOMBRE = 'JOSE'  AND APELLIDO = 'PEREZ'  "


cSQL =  [ SELECT * FROM CLIENTES WHERE NOMBRE = 'JOSE'  AND APELLIDO = 'PEREZ'  ]


A su vez para el caso de que tu sentencia tenga una constante string con apóstrofe como el apellido D'onofrio sería

cSQL =  [ SELECT * FROM CLIENTES WHERE NOMBRE = 'JOSE'  AND APELLIDO = 'D''ONOFRIO'  ]

o sea se repite la comilla simple dos veces.

Otro tema es que al definir elementos de la base de datos como ser nombre de Tablas o Campos en FB se permite usar identificadores especiales encerrados entre comillas dobles.
Esto brinda tener un tablas/campos que coincidan con alguna palabra reservada de FB o usar acentos o espacios en blanco o mezclar minúsculas y mayúsculas.
Luego al usar estos identificadores en una sentencia los debes poner entre comillas dobles respetando tal cual ha sido definido

por ejemplo:
CREATE TABLE "MIS CLIENTES" ( "MI ID" integer, "Apellido" Character(50), "es único" CHAR(1))

cSQL = [SELECT * FROM "MIS CLIENTES" WHERE "Apellido" = 'PEREZ']

como se ve en el último ejemplo para encerrar la sentencia en una sola línea solo queda corchete o TEXT ENDTEXT
El tema es si en alguna constante string de la sentencia entra los caracteres corchete!

conclusión 
Para delimitar string en VFP para enviar sentencias a FB conviene usar TEXT ENDTEXT o si hay caracteres que coincidan con delimitadores usar CHR(...) en string concatenado.

Saludos

HernanCano

unread,
Jan 7, 2015, 11:08:04 AM1/7/15
to publice...@googlegroups.com
Sí, mapner.
Las comillas son "inevitables"; en casi todos los motores se necesitan: no es un "problema", [[ pues los campos alfanuméricos--string se escriben así ]].

También recomiendo TEXT/ENDTEXT.

Jose Manuel Urbaez Mendez

unread,
Jan 7, 2015, 11:25:10 AM1/7/15
to publice...@googlegroups.com
Cesar.

Acabo de salir de un problema parecido gracias a TEXT/ENDTEXT, tal como dice HernanCano

Antonio Meza

unread,
Jan 7, 2015, 12:49:58 PM1/7/15
to publice...@googlegroups.com
Hola Cesar!!

Pero en que parte necesitas usar Foxydb con las comillas? podrías poner un ejemplo? 

saludos
Antonio Meza

mapner

unread,
Jan 7, 2015, 12:50:15 PM1/7/15
to publice...@googlegroups.com
HernanCano,
Muy interesante tu aclaración sobre que las comillas son utilizadas en todos los motores de datos y no son un problema, pero reitero el concepto, en Firebird las constantes string se delimitan SOLAMENTE con comillas simple o apóstrofe '. Lo que no me quedó muy claro es tu ejemplo de cadena delimitada con doble corchete [[ .. ]]
Saludos y buen ańo!

HernanCano

unread,
Jan 7, 2015, 10:48:56 PM1/7/15
to publice...@googlegroups.com
Por favor: disculpen: sólo quise escribir algo entre paréntesis, pero usé doble corchete para enfatizar el mensaje que está entre ellos. 

Chao.

Riago

unread,
Jan 8, 2015, 11:11:57 PM1/8/15
to publice...@googlegroups.com
Muchas Felicidades a todos los estimados colegas.
Si deseas material sobre FireBIRD, está el blog de Walter Ojeda, es el más completo que existe hoy en día en español.
Walter Ojeda era uno de nosotros aqui en el foro, hace ya mucho tiempo que no aparece, pero tiene un blog de FireBIRD y casi el 80% de todo lo que pone es orientado a VisualFOX.


Este es el link, espero te sirva y encuentres la respuesta a lo que deseas.

Un abrazo.

Ricardo

Carton Jeston

unread,
Jan 28, 2015, 1:54:24 AM1/28/15
to publice...@googlegroups.com
Hace unos dias estuve peleando pasando todas mis tablas DBF a firebird y al final lo hice funcionar pero me quedo algo pendiente.

FoxyDB usa un campo ID interno algo asi como el numero real de registro que maneja la base de datos. Me imagino que tengo que crearlo dentro de cada tabla y si es asi... ¿de que tipo o longitud?

un saludo

Antonio Meza

unread,
Jan 28, 2015, 11:12:17 AM1/28/15
to publice...@googlegroups.com
Cuando vienes de tablas DBF y pasas a cualquier servidor de base de datos, es muy común creer que los campos Primary Key Autoincrementables no son necesarios, sin embargo es todo lo contrario mejoran muchas cosas.

* Para identificar un registro único en la tabla
* Relacionar con otras tablas
* Modificar o eliminar un registro
* etc

Dicho lo anterior, el tipo debe ser numérico y la longitud dependerá de cuantos registros puedas tener en esa tabla, ejemplo, un catalogo de Bancos, se puede pensar que hay 60 bancos, entonces longitud 2, o puede haber 200 bancos, seria mejor longitud 3, un catalogo de productos, puedes decir que tendrán solo 1000 productos pues longitud 4, mas de 10mil pues longitud 5 y si no te quieres complicar pues longitud 10.

Es mas rápido aplicar un Update a un registro donde Where ID = 1, que un update a un registro donde Where Empresa = 1 and sucursal = 2 and cliente = 5.

saludos
Antonio Meza

Carton Jeston

unread,
Jan 29, 2015, 1:28:33 AM1/29/15
to publice...@googlegroups.com
Creo que para no complicar el tema del ID, es mejor definir un estandar para todo.

ID Tipo Numerico Longitud 10

y poner algun comentario en la documentacion o en el codigo para el que venga despues :-)

Lo ultimo que hice fue editar con un browse y ver que no podia eliminar registros con la columna izquierda jajaja

gracias por todo

Antonio Meza

unread,
Jan 29, 2015, 11:12:33 AM1/29/15
to publice...@googlegroups.com
Si le menciono en las características pero esta un poco oculto!!


  • Agrega a todas tus tablas un Campo Primary Key Auto incrementable con el nombre que quieras para que FoxyDB pueda realizara las operaciones necesarias.
Ya con un poco de mas tiempo voy a ponerlo en la guía.

Se te ha hecho complicada la librería? tienes alguna duda donde estés un poco atorado?, no dudes en consultar.


Gracias por el comentario
saludos
Antonio Meza

Carton Jeston

unread,
Jan 29, 2015, 4:45:47 PM1/29/15
to publice...@googlegroups.com
Lo cierto es que ademas del error, me suena haber leido sobre la ID en foxydb en algun mensaje de este foro y la posibilidad de cambiar de nombre porque algun usuario tenia conflicto con un un campo del mismo nombre en su aplicacion. Todo esto lo digo desde una memoria volatil, ya que este foro va muy bien para debatir dudas o cuestiones pero la informacion tiende a desperdigarse por multitud de hilos... :-D

De la forma que lo leo en la seccion caracteristicas, se puede entender que foxydb es el que agrega el campo id a todas tus tablas y no el usuario. Veo que hay otras lineas que tambien podrian ponerse aparte en una seccion tipo FAQ o algo asi.

Sobre la dificultad, es demasiado pronto para pronunciarme, ya que apenas he llegado ha hacer un browse. Pero antes de todo eso, he tenido que seguir los pasos previos que comente, instalar firebird y su driver, conseguir pasar todos los dbf de golpe probando diferentes programas (lo hice con el full convert 5 aunque hay un prg que seria interesante estudiar) y empezar a usar los ejemplos del blog (cuidado con las comillas).

La dificultad real sera proporcional a la aplicacion que quieres adaptar, sobre todo de monopuesto a multipuesto y no creo que en breve pueda hacerlo con ciertas garantias. Pero hay mucho por aprender y quiero hacer otros experimentos como conectar con una db en un servidor hosting mysql en internet a ver que tal funciona.

Hace unos meses que me propuse adaptar mis aplicaciones a VFP C++ compiler y ya lo tengo todo. Con un poco de esfuerzo, creo que puedo dar el salto a SGDB sin problemas.

Ahora otra duda, en firebird, ¿hay algun modo de actualizar una version anterior del DB a una nueva, copiando todos los datos de la vieja estructura de un modo "automatico" con un simple comando?. No me refiero a hacer un procedimiento tipo append from para todas las tablas sino que ordenes copiar todos los datos de la base de datos completa a la nueva base de datos con la estructura nueva y que esta vacia.

Aprovecho para decir de nuevo que me parece un gran trabajo y en mi "hoja de ruta" de dar mas vida a mi foxpro, Foxydb y las alternativas de otros compañeros, son un pilar fundamental.

un saludo

Carton Jeston

unread,
Jan 29, 2015, 6:31:17 PM1/29/15
to publice...@googlegroups.com
Estoy usando el Database Workbench 4 Lite for Firebird para modificar la base de datos. Ahora al poner la ID tengo un conflicto con el null, si elijo Primary key se activa Not NULL y me imagino que por defecto debe ponerse algo para que no quede vacio.

Mirando esa foto, ¿que configuracion recomiendas para el ID?

Carton Jeston

unread,
Jan 29, 2015, 6:33:10 PM1/29/15
to publice...@googlegroups.com

Antonio Meza

unread,
Jan 29, 2015, 7:27:09 PM1/29/15
to publice...@googlegroups.com
Como es numérico el campo creo que con poner 0 (cero) seria adecuado. prueba y comentas.

saludos


El jueves, 29 de enero de 2015, 17:33:10 (UTC-6), Carton Jeston escribió:

Antonio Meza

unread,
Jan 29, 2015, 7:47:15 PM1/29/15
to publice...@googlegroups.com
Este articulo de Walter Ojeda te puede dejar mas claro el tema de los campos Primary Key y su importancia y porque FoxyDb los utiliza para mejorar muchos aspectos con el manejo de registros a la hora de actualizar, eliminar, etc.


saludos
Antonio Meza

Reply all
Reply to author
Forward
0 new messages