Ir al contenido


Foto

Metadatos firebird


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

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 21 julio 2009 - 10:44

Hola a todos

haciendo algunas investigaciones sobre los problemas con mi base de datos, la cual estaba creando de nuevo.
Encontre este programa en delphi al limite, el cual se encarga de darme la informacion sobre las diferentes tablas
y sus metadatos.

Deberia indicarme por ejemplo:

ID        integer not null,
Nombre  varchar(100),

y asi sucesivamente, pero solo me da:

ID
Nombre

Quisiera revisaran este programita para ver cual es el error que estoy cometiendo.

Imagen Enviada




Archivos adjuntos


  • 0

#2 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 21 julio 2009 - 12:53

ya lo corregi, habia un error en la primera linea donde faltaba sumar la apertura del parentesis


delphi
  1. Memo.Lines.Add( 'CREATE TABLE ' + TABLAS.Text + ' (' ); 



arregle el codigo del arriba, por si le sirve a alguien.  La idea es poder copiar las extructuras de las tablas.

  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 21 julio 2009 - 12:58

Hola

Tu problema es que no encuentra ningún valor en la comparación que estas haciendo con:



delphi
  1. fielddefs.Items[i].FieldClass.ClassName



En su lugar debes de comparar el tipo de dato contra el DataType y no contra el nombre de la clase.



delphi
  1. fielddefs.Items[i].DataType



Así­ quedarí­a mas o menos tu procedimiento:



delphi
  1. procedure TForm1.MOSTRARClick(Sender: TObject);
  2. VAR
  3.   i:integer;
  4.   sTipo:string;
  5. begin
  6.   with IBQuery1 do begin
  7.     memo.Lines.Add( 'CREATE TABLE ' + TABLAS.Text);
  8.     SQL.Clear;
  9.     SQL.Add(' select * from ' + TABLAS.Text);
  10.     Open;
  11.     for I :=0 to fieldDefs.Count -1 do begin
  12.         sTipo := '';
  13.         case fielddefs.Items[i].DataType of
  14.             ftString,
  15.             ftWideString : Stipo := ' VarChar(' +
  16.                                 Inttostr(fieldbyname(fieldDefs.Items[i].Name ).Size )+
  17.                                 ') ';
  18.             ftFloat      : Stipo := ' DOUBLE PRECISION ';
  19.             ftInteger    : Stipo := ' INTEGER ';
  20.             ftDate      : Stipo := ' DATE ';
  21.             ftTime      : Stipo := ' TIME ';
  22.             ftDateTime,
  23.             ftTimeStamp  : Stipo := ' TIMESTAMP ';
  24.             ftBlob      : Stipo := ' BLOB ';
  25.         end;
  26.         // Es un campo Obligatorio?
  27.         if FieldByName(fieldDefs.Items[i].name).Required then
  28.           stipo :=stipo + ' NOT NULL';
  29.         memo.Lines.Add('  ' + fieldDefs.Items[i].Name + ' ' + stipo);
  30.         // si no es el ultimo campo añadimos una cosa al final
  31.         if i < fieldDefs.Count -1 then
  32.           memo.Lines[memo.lines.Count-1] := memo.Lines[memo.Lines.count-1] + ',';
  33.     end;
  34.     memo.Lines.Add( ')' );
  35.     close;
  36.     Transaction.Active :=false;
  37.   end;
  38. end;



Salud OS

PD, te hacen falta mas tipos de datos.
  • 0

#4 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 21 julio 2009 - 01:04

gracias egostar, Voy a probar tu codigo y ademas se ve mejor.
Pero en la version ultima cheque que si funciona, solo faltaba el parentesis.






  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 21 julio 2009 - 01:52

gracias egostar, Voy a probar tu codigo y ademas se ve mejor.
Pero en la version ultima cheque que si funciona, solo faltaba el parentesis.


Ah bueno, si te funciona así­ como lo diseñaste, me parece muy bien, (y)

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.