Ir al contenido


Foto

Proyecto MTF (MySQL to Firebird)


  • Por favor identifícate para responder
105 respuestas en este tema

#81 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 diciembre 2008 - 11:59

Retomando el proyecto, sigo con le problema de la migracion de datos, ese problema me esta matando, error que me da:

---------------------------
Debugger Exception Notification
---------------------------
Project MTF.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error
SQL error code = -206
Column unknown
IDN
At line 1, column 23'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------


Ya le he cambiado el nombre y nada.

Saludos.

  • 0

#82 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 20 diciembre 2008 - 09:05

Resuelto el asunto, era que al generar el DDL no se creaba un campo porque no estaba reconociendo el tipo de dato que era, solo lo agregue el tipo LargeInt a la lista de campo aquí:

           

delphi
  1. ftLargeint,
  2.             ftAutoInc,
  3.             ftInteger  : begin
  4.                             Memo1.Lines.Add(' '+NombreCampo+' INTEGER'+Separador);
  5.                           end;



Pero ahora me sucede otro error:

XSQLDA index out of range


Ahora, ¿Qué demonios sucede?  :s

Saludos.
  • 0

#83 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 20 diciembre 2008 - 09:08

Ahh, otra cosa que se me olvidó, la base de datos se crea perfecto, pero al estar migrando los datos la misma aumenta de peso al momento de ocurrir la excepción como menciono en el post anterior la base no tiene datos pero sí está aumentado de peso, sin datos pesa normalmente alguno 620 Kb si no me equivoco pero ahora tiene 7.2MB y los datos están nulos :s.

Saludos.
  • 0

#84 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 21 diciembre 2008 - 10:47

Index out of Range, significa que estas tratando de accesar un item en una lista  y el item no existe, revisa a ver en que linea te da el error
  • 0

#85 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 febrero 2009 - 05:57

Bueno, he vuelto a retomar éste proyecto, estoy teniendo problemas con la creación de las tablas en firebird, más abajo dejo la imagen con el error y código:



