sqlite database oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

sqlite database oluşturma

Mesaj gönderen brs »

Selam;

Access veritabanı kodlamasını modifiye ederek :D sqlite veri tabanı oluşturmaya çalışıyorum fakat oluşturma sırasında "böyle bir arabirim desteklenmiyor" hatası alıyorum bu durumu nasıl çözebilirim...

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  Katalog: OleVariant;
  StrDataYol: String;
  StrPlalist: String;
  StrListe: String;
begin
  with Form1 do
  begin
    // strData := 'C:\DB\';
    StrDataYol := ExtractFilePath(Application.Exename) + 'DB\';
    if Not DirectoryExists(StrDataYol) then // Klasör Y. Oluştur
      ForceDirectories(StrDataYol);

    FDConnection1.LoginPrompt := False;
    FDConnection1.ConnectionString := StrDataYol + 'localdata.db';
    FDQuery1.Connection := FDConnection1;
  end;

  if Not FileExists(StrDataYol + 'localdata.db') then // Veritabanı Y. Oluştur
  begin
    Katalog := CreateOleObject('ADOX.Catalog');
    Katalog.Create(FDConnection1.ConnectionString);
    Katalog := Unassigned;

    StrPlalist := 'CREATE TABLE Playlist (' +
      'A_KayNo    AutoIncrement CONSTRAINT idxArsiv PRIMARY KEY, ' +
      'A_Adi      Text( 20 ), ' + 'A_Soyadi   Text( 20 ), ' +
      'A_BelgeAdi Text( 20 ), ' + 'A_BelgeTip Text(  3 )  ' + ')';

    StrListe := 'CREATE TABLE Liste (' +
      'A_KayNo    AutoIncrement CONSTRAINT idxArsiv PRIMARY KEY, ' +
      'A_Adi      Text( 20 ), ' + 'A_Soyadi   Text( 20 ), ' +
      'A_BelgeAdi Text( 20 ), ' + 'A_BelgeTip Text(  3 )  ' + ')';

    with TADOCommand.Create(nil) do
    begin
      // Connection := FDConnection1;
      CommandText := StrPlalist;
      CommandText := StrListe;
      Prepared := True;
      Execute;
      Free;
    end;
  end;
end;
Resim
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Re: sqlite database oluşturma

Mesaj gönderen mehmetantalya »

Kod: Tümünü seç

   Katalog := CreateOleObject('ADOX.Catalog');
    Katalog.Create(FDConnection1.ConnectionString);
    Katalog := Unassigned;
bu kismi kullanmiyorsaniz ,kaldirip denermisiniz
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: sqlite database oluşturma

Mesaj gönderen brs »

Bu seferde "Missing connection or connectionstring" hatası alıyorum
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Re: sqlite database oluşturma

Mesaj gönderen mehmetantalya »

burada siz mantik hatasi yapiyorsunuz sanirim.
program localdata.db dosyasini bulamiyor.

Kodu bastan incelersek. oncelikle FDConnection1 nesnesine localdata.db dosyasini atiyorsunuz. daha sonra bu dosya yoksa dosyanin icerisine Playlist ve liste tablolarini olusturmasini istiyorsunuz. Olmayan dosyanin icerisine bu tablolari olusturmasi mumkun degil.

Kod: Tümünü seç

 if Not FileExists(StrDataYol + 'localdata.db') then // Veritabanı Y. Oluştur
  begin
bu kontrolden sonra localdata.db dosyasini olusturmalisiniz. daha sonra icerisine ilgili tablolari eklersiniz.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: sqlite database oluşturma

Mesaj gönderen sabanakman »

Her şeyden önce baktığınız örnek Access veritabanı ADO üzerinden çalışıyor sanırım. Bu da Windows'a has bir özellik ile entegre çalışan (JET veya ODBC) kütüphanesi kullandığı için başka türden veri tabanını bu örneğe göre geliştiremezsiniz. SQLite için örnek araştırma yapmadığım için bir örnek veremiyorum ama SQLite için özel bir FireDAC araştırması yapmalısınız.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: sqlite database oluşturma

