Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
Delphi 7 Enterprise
|
Create Tables
11. Sep 2023, 10: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
|
|
Zitat
|