Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Mesaj gönderen PROGRAMADOR »

İyi çalışmalar arkadaşlar,

Delphi kullanarak firebird veri tabanı oluşturuyorum. İçinde Türkçe karakter olmayan dosya yolunda herhangi bir sorunum yok. Ancak, Path'te Türkçe karakter olunca veritabanını oluşturmuyor.

Kod: Tümünü seç

C:\test\data\testdb.fdb//herhangi bir sorun yok.
C:\testşşş\data\test.fdb//veri tabanı oluşturma başarısız.
Yardımlarınızı bekliyorum.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Mesaj gönderen esistem »

Türkçe karakterler bilgisayarların doğasına aykırıdır, dizin isimlerinde ve dosya isimlerinde türkçe karakter kullanmayın, hatta 8 karakterden fazla dosya veya dizin ismi oluşturmayın olsun bitsin.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Mesaj gönderen PROGRAMADOR »

programı kurduğunuz bilgisayar bu şartları sağlamıyor olabilir. Örneğin japonca bir işletim sisteminde program kullanılıyor olabilir. Ben diğer programlarda böyle bir sorun yaşamadım. Firebird'ün pathinde Türkçe karakter olunca sorun çıkıyor.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Mesaj gönderen omurolmez »

Şu şekilde veritabanı oluşturabiliyorum :

"D:\şıRİÇ\ŞıRİÇ.FDB"

Flame 0.9.2.1850 (x64) Unicode
gds32.dll 6.3.2.26540 (XE4 ile gelen)
Firebird WI-2.5.2.26540
Windows 7 Home Premium x64 TR


"Bildiğim kadarıyla firebird unicode stringleri ve doğrudan winapi unicode CreateFile api sini kullanır.
Sorun büyük ihtimalle işletim sisteminizle ve küçük ihtimalle client library niz ile alakalı olmalı.
Ömür Ölmez
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Mesaj gönderen csunguray »

esistem yazdı:Türkçe karakterler bilgisayarların doğasına aykırıdır, dizin isimlerinde ve dosya isimlerinde türkçe karakter kullanmayın, hatta 8 karakterden fazla dosya veya dizin ismi oluşturmayın olsun bitsin.
Buna katılmıyorum. Unicode denilen şey bu dediğinizi geçersizleştirmektedir.
PROGRAMADOR yazdı:Path'te Türkçe karakter olunca veritabanını oluşturmuyor
Oluşturmayan nedir.

1. Firebird dosyasını Delphi ile yazmış olduğunuz bir programın içerisinden mi oluşturmaya çalışıyorsunuz?

Eğer öyle ise:

2. Delphi'nin hangi sürümünü kullanıyorsunuz?
3. Hangi bileşenlerle bağlatı kuruyorsunuz?
4. Kullandığınız kodu gönderir misiniz?
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: Veri Tabanı Türkçe Karakter Path'inde Create Olmuyor

Mesaj gönderen PROGRAMADOR »

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;
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Cevapla