Proyecto MTF (MySQL to Firebird)
#1
Escrito 08 noviembre 2008 - 07:32
A medida que avanzo la cosa se verá mejor, el que quiera ayudarme con este proyecto, será sumamente bienvenido .
Saludos.
#2
Escrito 10 noviembre 2008 - 02:25
Saludos.
#3
Escrito 10 noviembre 2008 - 03:57
#4
Escrito 10 noviembre 2008 - 07:14
SHOW INDEX FROM tabla FROM basededatos
Ahora lo que no sé si haciendo con un query funcionaría como la propiedad IndexDefs de las IBX, haré la prueba y luego les comento.
Saludos.
#5
Escrito 11 noviembre 2008 - 06:02
#6
Escrito 11 noviembre 2008 - 06:32
Saludos.
#7
Escrito 11 noviembre 2008 - 06:47
#8
Escrito 11 noviembre 2008 - 06:51
mysql> SHOW INDEX FROM reg_pedidos FROM sigesped; +-------------+------------+----------+--------------+-------------+-----------+ -------------+----------+--------+------+------------+---------+ | TABLE | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | NULL | Index_type | Comment | +-------------+------------+----------+--------------+-------------+-----------+ -------------+----------+--------+------+------------+---------+ | reg_pedidos | 0 | PRIMARY | 1 | no | A | 4185 | NULL | NULL | | BTREE | | +-------------+------------+----------+--------------+-------------+-----------+ -------------+----------+--------+------+------------+---------+ 1 ROW IN SET (0.00 sec)
Saludos.
#9
Escrito 11 noviembre 2008 - 07:03
#10
Escrito 11 noviembre 2008 - 07:13
Saludos.
#11
Escrito 12 noviembre 2008 - 10:23
http://www.oreillyne...ndexes_usi.html
donde me enteré que existe un view llamado STATISTICS que contiene toda la información de índices, entre otras cosas. En la misma página podrás ver algunos ejemplos de querys, tal vez eso te pueda ayudar.
#12
Escrito 12 noviembre 2008 - 10:38
Saludos.
#13
Escrito 13 noviembre 2008 - 06:30
El SynEdit al parecer es un descendiente del TMemo y hay algo que no me convence, y es que cada salto de línea lo sustituye con un cuadrito si se fijan en la imagen anterior ya comprenderán a lo que me refiero, en un RichEdit, eso no sucede. ¿Alquien me puede decir cómo corregir eso?.
Un Saludos compañeros.
#14
Escrito 13 noviembre 2008 - 07:34
mysqlDDL.lines.Add(ZShowCreate.Fields[1].AsString);
De esa forma no me calculaba el salto de línea, así que lo resolví haciendolo de esta manera:
mysqlDDL.text := ZShowCreate.Fields[1].AsString;
Hasta el momento estoy terminando la parte del muestreo de información de datos MySQL para luego entrar a la migración a DDL de Firebird.
Eso es todo por hoy,
Saludos.
#15
Escrito 14 noviembre 2008 - 08:24
[move]Miren que lindo se mueve esta linea ...[/move]
#16
Escrito 14 noviembre 2008 - 09:35
por fin que resolvistes con los indices???
Lo de los índices viene en la parte de generar el DDL de firebird, decidí hacerlo por parte para ir programando organizadamente, ya casi llego a esa parte, es probable que hoy trabaje con ese asunto.
Saludos.
#17
Escrito 17 noviembre 2008 - 06:36
Saludos.
#18
Escrito 17 noviembre 2008 - 07:17
procedure TFMain.Button4Click(Sender: TObject); Var Lineas,I,J,Idx: Integer; Separador: String; NombreCampo,Indice: String; begin Memo1.Clear; for i := 0 to Tablas.Items.Count - 1 do begin ZTablas.Close; ZTablas.TableName := Tablas.Items[i].Text; Try ZTablas.Open; cdTablas.Open; except ShowMessage('se produjo un problema al abrir'); Exit; End; cdTablas.First; Memo1.Lines.Add('CREATE TABLE '+UpperCase(Tablas.Items[i].Text)); Memo1.Lines.Add('('); for J := 0 to cdTablas.FieldCount-1 do begin if J < cdTablas.FieldCount-1 then Separador := ',' else begin if (J = cdTablas.FieldCount-1) and (cdTablas.IndexFieldCount > 0) then begin Separador := ','; end else Separador := ' '; end; if cdTablas.Fields[j].IsIndexField then Separador := ' NOT NULL' + Separador; NombreCampo := cdTablas.Fields[j].FieldName; If UpperCase(NombreCampo) = 'PASSWORD' Then NombreCampo := 'PASSCODE'; If UpperCase(NombreCampo) = 'SIZE' Then NombreCampo := 'SIZE1'; //Elimine estas lineas porque agregué caracteres a las constantes //usadas por la función TranslateChars() de Federico Firenze //NombreCampo := StringReplace(NombreCampo,' ','_',[rfReplaceAll]); //NombreCampo := StringReplace(NombreCampo,'ñ','n',[rfReplaceAll]); //NombreCampo := StringReplace(NombreCampo,'Ñ','N',[rfReplaceAll]); NombreCampo := StringReplace(NombreCampo,'(','',[rfReplaceAll]); NombreCampo := StringReplace(NombreCampo,')','',[rfReplaceAll]); NombreCampo := TranslateChars(NombreCampo, CHARS_ACENTUADOS, CHARS_SINACENTO); case cdTablas.Fields[j].DataType of ftString, ftWideString: begin Memo1.Lines.Add(' '+NombreCampo+' VARCHAR('+ inttostr(cdTablas.Fields[j].DisplayWidth)+')'+ Separador); end; ftFloat : begin Memo1.Lines.Add(' '+NombreCampo+' FLOAT'+Separador); end; ftCurrency : begin Memo1.Lines.Add(' '+NombreCampo+' NUMERIC(10,2)'+Separador); end; ftTime : begin Memo1.Lines.Add(' '+NombreCampo+' TIME'+Separador); end; ftDate : begin Memo1.Lines.Add(' '+NombreCampo+' DATE'+Separador); end; ftDateTime, ftTimeStamp : begin Memo1.Lines.Add(' '+NombreCampo+' TIMESTAMP'+Separador); end; ftAutoInc, ftInteger : begin Memo1.Lines.Add(' '+NombreCampo+' INTEGER'+Separador); end; ftMemo : begin Memo1.Lines.Add(' '+NombreCampo+' BLOB SUB_TYPE 1'+Separador); end; ftBlob, ftTypedBinary, ftGraphic : begin Memo1.Lines.Add(' '+NombreCampo+' BLOB SUB_TYPE 0'+Separador); end; ftBoolean, ftSmallint : begin Memo1.Lines.Add(' '+NombreCampo+' SMALLINT'+Separador); end; end; end; if cdTablas.IndexFieldCount > 0 then begin for Idx := 0 to cdTablas.IndexDefs.Count - 1 do begin Indice := cdTablas.IndexDefs[Idx].Fields; If UpperCase(Indice) = 'PASSWORD' Then Indice := 'PASSCODE'; If UpperCase(Indice) = 'SIZE' Then Indice := 'SIZE1'; Indice := StringReplace(Indice,'(','',[rfReplaceAll]); Indice := StringReplace(Indice,')','',[rfReplaceAll]); Indice := TranslateChars(Indice, CHARS_ACENTUADOS, CHARS_SINACENTO); with cdTablas.IndexDefs[Idx] do begin if ixPrimary in Options then begin Memo1.Lines.Add(' CONSTRAINT PK_'+Tablas.Items[i].Text+' PRIMARY KEY ('+Indice+')'); Memo1.Lines.Add(');'); Memo1.Lines.Add(''); end; if ixCaseInsensitive in Options then begin Memo1.Lines.Add('CREATE INDEX '+Tablas.Items[i].Text+'_IDX'+inttostr(Idx)+ ' ON '+Tablas.Items[i].Text+' ('+Indice+');'); Memo1.Lines.Add(''); end; end; end; end else begin Memo1.Lines.Add(');'); Memo1.Lines.Add(''); end; end; end;
El resultado es este:
CREATE TABLE AREA
(
area VARCHAR(25)
);
CREATE TABLE CAJACHICA
(
area VARCHAR(25)
);
CREATE TABLE CARTADETALLES
(
area VARCHAR(25)
);
CREATE TABLE CARTASORDEN
(
area VARCHAR(25)
);
CREATE TABLE CAT_USER
(
area VARCHAR(25)
);
CREATE TABLE COMPCAJA
(
area VARCHAR(25)
);
CREATE TABLE CUENTAS
(
area VARCHAR(25)
);
CREATE TABLE DEPARTAMENTO
(
area VARCHAR(25)
);
CREATE TABLE DESPEXP
(
area VARCHAR(25)
);
CREATE TABLE DOCUMENTO
(
area VARCHAR(25)
);
CREATE TABLE FACTURAS
(
area VARCHAR(25)
);
CREATE TABLE FONDO
(
area VARCHAR(25)
);
CREATE TABLE HIST_TRA
(
area VARCHAR(25)
);
CREATE TABLE HISTORICO
(
area VARCHAR(25)
);
CREATE TABLE ITEMS
(
area VARCHAR(25)
);
CREATE TABLE MODALIDAD
(
area VARCHAR(25)
);
CREATE TABLE MONEDA
(
area VARCHAR(25)
);
CREATE TABLE ORDENES
(
area VARCHAR(25)
);
CREATE TABLE ORDENGAS
(
area VARCHAR(25)
);
CREATE TABLE ORDGASDETALLES
(
area VARCHAR(25)
);
CREATE TABLE PED_DETALLES
(
area VARCHAR(25)
);
CREATE TABLE REG_PEDIDOS
(
area VARCHAR(25)
);
CREATE TABLE REPOSICION
(
area VARCHAR(25)
);
CREATE TABLE RESPONSABLES
(
area VARCHAR(25)
);
CREATE TABLE RESPONSABLES1
(
area VARCHAR(25)
);
CREATE TABLE RUBROS
(
area VARCHAR(25)
);
CREATE TABLE SISTEMA
(
area VARCHAR(25)
);
CREATE TABLE STATUS
(
area VARCHAR(25)
);
CREATE TABLE STATUS_ORDEN
(
area VARCHAR(25)
);
CREATE TABLE STATUS_OUT
(
area VARCHAR(25)
);
CREATE TABLE STATUS_PAGO
(
area VARCHAR(25)
);
CREATE TABLE SUPLI_RUBRO
(
area VARCHAR(25)
);
CREATE TABLE SUPLIDORES
(
area VARCHAR(25)
);
CREATE TABLE TRAMITES
(
area VARCHAR(25)
);
CREATE TABLE URGENCIA
(
area VARCHAR(25)
);
CREATE TABLE USERS
(
area VARCHAR(25)
);
CREATE TABLE USERS_LOGGED
(
area VARCHAR(25)
);
CREATE TABLE USERS_LOGS
(
area VARCHAR(25)
);
Como pueden ver, no está recorriendo correctamente los campos de cada tabla pero si las tablas contenidas en un TreeView, asume el único campo de la primera tabla y la asigna a todas.
Saludos.
#19
Escrito 18 noviembre 2008 - 08:49
#20
Escrito 18 noviembre 2008 - 06:05
Y no te hace falta esto ? ? ?
cdTablas.next;
Salud OS