Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird Database erstellen (https://www.delphipraxis.net/183737-firebird-database-erstellen.html)

strom 1. Feb 2015 09:12

Datenbank: Firebird • Version: 2.1 • Zugriff über: IBC

Firebird Database erstellen
 
Hallo,

habe ein Problem, eine DB mit Firebird zu erstellen!
Benutze die Komponente "IBDAC"

Was ist IBDatabase1 ?Diese Komponente finde ich nicht?

Hier ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  IBDatabase1.DatabaseName := 'GameDB.fdb'; // Was ist IBDatabase1? Diese Komponente gibt es nicht! 
  IBDatabase1.Params.Clear;
  IBDatabase1.Params.Add('USER ''SYSDBA'''); // Wenn hier USER_NAME angegeben wird funktioniert es nicht!
  IBDatabase1.Params.Add('PASSWORD ''masterkey'''); // Natürlich "nur" mit Leertaste
  IBDatabase1.Params.Add('PAGE_SIZE 4096');
  IBDatabase1.Params.Add('DEFAULT CHARACTER SET WIN1250');

  IBDatabase1.CreateDatabase;

  IBDatabase1.Connected := false;
  IBDatabase1.Params.Clear;
  IBDatabase1.Params.Add('USER_NAME=SYSDBA'); // Wenn hier USER angegeben wird funktioniert es nicht!
  IBDatabase1.Params.Add('PASSWORD=masterkey'); // Natürlich "nur" mit "="
  IBDatabase1.Connected := true;

  IBTransaction1.Active := true;

  with IBTable1 do begin
    active:=false; // Tablen-Zugriff muss auf jeden Fall geschlossen sein

    TableName:='HIGHSCORE'; // Tabellen Name IN UPPERCASE!!!
                                 // SONST FUNKTIONIERT ES NICHT
    with FieldDefs do begin // Eine kleine Tabelle um Highscores zu speichern...
      clear;
      Add('ID', ftInteger, 0, false); // AUTOINC Gibt es nicht, folgt später!!!
      Add('Game', ftString, 20, false);
      Add('UserID', ftString, 8, false);
      Add('PlayScore', ftInteger, 0, false);
      Add('PlayLevel', ftInteger, 0, false);
      Add('Playername', ftString, 40, false);
      Add('PlayerURL', ftString, 80, false);
      Add('PlayereMail', ftString, 80, false);
      Add('PlayerMessenger', ftString, 80, false);
      Add('Datum', ftDateTime, 0, false); // NICHT ETWAR TIMESTAMP das gibt es nicht...
    end;
    CreateTable;
  end;

mkinzler 1. Feb 2015 09:33

AW: Firebird Database erstellen
 
Der Code ist für IBX und nicht für IBDac. IBDatabase1 ist vom Typ TIBDatabase.
Bei IBDAC heißt die Klasse TIBCConnection

http://www.devart.com/ibdac/docs/
http://www.devart.com/ibdac/docs/components_ibdac.htm

Ich würde die Tabelle auch per SQL erstellen lassen (TIBCQuery oder noch besser TIBCScript)

SQL-Code:
create table highscore (
  id bigint not null,
  Game varchar(20) not null,
  UserID bigint not null, //Ich gehe davon aus, das ist ein FK
  PlayScore integer not null,
  PlayLevel ftInteger not null,
  Playername varchar(40) not null, //gehört in Usertabelle
  PlayerURL varchar(80) not null, // das auch
  PlayereMail varchar(80), //dito
  PlayerMessenger varchar(80) not null, //dito
  Datum, DateTime not null, //DateTime ist ein TimeStamp
  primary key (id));

strom 1. Feb 2015 10:05

AW: Firebird Database erstellen
 
Danke :-D

strom 1. Feb 2015 11:34

AW: Firebird Database erstellen
 
So,

wie kann ich jetzt überprüfen ob eine Database vorhanden ist, oder nicht!

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  begin
  IBCConnection1.Database := ExtractFilePath(Application.ExeName)+'Test.fdb';
  IBCConnection1.Params.Clear;
  IBCConnection1.Params.Add('USER ''SYSDBA''');
  IBCConnection1.Params.Add('PASSWORD ''masterkey''');
  IBCConnection1.Params.Add('PAGE_SIZE 4096');
  IBCConnection1.Params.Add('DEFAULT CHARACTER SET WIN1250');
  IBCConnection1.CreateDatabase;
  IBCConnection1.Connected := false;
  IBCConnection1.Params.Clear;
  IBCConnection1.Params.Add('USER_NAME=SYSDBA');
  IBCConnection1.Params.Add('PASSWORD=masterkey');
  IBCConnection1.Connected := true;
  IBCTransaction1.Active := true;
   with IBCTable1 do begin
     active:=false;
    TableName:='TEST';
     with FieldDefs do begin
      clear;
       Add('ID', ftInteger, 0, false); // AUTOINC Gibt es nicht, folgt später!!!
       Add('Game', ftString, 20, false);
       Add('UserID', ftString, 8, false);
       Add('PlayScore', ftInteger, 0, false);
       Add('PlayLevel', ftInteger, 0, false);
       Add('Playername', ftString, 40, false);
       Add('PlayerURL', ftString, 80, false);
       Add('PlayereMail', ftString, 80, false);
       Add('PlayerMessenger', ftString, 80, false);
       Add('Datum', ftDateTime, 0, false); // NICHT ETWAR TIMESTAMP das gibt es nicht...
     end;
   end;
  end;
end;

mjustin 1. Feb 2015 11:49

AW: Firebird Database erstellen
 
Zitat:

Zitat von strom (Beitrag 1288452)
wie kann ich jetzt überprüfen ob eine Database vorhanden ist, oder nicht!

Zum Beispiel so¿

Delphi-Quellcode:
  if FileExists(ExtractFilePath(Application.ExeName)+'Test.fdb') then
    // Datenbank ist vorhanden
    // ok, öffnen und damit arbeiten
  else
    // Datenbank ist nicht vorhanden
    // (nach Rückfrage:) neue Datenbank erstellen
  ...
end;
(ungetestet)

strom 1. Feb 2015 12:04

AW: Firebird Database erstellen
 
Hallo,

doch noch ein Fehler?

IBCTable.TableName // Steht nichts drin? Unter Eigenschaft 'TableName' ist das Ereignis leer?

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 if FileExists(ExtractFilePath(Application.ExeName)+'Test.fdb') then
  begin
   IBCTable1.TableName := 'Test';
   IBCTAble1.Active := true;
  end else
begin
  IBCConnection1.Database := ExtractFilePath(Application.ExeName)+'Test.fdb';
  IBCConnection1.Params.Clear;
  IBCConnection1.Params.Add('USER ''SYSDBA''');
  IBCConnection1.Params.Add('PASSWORD ''masterkey''');
  IBCConnection1.Params.Add('PAGE_SIZE 4096');
  IBCConnection1.Params.Add('DEFAULT CHARACTER SET WIN1250');
  IBCConnection1.CreateDatabase;
  IBCConnection1.Connected := false;
  IBCConnection1.Params.Clear;
  IBCConnection1.Params.Add('USER_NAME=SYSDBA');
  IBCConnection1.Params.Add('PASSWORD=masterkey');
  IBCConnection1.Connected := true;
  IBCTransaction1.Active := true;
   with IBCTable1 do begin
     active:=false;
    TableName:='TEST';
     with FieldDefs do begin
      clear;
       Add('ID', ftInteger, 0, false); // AUTOINC Gibt es nicht, folgt später!!!
       Add('ICON', ftString, 20, false);
       Add('EINSATZNR', ftString, 10, false);
       Add('DATUM', ftString, 10, false);
       Add('ZEIT', ftString, 10, false);
       Add('EINSATZSTATUS', ftString, 10, false);
       Add('EINSATZSTICHWORT', ftString, 20, false);
       Add('EINSATZSTADT', ftString, 40, false);
       Add('EINSATZORT', ftString, 40, false);
       Add('EINSATZADRESSE', ftString, 40, false);
       Add('EINSATZMELDUNG', ftString, 100, false);
       Add('ELPNAME', ftString, 40, false);
       Add('ELPIP', ftString, 40, false);
       Add('EINSATZHINWEIS', ftString, 40, false);
       Add('EINSATZOBJEKT', ftString, 100, false);
     end;
   end;
  end;
end;

strom 1. Feb 2015 12:21

AW: Firebird Database erstellen
 
Hallo mkinzler

wie würde das anlegen über TIBCScript aussehen?

strom 1. Feb 2015 13:00

AW: Firebird Database erstellen
 
Habe jetzt noch:

Delphi-Quellcode:
CreateTable;
hinzugefügt!

Fehlermeldung: Undeklarieter Bezeichner?

Perlsau 1. Feb 2015 14:03

AW: Firebird Database erstellen
 
Undeklarierter Bezeichner heißt: Diese Methode gibt es bei den IbDac-Queries nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz