Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Copiar la estructura de paradox a mysql

Estoy haciendo un programa para copiar los datos de unas tablas de paradox a MySql, el programa es muy sencillo pero necesita que la estructura de las tablas sea la misma en paradox y en mysql. En pricipio crear las tablas en MySql se pensaba hacer "a mano", pero he pensado que se podria automatizar el proceso de alguna manera.

Por ahora tengo el siguiente codigo que a partir de las tablas en paradox me genera un script para crear las tablas en MySql. Me gustaria que le echaseis un vistazo y me dierais vuestra opinion, decirme donde se puede mejorar, si estan bien escogidas las equivalencias entre los tipos de datos en paradox y en mysql, etc ...

Código Delphi [-]
var
  i,j: Integer;
  Str: String;
  Script, Conf, Aux: TStringList;
  Tabla: TTable;
begin
  with TSaveDialog.Create(nil) do
  try
    Filter:= '*.sql|*.sql';
    if Execute then
    begin
      Script:= TStringList.Create;
      try
        Conf:= TStringList.Create;
        // La lista con las tablas la guardo en un txt separado por comas
        Conf.LoadFromFile(ChangeFileExt(ParamStr(0),'.lst'));
        try
          Aux:= TStringList.Create;
          try
            Aux.Delimiter:= ';';
            Aux.QuoteChar:= '"';
            Script.Add('-- Script para crear las tablas');
            Script.Add('--');
            Script.Add('/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;');
            Script.Add('/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;');
            Script.Add('/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;');
            Script.Add('/*!40101 SET NAMES utf8 */;');
            Script.Add('');
            Script.Add('/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;');
            Script.Add('/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;');
            Script.Add('/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=''NO_AUTO_VALUE_ON_ZERO'' */;');
            Script.Add('');
            Tabla:= TTable.Create(nil);
            try
              for i:= 0 to Conf.Count - 1 do
              begin
                Aux.DelimitedText:= Conf.Strings[i];
                if Aux.Count <> 6 then
                  Continue;
                Str:= ExtractFileName(Aux[1]);
                Script.Add('DROP TABLE IF EXISTS `' + ChangeFileExt(Str,'') + '`;');
                Script.Add('CREATE TABLE `' + ChangeFileExt(Str,'') + '` (');
                Tabla.Active:= FALSE;
                Tabla.DatabaseName:= ExtractFilePath(Aux[1]);
                Tabla.TableName:= Str;
                Tabla.Open;
                for j:= 0 to Tabla.FieldCount - 1 do
                begin
                  Str:= '  `' + Tabla.Fields[j].FieldName + '` ';
                  case Tabla.Fields[j].DataType of
                    ftString: begin
                      Str:= Str + Format('VARCHAR(%d) NOT NULL default '''',',
                        [Tabla.Fields[j].DataSize]);
                    end;
                    ftSmallint: begin
                      Str:= Str + 'SMALLINT(6) NOT NULL default ''0'',';
                    end;
                    ftInteger: begin
                      Str:= Str + 'INT(11) NOT NULL default ''0'',';
                    end;
                    ftBoolean: begin
                      Str:= Str + 'TINYINT(1) NOT NULL default ''0'',';
                    end;
                    ftFloat: begin
                      Str:= Str + 'FLOAT(12) NOT NULL default ''0.00'',';
                    end;
                    ftCurrency: begin
                      Str:= Str + 'DECIMAL(10,2) NOT NULL default ''0.00'',';
                    end;
                    ftDate: begin
                      Str:= Str + 'DATE NOT NULL default ''1000-01-01'',';
                    end;
                    ftTime: begin
                      Str:= Str + 'TIME NOT NULL default ''00:00:00'',';
                    end;
                    ftDateTime: begin
                      Str:= Str + 'DATETIME NOT NULL default ''1000-01-01 00:00:00'',';
                    end;
                    ftGraphic: begin
                      Str:= Str + 'MEDIUMBLOB,';
                    end;
                    ftBlob: begin
                      Str:= Str + 'MEDIUMBLOB,';
                    end;
                    ftAutoInc: begin
                      Str:= Str + 'INT(11) NOT NULL default ''0'',';
                    end;
                    ftMemo: begin
                      Str:= Str + 'VARCHAR(255) NOT NULL default '''',';
                    end;
                  end;
                  Script.Add(Str);
                end;
                Str:= '  PRIMARY KEY (';
                for j:= 0 to Tabla.FieldCount - 1 do
                begin
                  if Tabla.Fields[j].IsIndexField then
                  begin
                    if j > 0 then
                      Str:= Str + ',';
                    Str:= Str + '`' + Tabla.Fields[j].FieldName +  '`';  
                  end;
                end;
                Script.Add(Str + ')');
                Script.Add(') ENGINE=MyISAM DEFAULT CHARSET=latin1;');
                Script.Add('');
              end;
            finally
              Tabla.Free;
            end;
            Script.Add('/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;');
            Script.Add('/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;');
            Script.Add('/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;');
            Script.Add('/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;');
            Script.Add('/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;');
            Script.Add('/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;');
            Script.Add('/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;');
            Script.SaveToFile(Filename);
          finally
            Aux.Free;
          end;
        finally
          Conf.Free;
        end;
      finally
        Script.Free;
      end;
    end;
  finally
    Free;
  end;
end;

Espero vuestras opiniones ...
Responder Con Cita
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener estructura de Tablas Paradox Coco_jac Varios 6 09-02-2007 05:14:59
Copiar estructura Paradox ? Coco_jac Varios 5 07-12-2005 16:31:11
API DBE estructura RINTQual Integridad referencia Paradox kike Conexión con bases de datos 0 29-03-2005 10:47:51
Copiar estructura de una base de datos a una nueva en Delphi?? burasu Conexión con bases de datos 0 30-12-2004 09:35:51
Comparar estructura tablas paradox Joana Tablas planas 0 14-05-2004 10:47:26


La franja horaria es GMT +2. Ahora son las 05:15:47.


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