Merhaba arkadaşlar,
İlginize teşekkür ediyorum. Konuyu sanırım yanlış yere açmışım. Forum kurallarında Delphi yönünden sorularınızı programlama bölümünde sorun diye yazılmış. Öncelikle bu konuda özür dilerim.
Sorunuma dönecek olursak: Delphi XE6 kullanıyorum. Bileşen olarak da FireDAC bileşen setini kullanıyorum. PATH'te Türkçe karakter olunca veritabanını oluşturmuyor ve herhangi bir hata da vermiyor. Tabi ki veritabanını oluşturmadığı için var olmayan veritabanına bağlanmaya çalışınca alınması gereken hataları alıyorum.
Koda gelelim:
Kod: Tümünü seç
const
DataFolder ='DATA';
DataFolderPath ='\DATA';
BaseDBName ='ERISDB.FDB';
LogsDBName ='LOGSDB.FDB';
LOGSDBPath = DataFolderPath+ '\'+LogsDBName;
//................................................
var
App_Path:widestring;
Data_Path:widestring;
Lib_Path:widestring;
FDConnection1: TFDConnection;
FDConnection2: TFDConnection;
FDPhysFBDriverLink1: TFDPhysFBDriverLink;
FDQuery1: TFDQuery;
FDQuery2: TFDQuery;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
FDTransaction1: TFDTransaction;
procedure TIWServerController.IWServerControllerBaseCreate(Sender: TObject);
begin
//program açılınca yapılacak olanlar
App_path:=ExtractFilePath(Application.ExeName);
if (App_path[Length(App_path)] = '\') then
begin
Delete(App_path, Length(App_path), 1);
end;
Data_path:=App_path+'\'+DataFolder;
Lib_Path:= App_path+fbClientDLLPath;
// db yoksa db oluştur.
//data ve lib klasörü yoksa oluştur
if not CanCreateRequieredFolders then begin //gerekli klasörleri oluştur
Showmessage('Folder creating error!');
Halt; //programı kapat
end;
//libleri yükle
CreateRequiredFiles;
{
if not FireBirdInstalled then begin
ShowMessage('Firebird kurulu değil!');
ShellExecute(0,'open',PChar(app_path+fbSetupEXEPath), '','',SW_SHOWNORMAL);
Halt;
end; }
FDConnection1:= TFDConnection.Create(self);
FDConnection2:= TFDConnection.Create(self);
//FDPhysFBDriverLink1:= TFDPhysFBDriverLink.Create(self);
FDQuery1:= TFDQuery.Create(self);
FDQuery2:= TFDQuery.Create(self);
FDGUIxWaitCursor1:= TFDGUIxWaitCursor.Create(self);
FDTransaction1:=TFDTransaction.Create(self);
//StyleSheet.Filename:='mySTYLE.css';
//StyleSheet.URL:=ContentPath+StyleSheet.Filename;
if FileExists(App_path+'\'+LOGSDBPath) then //db dosyası varsa
begin
//db bulundu
try
FDConnection1.LoginPrompt:=false;
FDConnection1.ResourceOptions.SilentMode := true;
FDConnection1.Params.Clear;
FDConnection1.Params.Values['DriverID'] := 'FB';
FDConnection1.Params.Values['CharacterSet'] := 'UTF8';
FDConnection1.Params.Values['user_name'] := 'sysdba';
FDConnection1.Params.Values['password'] := 'masterkey';
FDConnection1.Params.Values['ExtendedMetadata'] := 'True';
FDConnection1.Params.Values['Protocol'] := 'TCPIP';
FDConnection1.Params.Values['Server'] := '127.0.0.1';
FDConnection1.Params.Values['PAGE_SIZE'] := '16384';
FDConnection1.Params.Values['SQLDialect'] := '3';
FDConnection1.Params.Values['Database'] := App_path+'\'+LOGSDBPath;
FDConnection1.Open;
With FDQuery1 do begin
Active := False;
Connection := FDConnection1;
SQL.text:=( 'INSERT INTO LOGS '+
'(LOGTYPE,ADMINNAME,LOGDT,MESSAGE) VALUES '+
'('''+LOGTYPE_JUST_STARTED+''',''NULL'','''+DateTimeToStr(Now)+''',''Program başladı!'');' );
ExecSQL;
end;
except
end;
end else begin //db yoksa
//db yoksa oluştur
try
FDConnection1.LoginPrompt:=false;
FDConnection1.ResourceOptions.SilentMode := true;
FDConnection1.Params.Clear;
FDConnection1.Params.Values['DriverID'] := 'FB';
FDConnection1.Params.Values['CharacterSet'] := 'UTF8';
FDConnection1.Params.Values['user_name'] := 'sysdba';
FDConnection1.Params.Values['password'] := 'masterkey';
FDConnection1.Params.Values['ExtendedMetadata'] := 'True';
FDConnection1.Params.Values['Protocol'] := 'TCPIP';
FDConnection1.Params.Values['Server'] := '127.0.0.1';
FDConnection1.Params.Values['PAGE_SIZE'] := '16384';
FDConnection1.Params.Values['SQLDialect'] := '3';
FDConnection1.Params.Values['Database'] := App_path+'\'+LOGSDBPath;
FDConnection1.Params.Values['CreateDatabase'] := BoolToStr(not FileExists(App_path+'\'+LOGSDBPath),True);
FDConnection1.Open;
//tabloları oluştur
With FDQuery1 do begin
Active := False;
Connection := FDConnection1;
SQL.Clear;
SQL.Add( 'CREATE TABLE LOGTYPE ( ' );
SQL.Add( 'ID BIGINT NOT NULL PRIMARY KEY' );
SQL.Add( ', LOGTYPESTR VARCHAR(150) ' );
SQL.Add( ', EXT VARCHAR(150) ' );
SQL.Add( ' );' );
ExecSQL;
SQL.text:=('CREATE GENERATOR GEN_LOGTYPE_ID;');
ExecSQL;
SQL.text:=('SET GENERATOR GEN_LOGTYPE_ID TO 0;');
ExecSQL;
SQL.text:=('CREATE TRIGGER TR_LOGTYPE FOR LOGTYPE ACTIVE BEFORE INSERT POSITION 0 AS '+
'BEGIN if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_LOGTYPE_ID, 1);END;');
ExecSQL;
SQL.Clear;
SQL.Add( 'CREATE TABLE LOGS ( ' );
SQL.Add( 'ID BIGINT NOT NULL PRIMARY KEY' );
SQL.Add( ', LOGTYPE VARCHAR(300) ' );
SQL.Add( ', ADMINNAME VARCHAR(200) ' );
SQL.Add( ', LOGDT VARCHAR(150) ' );
SQL.Add( ', MESSAGE VARCHAR(1000) ' );
SQL.Add( ' );' );
ExecSQL;
SQL.text:=('CREATE GENERATOR GEN_LOGS_ID;');
ExecSQL;
SQL.text:=('SET GENERATOR GEN_LOGS_ID TO 0;');
ExecSQL;
SQL.text:=('CREATE TRIGGER TR_LOGS FOR LOGS ACTIVE BEFORE INSERT POSITION 0 AS '+
'BEGIN if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_LOGS_ID, 1);END;');
ExecSQL;
SQL.Clear;
SQL.Add( 'CREATE TABLE TBPASSWORDS ( ' );
SQL.Add( 'ID BIGINT NOT NULL PRIMARY KEY' );
SQL.Add( ', USERNAME VARCHAR(50) ' );
SQL.Add( ', PASSWORD VARCHAR(50) ' );
SQL.Add( ', LEVEL INT ' );
SQL.Add( ', NAME VARCHAR(50) ' );
SQL.Add( ', SURNAME VARCHAR(50) ' );
SQL.Add( ' );' );
ExecSQL;
SQL.text:=('CREATE GENERATOR GEN_TBPASSWORDS_ID;');
ExecSQL;
SQL.text:=('SET GENERATOR GEN_TBPASSWORDS_ID TO 0;');
ExecSQL;
SQL.text:=('CREATE TRIGGER TR_TBPASSWORDS FOR TBPASSWORDS ACTIVE BEFORE INSERT POSITION 0 AS '+
'BEGIN if (NEW.ID is NULL) then NEW.ID = GEN_ID(GEN_TBPASSWORDS_ID, 1);END;');
ExecSQL;
//EKLEMELER
SQL.text:=( 'INSERT INTO TBPASSWORDS '+
'(USERNAME,PASSWORD,LEVEL,NAME,SURNAME) VALUES '+
'(''admin'',''2555645'',''5'',''Test'',''Test'');' );
ExecSQL;
SQL.text:=( 'INSERT INTO LOGS '+
'(LOGTYPE,ADMINNAME,LOGDT,MESSAGE) VALUES '+
'('''+LOGTYPE_JUST_STARTED+''',''NULL'','''+DateTimeToStr(Now)+''',''Program başladı!'');' );
ExecSQL;
end;
FDQuery1.Close;
FDConnection1.Close;
except
end;
end;
end;