Mesaj gönderen Serhat »

Bildiğim kadarıyla sqlite için kodlama ile veri tabanı oluşturulamaz...
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: sqlite database oluşturma

Mesaj gönderen brs »

sabanakman yazdı:Her şeyden önce baktığınız örnek Access veritabanı ADO üzerinden çalışıyor sanırım. Bu da Windows'a has bir özellik ile entegre çalışan (JET veya ODBC) kütüphanesi kullandığı için başka türden veri tabanını bu örneğe göre geliştiremezsiniz. SQLite için örnek araştırma yapmadığım için bir örnek veremiyorum ama SQLite için özel bir FireDAC araştırması yapmalısınız.
Evet dediğiniz gibi, fakat SQLite için kod bulamadım sanırım yok da yok...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Kullanıcı avatarı
dogan
Üye
Mesajlar: 173
Kayıt: 17 Eki 2014 10:11

Re: sqlite database oluşturma

Mesaj gönderen dogan »

[quote="brs"]Selam;

Access veritabanı kodlamasını modifiye ederek :D sqlite veri tabanı oluşturmaya çalışıyorum fakat oluşturma sırasında "böyle bir arabirim desteklenmiyor" hatası alıyorum bu durumu nasıl çözebilirim...

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  Katalog: OleVariant;
  StrDataYol: String;
  StrPlalist: String;
  StrListe: String;
begin
  with Form1 do
  begin
    // strData := 'C:\DB\';
    StrDataYol := ExtractFilePath(Application.Exename) + 'DB\';
    if Not DirectoryExists(StrDataYol) then // Klasör Y. Oluştur
      ForceDirectories(StrDataYol);

    FDConnection1.LoginPrompt := False;
    FDConnection1.ConnectionString := StrDataYol + 'localdata.db';
    FDQuery1.Connection := FDConnection1;
  end;

  if Not FileExists(StrDataYol + 'localdata.db') then // Veritabanı Y. Oluştur
  begin
    Katalog := CreateOleObject('ADOX.Catalog');
    Katalog.Create(FDConnection1.ConnectionString);
    Katalog := Unassigned;

    StrPlalist := 'CREATE TABLE Playlist (' +
      'A_KayNo    AutoIncrement CONSTRAINT idxArsiv PRIMARY KEY, ' +
      'A_Adi      Text( 20 ), ' + 'A_Soyadi   Text( 20 ), ' +
      'A_BelgeAdi Text( 20 ), ' + 'A_BelgeTip Text(  3 )  ' + ')';

    StrListe := 'CREATE TABLE Liste (' +
      'A_KayNo    AutoIncrement CONSTRAINT idxArsiv PRIMARY KEY, ' +
      'A_Adi      Text( 20 ), ' + 'A_Soyadi   Text( 20 ), ' +
      'A_BelgeAdi Text( 20 ), ' + 'A_BelgeTip Text(  3 )  ' + ')';

    with TADOCommand.Create(nil) do
    begin
      // Connection := FDConnection1;
      CommandText := StrPlalist;
      CommandText := StrListe;
      Prepared := True;
      Execute;
      Free;
    end;
  end;
end;


Hocam bir süre önce bende bu konuyu çok merak etmiştim ve sizin için tekrar bir araştırma yaptım kodlama yöntemiyle delphide sanırım bu işi çözemezsiniz, ki çözebilirseniz eğer mucize olur...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: sqlite database oluşturma

Mesaj gönderen mrmarman »

Ücretsiz bir VLC olan ZEOS Lib paketini indirip kurun.

Kod: Tümünü seç