delphi
  1. procedure TFMain.btCreaFdbClick(Sender: TObject);
  2. var
  3.   i,j: integer;
  4.   CampoPaso,NombreCampo,CamposSQL,ValoresSQL: String;
  5. begin
  6. if cbxTablas.Checked then
  7.   begin
  8.   IBDataBase1.Close;
  9.   IBDatabase1.DatabaseName := edDir.Text;
  10.   if FileExists(edDir.Text) then
  11.     begin
  12.       Mostrar('Ha ocurrido un problema al crear la base de datos.','Esta base de datos ya existe.');
  13.       Abort;
  14.     end;
  15.   IBDatabase1.Params.Clear;
  16.   IBDatabase1.Params.Add('USER '+QuotedStr(edUser.Text)+'');
  17.   IBDatabase1.Params.Add('PASSWORD '+QuotedStr(edPass.Text)+'');
  18.   IBDatabase1.Params.Add('PAGE_SIZE '+edPage.Text+'');
  19.   IBDatabase1.Params.Add('DEFAULT CHARACTER SET '+edChar.Text+'');
  20.   IBScript1.Database.DatabaseName := edDir.Text;
  21.   IBScript1.Script.Clear;
  22.   IBScript1.Script.AddStrings(Memo1.Lines);
  23.   try
  24.     IBDatabase1.CreateDatabase;
  25.     IBScript1.ExecuteScript;
  26.   except
  27.     on E: Exception do
  28.       begin
  29.         if E.ClassNameIs('EIBInterbaseError') then
  30.           begin
  31.             Mostrar('Se ha producido un error al crear la base de datos.', E.Message);
  32.             Abort;
  33.           end;
  34.         if e.ClassNameIs('EDataBaseError') then
  35.           begin
  36.             Mostrar('Se ha producido un error al crear la base de datos.', E.Message);
  37.             Abort;
  38.           end;
  39.         if e.ClassNameIs('EIBClientError') then
  40.           begin
  41.             Mostrar('Se ha producido un error al crear la base de datos.', E.Message);
  42.             Abort;
  43.           end;
  44.       end;
  45.     end;
  46. end;
  47.  
  48. if cbxDatos.Checked then
  49. begin
  50.  
  51.   IBDatabase1.DatabaseName := edDir.Text;
  52.  
  53.   for i := 0 to Tablas.Items.Count - 1 do begin
  54.       ZTablas1.Close;
  55.       cdTablas1.Close;
  56.       CampoBlob  := False;
  57.       ZTablas1.TableName := Tablas.Items[i].Text;
  58.       Try
  59.         ZTablas1.Open;
  60.         cdTablas1.Open;
  61.       except
  62.         on E: Exception do
  63.         begin
  64.           if E.ClassNameIs('EZSQLException') then
  65.             begin
  66.               Mostrar('Se ha producido un problema al intentar abrir una de las tablas.',E.Message);
  67.               Abort;
  68.             end;
  69.           if E.ClassNameIs('EDataBaseError') then
  70.             begin
  71.               Mostrar('Se ha producido un problema al intentar abrir una de las tablas.',E.Message);
  72.               Abort;
  73.             end;
  74.         end;
  75.       End;
  76.  
  77.       cdTablas1.First;
  78.       while not cdTablas1.Eof do begin
  79.         CamposSQL  := '';
  80.         ValoresSQL := '';
  81.         for j := 0 to cdTablas1.FieldCount-1 do begin
  82.             NombreCampo := cdTablas1.Fields[j].FieldName;
  83.             NombreCampo := StringReplace(NombreCampo,'(','',[rfReplaceAll]);
  84.             NombreCampo := StringReplace(NombreCampo,')','',[rfReplaceAll]);
  85.             NombreCampo := TranslateChars(NombreCampo, CHARS_ACENTUADOS, CHARS_SINACENTO);
  86.             If UpperCase(NombreCampo) = 'PASSWORD' Then
  87.                 NombreCampo := 'PASSCODE';
  88.             If UpperCase(NombreCampo) = 'SIZE' Then
  89.                 NombreCampo := 'SIZE1';
  90.             If UpperCase(NombreCampo) = 'NO' Then
  91.                 NombreCampo := 'IDN';
  92.             If UpperCase(NombreCampo) = 'USER' Then
  93.                 NombreCampo := 'USER1';
  94.             If UpperCase(NombreCampo) = 'DATE' Then
  95.                 NombreCampo := 'DATE1';
  96.             CamposSQL := CamposSQL + NombreCampo;
  97.             case cdTablas1.Fields[j].DataType of
  98.                   ftString,
  99.                   ftWideString: begin
  100.                         CampoPaso  := cdTablas1.Fields[j].AsString;
  101.                         CampoPaso  := StringReplace(CampoPaso,'''','´',[rfReplaceAll]);
  102.                         ValoresSQL := ValoresSQL+#39+CampoPaso+#39;
  103.                   end;
  104.                   ftMemo,ftBlob,
  105.                   ftTypedBinary,
  106.                   ftGraphic  : begin
  107.                         ValoresSQL := ValoresSQL+' NULL';
  108.                         //ValoresSQL := ValoresSQL+' :BLOB'+inttostr(i);
  109.                         CampoBlob  := True;
  110.                   end;
  111.                   ftTime      : begin
  112.                         if TimeToStr(cdTablas1.Fields[j].AsDateTime) = '' then
  113.                           ValoresSQL := ValoresSQL+' NULL'
  114.                         else ValoresSQL := ValoresSQL+#39+FormatDateTime('hh:mm:ss', cdTablas1.Fields[j].AsDateTime)+#39;
  115.                   end;
  116.                   ftDate,
  117.                   ftDateTime,
  118.                   ftTimeStamp : begin
  119.                         if DateToStr(cdTablas1.Fields[j].AsDateTime) = '' then
  120.                           ValoresSQL := ValoresSQL+' NULL'
  121.                         else ValoresSQL := ValoresSQL+#39+FormatDateTime('dd.mm.yyyy', cdTablas1.Fields[j].AsDateTime)+#39;
  122.                         ValoresSQL := StringReplace(ValoresSQL,'-','.',[rfReplaceAll]);
  123.                   end;
  124.                   ftLargeint,
  125.                   ftInteger,
  126.                   ftSmallint : begin
  127.                         if cdTablas1.Fields[j].AsString = '' then
  128.                             ValoresSQL := ValoresSQL+'0'
  129.                         else ValoresSQL := ValoresSQL+cdTablas1.Fields[j].AsString;
  130.                   end;
  131.                   ftFloat,
  132.                   ftCurrency  : begin
  133.                         if cdTablas1.Fields[j].AsString = '' then
  134.                             ValoresSQL := ValoresSQL+'0.00'
  135.                         else ValoresSQL := ValoresSQL+cdTablas1.Fields[j].AsString;
  136.                   end;
  137.                   ftBoolean  : begin
  138.                         if cdTablas1.Fields[j].Value = True then
  139.                             ValoresSQL := ValoresSQL+'1'
  140.                         else ValoresSQL := ValoresSQL+'0';
  141.                   end;
  142.                   else begin
  143.                         ValoresSQL := ValoresSQL+cdTablas1.Fields[j].AsString;
  144.                   end;
  145.             end;
  146.             if j < cdTablas1.FieldCount-1 then begin
  147.                 CamposSQL  := CamposSQL + ',';
  148.                 ValoresSQL := ValoresSQL + ',';
  149.             end;
  150.         end;
  151.         IBQuery1.SQL.Text := 'INSERT INTO '+ Tablas.Items[i].Text+
  152.                               ' ('+CamposSQL+')'+
  153.                               ' VALUES ('+ValoresSQL+')';
  154.  
  155.  
  156.         // Si se desea se puede generar un log de las inserciones a la
  157.         // base de datos. Solo habilite las siguientes lineas.
  158.  
  159.         //AssignFile(Arch,'Query.log');
  160.         //If FileExists('Query.log') then
  161.         //  Append(Arch)
  162.         //else Rewrite(Arch);
  163.         //Writeln(Arch,IBQuery1.SQL.Text);
  164.         //CloseFile(Arch);
  165.       try
  166.         IBQuery1.ExecSQL;
  167.       except
  168.         on E: Exception do
  169.         begin
  170.           if E.ClassNameIs('EIBInterBaseError') then
  171.             begin
  172.             Mostrar('Ha ocurrido un problema en la migración de datos.', E.Message);
  173.             Abort;
  174.             end;
  175.           if E.ClassNameIs('EIBClientError') then
  176.             begin
  177.             Mostrar('Ha ocurrido un problema en la migración de datos.', E.Message);
  178.             Abort;
  179.             end;
  180.         end; //E: Exception
  181.       end;  //Except
  182.         cdTablas1.Next;
  183.       end;
  184.       cdTablas1.Close;
  185.       ZTablas1.Close;
  186.   end;
  187. end;
  188.   ShowMessage('Proceso de creación Finalizado');
  189. end;



Tremendo choclo ¿no?, bueno, me está sucediendo lo siguiente, estoy probando con una BD de 45 tablas, me crea 38 y se detiene en la no. 39, en la imagen aparece el error, si necesitan algo más me lo dicen.

Saludos.
  • 0

#86 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 febrero 2009 - 06:39

Hola amigo

El error es porque quieres crear una tabla con un campo de nombre numérico, para esos menesteres yo te sugiero que verifiques (cosa rara en una base) si el campo es numérico, en este caso 799, y en ese caso debes de agregarle comillas al nombre del campo para que no genere la excepción.

Por ejemplo:



sql
  1. CREATE TABLE PRUEBA (
  2.     "799"  INTEGER,
  3.     ACT_PATERNO  VARCHAR(10),
  4.     ACT_MATERNO  VARCHAR(10),
  5.     ACT_NOMBRES  VARCHAR(20),
  6.     ACT_FICHA_A  INTEGER
  7. );



Espero que te ayude.

Salud OS
  • 0

#87 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 febrero 2009 - 08:07

Gracias Egostar, efectivamente ese era mi problema, muchas gracias (y).

Saludos.
  • 0

#88 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 febrero 2009 - 08:22

Hola

Hice una prueba con mi code y no tuve problema para generar el campo con comillas. :s

Este es el code



delphi
  1.         if trystrtoint(NombreCampo,CampoNumerico) then
  2.           NombreCampo := '"'+NombreCampo+'"';
  3.  
  4.         NombreCampo := StringReplace(NombreCampo,'(','',[rfReplaceAll]);
  5.         NombreCampo := StringReplace(NombreCampo,')','',[rfReplaceAll]);
  6.         NombreCampo := TranslateChars(NombreCampo, CHARS_ACENTUADOS, CHARS_SINACENTO);



Salud OS
  • 0

#89 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 03 febrero 2009 - 07:42

Gracias Eliseo, me funcionó, estoy ahora en otra fase que es la de la migración de Datos a la BD ya creada anteriormente y me está ocurriendo el siguiente error:

---------------------------
Debugger Exception Notification
---------------------------
Project MTF.exe raised exception class EIBInterBaseError with message 'Your user name and password are not defined. Ask your database administrator to set up a Firebird login'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------


¿Alguien me podría ayudar a qué se debe eso?, el código está aquí.

Saludos.

  • 0

#90 Kipow

Kipow

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 228 mensajes
  • LocationGuatemala

Escrito 03 febrero 2009 - 09:39

La forma como estas asignando los parametros al IBDatabase no es la correcta ya que deben de llevar el signo "=" al contrario de ejecutar el codigo DDL directamente. quedaria y el parametro de usuario cambialo por USER_NAME para que quede asi:


delphi
  1. IBDatabase1.Params.Add('USER_NAME =  '+QuotedStr(edUser.Text));
  2. IBDatabase1.Params.Add('PASSWORD =  '+QuotedStr(edPass.Text));
  3. IBDatabase1.Params.Add('PAGE_SIZE = '+edPage.Text+'');




Aunque viendolo bien no seria mas facil ejecutar el codigo en un IBScript? algo como:


delphi
  1. IBScript1.Script.Add('SET SQL DIALECT 3;');
  2. IBScript1.Script.Add('SET NAMES ISO8859_1;');
  3. IBScript1.Script.Add('CREATE DATABASE '+QuotedStr(RutaBaseIB));
  4. IBScript1.Script.Add('USER '+QuotedStr(edUser.Text)+' PASSWORD '+QuotedStr(edPass.Text));
  5. IBScript1.Script.Add('PAGE_SIZE '+edPage.Text);
  6. IBScript1.Script.Add('DEFAULT CHARACTER SET ISO8859_1;');
  7.  
  8. IBScript1.ExecuteScript;




por cierto interesante proyecto, funcionara tambien a la inversa?  Firebird To MySQL?
  • 0

#91 Ayla

Ayla

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 98 mensajes

Escrito 04 febrero 2009 - 03:54

Hola,

Creo que el usuario que estás utilizando, no está definido en Firebird. Para mí que los tiros van por ahí, aunque no estoy del todo segura.

Para tema de usuarios y demás parámetros utilizo el componente TIBSegurityService, en la paleta de InterbaseAdmin.

Un ejemplo de como doy de alta un usuario en FireBird, TIBSegurityService (IBAdmin) :

Rellenar las propiedas del TIBSegurityService: ServerName, Protocol y colocar en SegurityAction la opción ActionAddUser




delphi
  1.   IBAdmin.UserName := 'tu_usuario';
  2.   IBAdmin.Password := 'tu_password';
  3.   IBAdmin.Attach;
  4.   IBAdmin.AddUser;
  5.   IBAdmin.Detach;



Espero que te sirva  (y)

Un saludo.
  • 0

#92 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 04 febrero 2009 - 12:27

Gracias Kipow, había probado el USER_NAME al crear las tablas pero me dió problemas al abrirlas, con USER no, haré la prueba con el signo "=" y USER_NAME a ver qué sucede, también he pensado hacerlo a la inversa FBD a MySQL, cuando termine con ésta, haré una versión dual.

Ayla, Muchas gracias también, nunca he usado u oído de ese componente cuando tenga una apertura lo estudiaré.

¡Gracias!, Saludos.
  • 0

#93 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 04 febrero 2009 - 05:27

Hola

Yo creo que lo que está pasando es que tienes habilitada la propiedad loginprompt del IBDataBase.

pon esto:



delphi
  1.   IBDatabase1.LoginPrompt := false;



antes de:



delphi
  1.   IBDatabase1.CreateDatabase;



Salud OS

  • 0

#94 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 04 febrero 2009 - 07:12

Gracias Egostar, con esa línea me evitará que me pida User y pass, ya pude resolver mi problema y migrar los datos a la BD, cambié el IBQuery que estaba utilizando por el IBSQL y un IBTransaction, al parecer IBQuery tiene algunos problemas con las versiones de Firebird mayores de 1.5 (en mi caso el 2.0).

Luego les seguiré comentando sobre proyecto, pronto estaré publicando el programa en su versión beta beta :p.

Saludos.
  • 0

#95 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 07 febrero 2009 - 08:11

Bueno aquí dejo el ejecutable de mi primera versión BETA 0.1 del MTF, pruebenlo, haganle pruebas lo que sea, ponganlo a sudar :p, y me comentan sus críticas, luego pondré el código fuentes en los siguientes días.

Saludos ;)

Archivos adjuntos


  • 0

#96 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 30 abril 2009 - 11:25

master and cheef

no se por que pero cada que kiero bajar algo me marca error al momento de abrirlo
sera que puedes resubir la version beta beta beta

digo para ponerlo a sudar como decias


  • 0

#97 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 30 abril 2009 - 11:39

master and cheef

no se por que pero cada que kiero bajar algo me marca error al momento de abrirlo
sera que puedes resubir la version beta beta beta

digo para ponerlo a sudar como decias


Ah vaya, el archivo esta corrupto, espero que enecumene actualice el archivo que por alguna causa se corrompio en la mudanza :s

Salud OS
  • 0

#98 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 30 abril 2009 - 01:32

En lo más pronto posible lo subiré de nuevo.

Saludos.
  • 0

#99 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 30 abril 2009 - 04:34

Actualizado el link de descarga, amigo Arroyoj puedes descargarte mi proyecto aquí­, ten libertad de comentar y criticar sobre este proyecto, debes tomar en cuenta que es una versión beta, espero que te sea de utilidad.

Saludos.
  • 0

#100 root

root

    mister

  • Miembro Platino
  • PipPipPip
  • 529 mensajes
  • LocationMexico D.F:

Escrito 06 mayo 2009 - 09:50

master and cheef

una pregunta
digo

no se pero solo trae un ejecutable dos carpetas vacias un dll y un ini
me pide las librerias de mysql

ya comenzo el criticon :s
  • 0




IP.Board spam blocked by CleanTalk.