Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
Mover datos de Paradox a Interbase

Hola a todos.
Estoy en los primeros pasos en Interbase.
Primero instalé Interbase servidor en una PC. ademas EMS para generar la base y las tablas. En otra PC instale Interbase cliente y delphi 5. Usando la experiencia, declaré el Alias con BDE Administrator. Luego en delphi escribi una rutinita que se encarga de recorrer una tabla de paradox moviendo cada registro e la tabla de interbase. Todo funciona fenómeno asta que se ejecuta ApplyUpdate dandome el siguiente mensage:

General SQL error
aritmetic exception, numeric overflow, or string truncation
Cannot transliterate character between characters sets.

el códogo no creo que sea el del problema pero por las dudas este es
Código:
procedure TForm1.FormActivate(Sender: TObject);
begin
  QryEntidades.Active:=True;
  QryClientes.Active:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  QryEntidades.First;
  while not QryEntidades.Eof do
  begin
    QryClientes.Insert;
    QryClientesNumero.Value:=QryEntidadesNumeroENT.Value;
    QryClientesNombre.Value:=QryEntidadesNombreENT.AsString;
    QryClientesDomicilio.Value:=QryEntidadesDomicilioENT.AsString;
    QryEntidades.Next;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  QryClientes.ApplyUpdates;
end;
Cuando vuelvo a abrir la tabla Interbase me doy cuenta que se han transferido algunos registros hasta encontrarse con alguno que tenga "ñ" o algun otro caracter por el estilo en un campo tipo string.
¿Puede tener esto algo que ver con el tipo de caracter que se declara al crear la base de datos o los campos de las tablas?

Gracias desde ya.
Responder Con Cita
  #2  
Antiguo 08-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Tienes que utilizar:

ISO8859_1;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 08-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
Usando EMS, al crear un campo tipo char, te pide el tamaño, Juego de caracteres y collate. enn tamaño pongo 40, igual que en la tabla de paradox. En juego de caracteres pongo nuevamente ISO8859_1, lo mismo que puse al crear la base. Pero que pongo en "Collate"

Gracias nuevamente
Responder Con Cita
  #4  
Antiguo 08-09-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Collate ES_ES

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 09-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
continua sin funcionar.
Probé cargando una "ñ" desde el EMS y funcionó pero desde el programa no.
Entonces cambie los controles de acceso a datos. Usé los de Interbase pero tampoco. Y se acabó mi ciencia...
Responder Con Cita
  #6  
Antiguo 09-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
En los componentes Delphi también le tienes que indicar que usas el charset iso8859_1

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 10-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
1) Al crear la base de datos Interbase usando el EMS especifiqué en juego de caracteres ISO8859_1
2) Al crear cada campo alfanumerico, elegí el tipo Varchar, en el juego de caracteres especifiqué ISO8895_1 y en Collate ES_ES
3) En la PC cliente creo con el BDE administrator un alias donde no debo especificar tipo de caracteres.
4) En la aplicación Delphi 5 tomo el control TDatabase, en la propiedad Alias elijo el alias declarada en el punto anterior, en la propiedad DatabaseName especifico un nombre, en el TString de la propiedad params escribo las lineas siguientes: user name=SYSDBA, password=masterkey, lc_ctype=ISO8859_1
5) Tomo un control TQuery y en su propiedad DatabaseName le especificoel nobre de la propiedad DatabaseName del control TDatabase
6) El código que uso lo describí en la pregunta inicial.

Ante todo esto y siguiendo sin funcionar, la pregunta posible es: Como se activan los parametros del control TDatabase? ¿Me estoy equivicando en algun paso? ¿Ma falta especificar algo más?

Nuevamente gracias
Responder Con Cita
  #8  
Antiguo 10-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

En principio todo parece correcto, aunque nunca he usado BDE, por lo que la parametrización del TDatabase es lo que me parece más susceptible de tener el error (más que nada porqué no sé como se configura de forma correcta).

NOTA 1 : Para no tener que definir el juego de carácteres y collate set, cada vez que se crea un campo, puedes utilizar dominios. Al crear campos solo tienes que indicar el dominio al que pertenece (el cual contendrá toda esa información).

NOTA 2 : Para acceder a Interbase/Firebird te recomiendo los componentes FibPlus/IBO/IBX/dbExpress/UIB/Zeos/... en lugar del BDE. Basicamente porqué el BDE está descatalogado y hace años que no es actualizado por Borland (ya no sacarán nuevas versiones).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 13-09-2004
Jech Jech is offline
Registrado
 
Registrado: sep 2004
Posts: 9
Poder: 0
Jech Va por buen camino
Thumbs up Una pregunta mas...????

Bueno primero que nada quisiera saludarlos y felicitarlos por toda la ayuda que prestan, el motivo hacerles una interrogante, sobre el porque?? pasa esto a veces si y otras veces introduce normalmente??, espero puedan contestarme, y no se si habra otra forma mas fácil de realizarlo bueno si se puede me ayudarian bastante pues la verdad no se que es que significa EMS muchas gracias y saludos.
Atte. Jech
Responder Con Cita
  #10  
Antiguo 14-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