function VeritabaniHazirlaYoksaCreateEdilsin( strVeritabani: String; ZeosConnection:TZConnection ): boolean;
begin
  if NOT DirectoryExists ( ExtractFilePath( strVeritabani ) )
    then ForceDirectories( ExtractFilePath( strVeritabani ) );

  Try
    With ZeosConnection do begin
      Protocol:='sqlite-3';
      Database:= strVeritabani;
      Connect; // Yoksa yeni bir tane create eder...
    end;
    With TZQuery.Create(nil) do begin
      Connection := ZeosConnection;
        SQL.Clear;
        SQL.Add( 'CREATE TABLE IF NOT EXISTS TestTable ( '    );
        SQL.Add( 'id INTEGER PRIMARY KEY AUTOINCREMENT' );
        SQL.Add( ', Adi    VARCHAR(50)' );
        SQL.Add( ', Soyadi VARCHAR(50)' );
        SQL.Add( ', ePosta VARCHAR(50)' );
        SQL.Add( ' );  ' );
        ExecSQL;
      Free;
    end;
  Finally
    Result := True;
  End;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  strDB : String;
begin
  strDB := ExtractFilePath(Application.Exename) + '\data\arman.s3db';
  VeritabaniHazirlaYoksaCreateEdilsin(strDB, ZConnection1 );

  DataSource1.DataSet := ZQuery1;
  DBGrid1.DataSource  := DataSource1;
  With ZQuery1 do begin
    Connection := ZConnection1;
    Active     := False;
      SQL.Clear;
      SQL.Add('SELECT * FROM TestTable');
    Active     := True;
  end;
end;
örneği şeklinde de dinamik olarak create edin ve görüntüleyin... Eski yeni Delphi sürümleriyle uyumludur.
Resim
Resim ....Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: sqlite database oluşturma

Mesaj gönderen sabanakman »

İyi günler. Farklı bir yol da benden olsun. Bu FireDAC bileşeni kullanarak yapılan başka bir örnek. Öncelikle FDConnection bileşeninin parametrelerini aşağıdaki şekilde verdim.

Kod: Tümünü seç

  object FDConnection: TFDConnection
    Params.Strings = (
      'DriverID=SQLite'
      'Database=C:\Temp\Veri2.db'
      'OpenMode=CreateUTF16'
      'LockingMode=Normal'
      'JournalMode=WAL'
      'Synchronous=Full'
      'SQLiteAdvanced=temp_store=MEMORY'
      'SQLiteAdvanced=page_size=4096'
      'SQLiteAdvanced=auto_vacuum=FULL')
    LoginPrompt = False
    AfterConnect = FDConnectionAfterConnect
    Left = 120
    Top = 104
  end
ve de AfterConnect olayında Create Table ... sorgusunu çalıştırdım. Bu şekilde SQLite veritabanım oluştu.

Kod: Tümünü seç

procedure TForm1.FDConnectionAfterConnect(Sender: TObject);
begin
  FDConnection.ExecSQL('CREATE TABLE [SMSLer] ([ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'#13#10+
    '[Kisi] VARCHAR(50) NOT NULL,'#13#10+
    '[Telefon] NVARCHAR(25),'#13#10+
    '[Tarih] DATE NOT NULL,'#13#10+
    '[Saat] TIME NOT NULL,'#13#10+
    '[GelenMesajmi] BOOLEAN NOT NULL,'#13#10+
    '[Mesaj] TEXT NOT NULL);'#13#10+
    'CREATE INDEX [Kisi] ON [SMSLer] ([Kisi]);'#13#10+
    'CREATE INDEX [Telefon] ON [SMSLer] ([Telefon]);');
end;
Ayrıca SQLite için güzel bir de araç program tavsiye edebilirim. Zira arayüzü basit ve kullanışlı olarak görsel tasarım yapabilmeye imkan sunmasının yanı sıra tasarlanan nesnelerin DDL sorgu kodlarını da hazırlamaktadır.

SQLite Expert Personal 3. Bunun bir de ücretli olan Professional sürümüne şimdilik ihtiyaç duymadım ama Personal versiyonu ücretsiz ve mevcut özellikleri ile çok güzel iş görmektedir. İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: sqlite database oluşturma

Mesaj gönderen Serhat »

Hocam kafama takıldı, bu kodları nereye ekleyeceğiz anlamadım? birde database oluşturacağımızı yeri nasıl belirleye biliriz...
sabanakman yazdı:İyi günler. Farklı bir yol da benden olsun. Bu FireDAC bileşeni kullanarak yapılan başka bir örnek. Öncelikle FDConnection bileşeninin parametrelerini aşağıdaki şekilde verdim.

Kod: Tümünü seç

  object FDConnection: TFDConnection
    Params.Strings = (
      'DriverID=SQLite'
      'Database=C:\Temp\Veri2.db'
      'OpenMode=CreateUTF16'
      'LockingMode=Normal'
      'JournalMode=WAL'
      'Synchronous=Full'
      'SQLiteAdvanced=temp_store=MEMORY'
      'SQLiteAdvanced=page_size=4096'
      'SQLiteAdvanced=auto_vacuum=FULL')
    LoginPrompt = False
    AfterConnect = FDConnectionAfterConnect
    Left = 120
    Top = 104
  end

ve de AfterConnect olayında Create Table ... sorgusunu çalıştırdım. Bu şekilde SQLite veritabanım oluştu.

Kod: Tümünü seç

procedure TForm1.FDConnectionAfterConnect(Sender: TObject);
begin
  FDConnection.ExecSQL('CREATE TABLE [SMSLer] ([ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'#13#10+
    '[Kisi] VARCHAR(50) NOT NULL,'#13#10+
    '[Telefon] NVARCHAR(25),'#13#10+
    '[Tarih] DATE NOT NULL,'#13#10+
    '[Saat] TIME NOT NULL,'#13#10+
    '[GelenMesajmi] BOOLEAN NOT NULL,'#13#10+
    '[Mesaj] TEXT NOT NULL);'#13#10+
    'CREATE INDEX [Kisi] ON [SMSLer] ([Kisi]);'#13#10+
    'CREATE INDEX [Telefon] ON [SMSLer] ([Telefon]);');
end;
Ayrıca SQLite için güzel bir de araç program tavsiye edebilirim. Zira arayüzü basit ve kullanışlı olarak görsel tasarım yapabilmeye imkan sunmasının yanı sıra tasarlanan nesnelerin DDL sorgu kodlarını da hazırlamaktadır.

SQLite Expert Personal 3. Bunun bir de ücretli olan Professional sürümüne şimdilik ihtiyaç duymadım ama Personal versiyonu ücretsiz ve mevcut özellikleri ile çok güzel iş görmektedir. İyi çalışmalar.
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: sqlite database oluşturma

Mesaj gönderen brs »

Emeği geçen herkese teşekkür ederim, database oluşturma durumunu çözdüm....

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
  StrDataYol: String;
  StrDatabase: String;
begin
  with Form1 do
  begin
    StrDataYol := ExtractFilePath(Application.Exename) + 'DB\';
    if Not DirectoryExists(StrDataYol) then
      ForceDirectories(StrDataYol);
  end;

  StrDatabase := ExtractFilePath(Application.Exename) + '\DB\Database';
  begin
    With FDConnection1 do
    begin
      LoginPrompt := False;
      Params.Clear;
      Params.Values['Database'] := StrDatabase + '.db';
      Params.Values['DriverID'] := 'SQLite';
      Params.Values['CharacterSet'] := 'utf8';
    end;

    With FDQuery1 do
    begin
      Active := False;
      Connection := FDConnection1;
      SQL.Clear;
      SQL.Add('CREATE TABLE IF NOT EXISTS DERS (');
      SQL.Add(' ADI nvarchar(10)');
      SQL.Add(' );');
      ExecSQL;

      SQL.Clear;
      SQL.Add('SELECT');
      SQL.Add(' ADI');
      SQL.Add(' FROM DERS');
      Active := True;
    end;
  end;
end;
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Cevapla