Thema: Delphi Create Tables

Einzelnen Beitrag anzeigen

wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#1

Create Tables

  Alt 11. Sep 2023, 11:56
Datenbank: Interbase • Version: 6.5 • Zugriff über: IBX-Comp.
Hi,
mein problem ist folgendes:

Wenn ich eine Datenbank neu anlege(CreateDatabase) und INNERHALB dieser procedure die Tables MIT anlege('CREATE TABLE MySQL1 ') funktioniert alles bestens! Auch die Tables werden angelegt.
Wenn ich jedoch die Zeile tables_anlegen (siehe Pfeil) herausnehme und somit nur eine leere Datenbank erzeuge, dann das Programm verlasse und wieder
neu starte und die procedure 'Tables_anlegen' über einen Button starte kommt die Runtimeerror : 'Operation cancelled at users request.'
Was kann ich da machen?


Delphi-Quellcode:
(*  DataBase + Tables anlegen DataBase + Tables anlegen *)
          (*  TEIL1 --- TEIL1 --- TEIL1  *)
(******************************************************************************)
 procedure TForm3.SpeedButton2Click(Sender: TObject);
(******************************************************************************)
VAR DBPath : STRING;
    MyResult : String;
const
  cCreateTxt = ' %d. Versuch: Datenbank wird erstellt...';
  cReadyTxt = 'Datenbank wird erstellt!';
begin
  MyResult := GetCurrentDir; // bestimmen des Arbeitsverzeichnisses
  g_ArbeitsVerz := MyResult;
  g_DBPfad := g_ArbeitsVerz + '\DB';
  DBPath := g_DBPfad + '\My_IB_DB.gdb';
  EditDBPath.Text := DBPath;
  If not FileExists(g_DBPfad + '\My_IB_DB.gdb') then
  begin
    Screen.Cursor := crHourGlass;
    If DataModule2.IBD.LoginPrompt = TRUE THEN DataModule2.IBD.LoginPrompt := FALSE;
    IF DataModule2.IBD.Connected = TRUE THEN DataModule2.IBD.Connected := FALSE;
    DataModule2.IBD.Params.Clear;
    try
      try
        StatusBar1.SimpleText := Format(cCreateTxt, [1]);
        StatusBar1.Refresh;
        with DataModule2.IBD do
        begin
          DatabaseName := EditDBPath.Text;
          Params.Add(Format('USER ''%s''',[EditUserName.Text]));
          Params.Add(Format('PASSWORD ''%s''', [EditPassword.Text])); // nur so geht es
          SQLDialect:= 3; // mit Dialekt 3 !
          Params.Add('PAGE_SIZE 4096'); // SQLDialect'3'-->
          Params.Add('DEFAULT CHARACTER SET ISO8859_1'); // wahrscheinlich wegen
          CreateDatabase; // Double-Quotes !!
        end;
        StatusBar1.SimpleText := cReadyTxt;
  -->> tables_anlegen;
        SpeedButton3.Enabled := False;
        except
        on E:EDatabaseError do // IBD.Params.Add( Format( 'USER ''%s''', [Username] ) );
                                                          // IBD.Params.Add( Format( 'PASSWORD ''%s''', [Password] ) );
        begin
          MessageBeep(MB_ICONEXCLAMATION);
          MessageDlg(E.Message, mtError, [mbOk], 0);
        end;
      end;
      finally
      Screen.Cursor := crDefault;
    end;
  end ELSE ShowMessage(' Die Datenbank existiert schon !');
end;
Delphi-Quellcode:
(*  DataBase + Tables anlegen DataBase + Tables anlegen *)
          (*  TEIL2 --- TEIL2 --- TEIL2  *)
(******************************************************************************)
 Procedure TForm3.Tables_anlegen;
(******************************************************************************)
VAR s,t : STRING;

begin

   s := 'CREATE TABLE MySQL1 '
       + '('
       + ' ID1 INTEGER NOT NULL PRIMARY KEY, '
       + ' Stock CHAR(35), '
       + ' Ind CHAR(15), '
       + ' IndPe INTEGER NOT NULL, '
       + ' LongAm DATE, '
       + ' PriceLong NUMERIC(15,2), '
       + ' ShortAm DATE, '
       + ' PriceShort NUMERIC(15,2), '
       + ' Days INTEGER, '
       + ' Profit NUMERIC(15,2), '
       + ' SumProfit NUMERIC(15,2), '
       + ' Balance NUMERIC(15,2) '
       + ');';

   t := 'CREATE TABLE MySQL2 '
       + '('
       + ' ID2 INTEGER NOT NULL PRIMARY KEY, '
       + ' BuyAndHold NUMERIC(15,2), '
       + ' Commission NUMERIC(15,2), '
       + ' SumComm NUMERIC(15,2) '
       + ');';


  with Datamodule2 do
  begin
  IF IBD.LoginPrompt = FALSE THEN IBD.LoginPrompt := TRUE; (* ohne Login geht nichts ?? *)
  //zur Datenbank verbinden
  IF IBD.Connected = FALSE THEN IBD.Connected := TRUE;
  //neue Transaktion starten
  if not IBT.InTransaction then IBT.StartTransaction;
  //SQL-String setzen
  IBSQL.SQL.Clear;
  IBSQL.SQL.Add(s);
  //SQL Anweisung ausführen
  IBSQL.ExecQuery;
  //SQL-String setzen
  IBSQL.SQL.Clear;
  IBSQL.SQL.Add(t);
  //SQL Anweisung ausführen
  IBSQL.ExecQuery;
  IBT.Commit;
  IBD.Connected := false;
  end;
end;
Wolfgang
  Mit Zitat antworten Zitat