En principio puede pasar cuando se utilizan distintas páginas de códigos en la base de datos, y en la aplicación que accede a ella. Entonces cuando se utiliza un carácter inexistente en una de las páginas de código, o que tengan códigos distintos (como las eñes, acentos, ...), salta el error.

La solución pasa por definir correctamente la página de códigos en ambos lugares, personalmente suelo utilizar la iso8859_1.

El EMS es una aplicación de Administración de Interbase, aunque mi preferida es el IB-Expert, que tiene una versión personal, gratuita.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #11  
Antiguo 18-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
Re-pregunta

Hola

Marc Guillot
Para usar IBx de Delphi 5 debo hacerte unas preguntas. Puede ser?
* Como conecto el control IBdatabase a la base de datos? No se usan alias?
* El control IBqry va conectado a IBdatabase. Por qué debo tambien conectarlo a IBtransaction? Como uso IBtransaction?
* Los parámetros UserName, Password y Lc_type donde los declaro? Cómo hago para que los tome? Cómo evito que me pida la clave?
* Qué papel juega en todo esto la propiedad LogiPrompt y el evento OnLogin?

seguramente me faltan un montón de preguntas, pero creo que con estas tengo para empesar.

Muchísimas gracias.
Responder Con Cita
  #12  
Antiguo 18-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

1) No, no se usan Alias. Se especifica la Base de Datos a la que nos queremos conectar en las propiedades del IBDatabase. En concreto en la propiedad DatabaseName.
2) En efecto debes conectarlo a un IBTransaction, puesto que cualquier consulta/operación en Interbase debe estar asociada a una transacción. En principio, la transacción solo debes iniciarla (StartTransaction) y finalizarla con un Commit o RollBack cuando hagas cambios en la Base de Datos y los quieras confirmar. Varias consultas (IBQuerys) pueden estar asociadas a la misma transacción.
3) En el Params del IBDatabase (aunque si haces un doble-click sobre el IBDatabase, te saldrá un editor para rellenarlas).
4) Poner el LoginPrompt a False, evita que te pida la clave. Respecto al evento OnLogin, sirve por si quieres realizar alguna acción adicional al registrarte en la Base de Datos.

Te recomiendo que te hagas con un buen libro de programación en Delphi, que toque la programación de Bases de Datos. Mis favoritos són (en este orden) :

a) La cara Oculta de Delphi 6 (de Ian Marteens)
b) Delphi 7 y Kylix (de Francisco Charte)
c) La Biblia de Delphi 7 (de Marco Cantú)

Igualmente, creo que te interesaran los artículos de esta web :

http://firebird.com.mx

Finalmente, si estás utilizando Interbase 6 OE porqué es gratuito, te recomiendo que te pases a Firebird, puesto que las nuevas versiones de Interbase són comerciales, a diferencia de Firebird que es un proyecto open source generado a partir de IB 6 OE.

En caso de cambiar a Firebird, te recomiendo utilizar componentes FibPlus o IBObjects en lugar de IBX, debido a que Borland no va a preocuparse en mantener IBX compatible con las futuras versiones de Firebird.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #13  
Antiguo 21-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
Consulté www.firebird.com.mx
Entiendo que IBX, InterBaseExpres y la solapa InterBase de Delphi 5 es lo mismo.
En esa nota sugiere que no se usen IBtable ni IBQuery, proponiendo a cambio IBDataSet. Los controles serían: IBDatabase, el cual tendrá en la propiedad DatabaseName el camino a la base de datos InterBase, en la propiedad DefaultTransaction el nombre del componente IBTransaction y éste, en su propiedad DefaultDatabase el nombre del control IBDatabase.
El control IBDataSet, en su propiedad Database lleva el nombre del control IBDatabase; en las propiedades ...SQL se escribe el codigo nesezario segun el caso. A este último control está conectado un DataSourse y a éste, los controles de edisión.
Todo funciona a la perfección.
Pero cuando hago los siguientes cambios deja de fincionar

Cambios:
A la propiedad LogiPrompt del control IBDatabase la pongo en false para evitar el paso por "Nombre y Contraseña" y en la propiedad Params escribo lo siguiente:
user_name=SYSDBA
password=masterkey
lc_type=ISO8859_1

Error:
DPB Constant (0) is unknown

si a las tres lineas de la propiedad params le quito la última vuelve a funcionar a la perfección (ademas sin pedir "Nombre y contraseña"). Evidentemente el error tienerrelasión con el parámetro lc_type=ISO8859_1

Se te ocurre qué puede ser? Perdon por ser tan molesto.

El libro que leí para programar en delphi 5 fue GUíA DE DESARROLLO DELPHI 5 Teixeira / Pacheco pero no me ayuda en este problema puntual
Responder Con Cita
  #14  
Antiguo 21-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

En lugar de poner manualmente los parámetros, prueba haciendo un doble-click sobre el componente IBDatabase para especificar estos parámetros en la pantalla de configuración que se abrirá.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #15  
Antiguo 21-09-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
Ahora sí funcionó. Muchísimas gracias Marc Guillot y todos los que participaron en este hilo.

Más adelante los seguiré molestando.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:21:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi