PDA

Ver la Versión Completa : ¿Cómo creo una base de datos desde Delphi?


Thoma
26-07-2011, 11:32:05
Hola, de nuevo estoy retomando el Delphi y mi duda es la siguiente:
Cuando intento conectarme a una base de datos y esta no existe, quiero crearla desde Delphi.
Hojeando un libro me pone lo siguiente:
Create database “c:\pruebas.GDB” User “ SYSDBA” password “masterkey” page_size 2048;
¿Para utilizar estas instrucciones hace falta algún componente específico?
¿Hay alguna otra forma de crear la base de datos desde Delphi?

guillotmarc
26-07-2011, 13:47:44
Hola.

Es bastante habitual tener un archivo de datos en blanco, y copiarlo a una nueva base de datos para crearlo.

Puesto que vas a tener dificultades para crear una base de datos en código Delphi. La mayoría de componentes de conexión necesitan primero conectarse a una base de datos para poder lanzarle consultas. Por lo tanto no puedes crear la base de datos, puesto que primero necesitas conectarte a una base de datos existente.

Yo utilizo esto de copiar una base de datos en blanco que siempre tengo disponible. Probablemente otros usuarios te puedan aportar más soluciones.

Saludos.

Thoma
26-07-2011, 15:30:04
Estoy revisando un manual que he encontrado por internet sobre los componentes Zeos y pone lo siguiente:
CreateNewDataBase:

TZConnection
:
ZConnection1.Database := 'd:\db1.fdb';
ZConnection1.Protocol := 'firebird-1.5';
ZConnection1.Properties.Add ('CreateNewDatabase=CREATE DATABASE ' +
QuotedStr ('d:\db1.fdb') + ' USER ' +
QuotedStr ('sysdba') + ' PASSWORD ' + QuotedStr ('masterkey') +
' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
ZConnection1.Connect;
:
He intentado instalar los componentes Zeos, pero me da una serie de errores y no puedo instalarlos. Utilizo el Delphi XE, no sé si por ello es por lo que no puedo instalarlos.

guillotmarc
26-07-2011, 18:21:25
He intentado instalar los componentes Zeos, pero me da una serie de errores y no puedo instalarlos. Utilizo el Delphi XE, no sé si por ello es por lo que no puedo instalarlos.

Si detallas los errores que te encuentras, quizás te podamos ayudar.

Thoma
27-07-2011, 10:48:46
Cuando activo el ZComponent150.bpl y lo compilo me da los siguientes errores:

[DCC Error] ZComponent.dpk(58): E1030 Invalid compiler directive: '$ENDIF'
[DCC Fatal Error] ZComponent.dpk(58): F2063 Could not compile used unit '..\..\src\component\ZStreamBlob.pas'


package ZComponent;
{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS ON}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'Zeos Database Components'}
{$LIBSUFFIX '150'}
{$RUNONLY}
{$IMPLICITBUILD OFF}

requires
rtl,
dbrtl,
ZPlain,
ZDbc,
ZCore,
ZParseSql,
vclactnband,
vcl;

contains
ZSqlUpdate in '..\..\src\component\ZSqlUpdate.pas',
ZAbstractDataset in '..\..\src\component\ZAbstractDataset.pas',
ZAbstractRODataset in '..\..\src\component\ZAbstractRODataset.pas',
ZStreamBlob in '..\..\src\component\ZStreamBlob.pas',
ZAbstractConnection in '..\..\src\component\ZAbstractConnection.pas',
ZGroupedConnection in '..\..\src\component\ZGroupedConnection.pas',
ZConnectionGroup in '..\..\src\component\ZConnectionGroup.pas',
ZConnection in '..\..\src\component\ZConnection.pas',
ZDataset in '..\..\src\component\ZDataset.pas',
ZDatasetUtils in '..\..\src\component\ZDatasetUtils.pas',
ZSqlStrings in '..\..\src\component\ZSqlStrings.pas',
ZSqlProcessor in '..\..\src\component\ZSqlProcessor.pas',
ZSqlMonitor in '..\..\src\component\ZSqlMonitor.pas',
ZStoredProcedure in '..\..\src\component\ZStoredProcedure.pas',
ZAbstractTable in '..\..\src\component\ZAbstractTable.pas',
ZSqlMetadata in '..\..\src\component\ZSqlMetadata.pas',
ZSequence in '..\..\src\component\ZSequence.pas'

{$ENDIF};

end.

Neftali [Germán.Estévez]
27-07-2011, 11:40:11
Para el error de la directiva simplemente elimina el {ENDIF} que hay al final. Esta desparejado. A mi tambien me ha pasado al compilar la version 7.

P.D: Los errores y acentos no estçan puestos porque a mi teclado no le sale de los coj.... ponerlos. :(

Thoma
27-07-2011, 12:35:11
He comentado en {ENDIF} y ahora me da éste error:

[Fatal Error] Error in module ZComponent: CONTAINS clause is incorrect

Neftali [Germán.Estévez]
27-07-2011, 12:54:10
He comentado en {ENDIF} y ahora me da éste error:

[Fatal Error] Error in module ZComponent: CONTAINS clause is incorrect

¿Has dejado bien el ; ?
Yo lo tengo igual que tú y las tengo instaladas.


package ZComponent;
{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS ON}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'Zeos Database Components'}
{$LIBSUFFIX '150'}
{$RUNONLY}
{$IMPLICITBUILD OFF}

requires
rtl,
dbrtl,
ZPlain,
ZDbc,
ZCore,
ZParseSql,
vclactnband,
vcl;

contains
ZSqlUpdate in '..\..\src\component\ZSqlUpdate.pas',
ZAbstractDataset in '..\..\src\component\ZAbstractDataset.pas',
ZAbstractRODataset in '..\..\src\component\ZAbstractRODataset.pas',
ZStreamBlob in '..\..\src\component\ZStreamBlob.pas',
ZAbstractConnection in '..\..\src\component\ZAbstractConnection.pas',
ZGroupedConnection in '..\..\src\component\ZGroupedConnection.pas',
ZConnectionGroup in '..\..\src\component\ZConnectionGroup.pas',
ZConnection in '..\..\src\component\ZConnection.pas',
ZDataset in '..\..\src\component\ZDataset.pas',
ZDatasetUtils in '..\..\src\component\ZDatasetUtils.pas',
ZSqlStrings in '..\..\src\component\ZSqlStrings.pas',
ZSqlProcessor in '..\..\src\component\ZSqlProcessor.pas',
ZSqlMonitor in '..\..\src\component\ZSqlMonitor.pas',
ZStoredProcedure in '..\..\src\component\ZStoredProcedure.pas',
ZAbstractTable in '..\..\src\component\ZAbstractTable.pas',
ZSqlMetadata in '..\..\src\component\ZSqlMetadata.pas',
ZSequence in '..\..\src\component\ZSequence.pas';

end.

Thoma
27-07-2011, 13:37:12
He estado estableciendo las rutas en el Paht y al compilar el archivo ZComponentDesing150.bpl me da algunos Warnig's. y al hacer la Instalación me dice los siguiente:
"El programa no puede iniciarse porque falta ZComponent150.bpl en el equipo. Intente reinstalar el programa para corregir este problema"

y al pulsar Aceptar me da otro mensaje:
Can't load package ...\ZComponentDesign150.bpl. No se pude encontrar el modulo especificado.

José Luis Garcí
27-07-2011, 16:46:07
Hola Thoma, yo lo que hago es lo siguiente, selecciono la ruta de la siguiente manera

procedure TFCreadorTablas.Button1Click(Sender: TObject);
//------------------------------------------------------------------------------
//****************************************************[ Cargamos la ruta ]******
//------------------------------------------------------------------------------
begin
if SaveDialog1.Execute then
begin
Label1.Caption:=ExtractFilePath(SaveDialog1.FileName);
end;
end;

en un edit pongo el nombre y sólo el nombre de la BD, sin extensión y pulso el boton crear BD, con el siguiente código

procedure TFCreadorTablas.Button3Click(Sender: TObject);
//------------------------------------------------------------------------------
//********************************************[ CReamos La Base De Datos ]******
//------------------------------------------------------------------------------
var VarSRut:string;
begin
if Label1.Caption='' then VarSRut:='C:\'+Edit1.Text+'.FDB'
else VarSRut:=Label1.Caption+Edit1.Text+'.FDB';
IBDatabase1.DatabaseName := VarSRut;
IBDatabase1.Params.Clear;
IBDatabase1.Params.Add('user ''SYSDBA''');
IBDatabase1.Params.Add('password ''masterkey''');
IBDatabase1.Params.Add('PAGE_SIZE = 4096');
IBDatabase1.SQLDialect := 3;
IBDatabase1.CreateDatabase;
showMessage ('Base de Datos Creada'+#13+ #13+
'Grabado en la ruta: '+VarSRut);
end;


Como vez sólo uso un Ibdataset, para su creación, claro que mi programa tiene más funciones, pero para crear la BD, espero sea lo que buscas.

Neftali [Germán.Estévez]
27-07-2011, 16:48:10
A mi para que me funcione (se me olvido comentártelo) he tenido que ca,biar la ruta de todos los packages:

http://img233.imageshack.us/img233/3008/imagen781.png

Esto para todos los packages.

Thoma
27-07-2011, 19:39:40
Jose Luis Garci, he probado la forma de crear la BD según el ejemplo que me has puesto y me ha funcionado. ¡¡Muchas Gracias!!
....
Neftali, he probado poniendo la ruta según como me dices, pero sigue dandome los mismos errores.

José Luis Garcí
27-07-2011, 20:27:16
Me alegro que te funcionara Thoma