paradox veritabanında like kullanımı

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

paradox veritabanında like kullanımı

Mesaj gönderen mepc »

Merhabalar Acces ten paradox a geçiş yaptım.

"like" ile sorgulama yaparken acceste karşılaşmadığım iki sorunla karşılaşıyorum.

Birincisi metin alanlarında like ile sorgu yaparken büyük küçük harf ayrımı yapıyor. Bunu nasıl engellerim.

İkincisi memo alanlarda like ile sorgu yapınca sonuçta hep sıfır kayıt geliyor. Memo alanlarda like ile nasıl sorgu yapabilirim?

Kullandığım veritabanı Paradox for Windows
Bilgi paylaşıldıkça güzeldir.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Merhaba,

Bildiğim ve denediğim kadarı ile paradox'ta Memo field'lar için LIKE kullanımı sözkonusu değil. Bunun yerine farklı bir metod uygulayıp yapabilirsin. Memo Field'ı kelimlere parçalayıp bir yardımcı table'a sıra ile bu memofielddaki kelimleri Insert edersin ve her insert ettiğin kelimenin hangi record'taki memofielddan alındığını belirtmek için bir Key alan tutarsın.

Örneğin,

Kod: Tümünü seç


TABLO1

Tablo1.MakaleID       AUTOINC   
Tablo1.MakaleAdi      ALPHA        30
Tablo1.MakaleYazari  ALPHA        25
Tablo1.Makale           MEMO        10 

TABLO2

Tablo2.Tablo1MakaleID  INTEGER
Tablo2.Kelime               ALPHA     30

şeklinde tablo yapılarını oluştur. MemoField'ın içinde geçen her kelimeyi tek tek TABLO2'ye insert et ve arama yapılırken, eğer arama MemoField üzerinde olacaksa, sen dönüp tablo2'de aramanı gerçekleştir.

Uyarı : Like kullanımı ağır olur (Paradox için)

Ayrıca Türkçe Karakterlerde arama yaparken Küçük/Büyük Harf ayrımı yapacaksan nazaran daha hızlı olur ama yapmayacaksan hepsini Büyük harfe çevirip yazman gerekir aks takdirde UPPER() komutunu kullanırsın, bunu da kullandığında bu da ekstra bir yavaşlama getirir. Kayıt sayısı çok ise (onbinlerle ifade ediliyorsa,) paradoxtan vazgeç bu iş için uygun değil !... Verimli olmaz başka bir DB seç ve özellikle SQL Based bir DB olsun FireBird veya Interbase gibi. :

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Kuri_TLJ yazdı:Memo Field'ı kelimlere parçalayıp bir yardımcı table'a sıra ile bu memofielddaki kelimleri Insert edersin ve her insert ettiğin kelimenin hangi record'taki memofielddan alındığını belirtmek için bir Key alan tutarsın.
Merhaba,

bu çok kullanılan bir teknik. Daha önce 2-3 programın bu şekilde kullandığını gördüm ama ne diye bütün kelimeleri bir tabloya kaydetmişler şaşırmıştım. Kuri_TLJ toplantıda anlatınca çaktım olayı.

Kolay gelsin.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Mesaj gönderen mepc »

yardımlarınız için teşekkür ederim.

veritabanını değiştirmemi yazmışsınız. paradoxu tercih etmemin sebebi kurulum programı hazırlamadan bir kaç dosyayı programı kuracağım bilgisayara kopyalayınca çalışabilmesi.

İnterbase içinde böyle bir imkan varmı acaba?
Bilgi paylaşıldıkça güzeldir.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

mepc yazdı:veritabanını değiştirmemi yazmışsınız. paradoxu tercih etmemin sebebi kurulum programı hazırlamadan bir kaç dosyayı programı kuracağım bilgisayara kopyalayınca çalışabilmesi.

İnterbase içinde böyle bir imkan varmı acaba?
Merhaba,

bu doğru değil maalesef. Paradox'u bir bilgisayarda çalıştırmak için BDE'nin yüklü olması gerekir. Buda 6-7 MB civarında ek bir yük demek oluyor.

Interbase/Firebird içinde Interbase/Firebird'ün kurulu olması gerekir. Kurulu ise veritabanı sadece .gdb uzantılı tek bir dosyada tutulmaktadır.

Kolay gelsin.
Kullanıcı avatarı
mepc
Üye
Mesajlar: 191
Kayıt: 26 Eyl 2003 11:39
Konum: Ankara

Mesaj gönderen mepc »

forumu karıştırıken dikkatimi çekti, eski bir mevzuu ama yinede faydalı olabilir

ben kullanıyorum ve her bilgisayarda çalışıyor

gerekli dosyalar şunlar (exe ile aynı dizinde olacak)

bantam.dll
blw32.dll
ceeurope.btl
charset.cvb
europe.btl
idapi32.dll
idasci32.dll
idbat32.dll
iddr32.dll
idpdx32.dll
idr200009.dll
idsql32.dll
other.btl
usa.btl
Bilgi paylaşıldıkça güzeldir.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

selam
programlama forumunda bu konu halen tartışılmakta ve memolarda like kullanılabiliyormuş.
problem formatted MEmo type(F)'da kaynaklanıyor. Memo field(M)'da problem yok :)

(bkz: viewtopic.php?t=2294&start=0 )
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bunlara ek olarak registery de de bazı değişiklikler gerekiyor.
Eskiden kullandığım EXE içinden BDE yi kuran bir kısmı gönderiyorum

DataModule de;

Kod: Tümünü seç

procedure TDM.BDE_Set(xDir: string);
begin
//  xdir := BDE File`larının bulundugu directory.
///  BRegistry := TRegistry.Create;
///  BRegistry.RootKey := DBRoot;
///  BRegistry.LazyWrite := False;
  BRegistry.CreateKey(xKey + '\BLW32');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\DRIVERS\DBASE\INIT');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\DRIVERS\PARADOX\INIT');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\DRIVERS\PARADOX\TABLE CREATE');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\SYSTEM\FORMATS\DATE');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\SYSTEM\FORMATS\NUMBER');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\SYSTEM\FORMATS\TIME');
  BRegistry.CreateKey(xKey + '\Database Engine\Settings\SYSTEM\INIT');
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\BLW32', False);
  BRegistry.WriteString('BLAPIPATH', xDir);
  BRegistry.WriteString('LOCALE_LIB1', xDir + '\USA.BLL');
  BRegistry.WriteString('LOCALE_LIB2', xDir + '\EUROPE.BLL');
  BRegistry.WriteString('LOCALE_LIB3', xDir + '\OTHER.BLL');
  BRegistry.WriteString('LOCALE_LIB4', xDir + '\CHARSET.BLL');
  BRegistry.WriteString('LOCALE_LIB5', xDir + '\CEEUROPE.BLL');
// idapi32.dll, idpdx32.dll, blw32.dll, charset.cvb, bantam.dll,
// ceeurope.btl, idr20009.dll
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine', False);
  BRegistry.WriteString('CONFIGFILE01', xDir + '\IDAPI32.CFG');
  BRegistry.WriteString('DLLPATH', xDir);
  BRegistry.WriteString('RESOURCE', '0009');
  BRegistry.WriteString('SaveConfig', 'WIN32');
  BRegistry.WriteString('UseCount', '1');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\DRIVERS\DBASE\INIT', False);
  BRegistry.WriteString('LANGDRIVER', 'DB857TR0');
  BRegistry.WriteString('TYPE', 'FILE');
  BRegistry.WriteString('VERSION', '4.0');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE', False);
  BRegistry.WriteString('LEVEL', '5');
  BRegistry.WriteString('MDX BLOCK SIZE', '1024');
  BRegistry.WriteString('MEMO FILE BLOCK SIZE', '1024');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\DRIVERS\PARADOX\INIT', False);
  BRegistry.WriteString('LANGDRIVER', 'TURK');
  BRegistry.WriteString('TYPE', 'FILE');
  BRegistry.WriteString('VERSION', '4.0');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\DRIVERS\PARADOX\TABLE CREATE', False);
  BRegistry.WriteString('BLOCK SIZE', '2048');
  BRegistry.WriteString('FILE FACTOR', '95');
  BRegistry.WriteString('LEVEL', '4');
  BRegistry.WriteString('STRICTINTEGRTY', 'TRUE');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\SYSTEM\FORMATS\DATE', False);
  BRegistry.WriteString('FOURDIGITYEAR', 'FALSE');
  BRegistry.WriteString('LEADINGZEROD', 'FALSE');
  BRegistry.WriteString('LEADINGZEROM', 'FALSE');
  BRegistry.WriteString('MODE', '0');
  BRegistry.WriteString('SEPARATOR', '/');
  BRegistry.WriteString('YEARBIASED', 'TRUE');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\SYSTEM\FORMATS\NUMBER', False);
  BRegistry.WriteString('DECIMALDIGITS', '2');
  BRegistry.WriteString('DECIMALSEPARATOR', '.');
  BRegistry.WriteString('LEADINGZERON', 'TRUE');
  BRegistry.WriteString('THOUSANDSEPARATOR', ',');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\SYSTEM\FORMATS\TIME', False);
  BRegistry.WriteString('AMSTRING', 'AM');
  BRegistry.WriteString('MILSECONDS', 'FALSE');
  BRegistry.WriteString('PMSTRING', 'PM');
  BRegistry.WriteString('SECONDS', 'TRUE');
  BRegistry.WriteString('TWELVEHOUR', 'TRUE');
  BRegistry.CloseKey;
//--------------------------------------------------------------------------------------
  BRegistry.OpenKey(xKey + '\Database Engine\Settings\SYSTEM\INIT', False);
  BRegistry.WriteString('AUTO ODBC', 'FALSE');
  BRegistry.WriteString('DATA REPOSITORY', 'Borland Data Dictionary');
  BRegistry.WriteString('DEFAULT DRIVER', 'DBASE');
  BRegistry.WriteString('LANGDRIVER', 'DB857TR0');
  BRegistry.WriteString('LOCAL SHARE', 'FALSE');
  BRegistry.WriteString('LOW MEMORY USAGE LIMIT', '32');
  BRegistry.WriteString('MAXBUFSIZE', '2048');
  BRegistry.WriteString('MAXFILEHANDLES', '48');
  BRegistry.WriteString('MINBUFSIZE', '128');
  BRegistry.WriteString('SHAREDMEMLOCATION', '');
  BRegistry.WriteString('SHAREDMEMSIZE', '2048');
  BRegistry.WriteString('SQLQRYMODE', '');
  BRegistry.WriteString('SYSFLAGS', '0');
  BRegistry.WriteString('VERSION', '4.0');
  BRegistry.CloseKey;

  Application.MessageBox('BDE Yüklendi. Programa yeniden girin', 'Bilgi',
          mb_IconInformation + mb_OK);
//  Application.Terminate;
end;
OnCreate ı de;

Kod: Tümünü seç

procedure TDM.DMCreate(Sender: TObject);
var
  xDir: string;
  bKeyBak: boolean;
begin
  try
    Database1.Connected := False;
  except 
  end;

  BRegistry := TRegistry.Create;
  BRegistry.RootKey := HKEY_LOCAL_MACHINE;
  BRegistry.LazyWrite := False;
  xDir := ExtractFilePath(Application.ExeName);
  if xDir[length(xDir)] = '\' then
    xDir := copy(xDir, 1, length(xDir) - 1);

  bKeyBak := BRegistry.OpenKey(xKey + '\BLW32', False);
//  BRegistry.CloseKey;
//  BRegistry.Free;
  if not bKeyBak then
  begin
    if FileExists(xDir + '\IDAPI32.DLL') then
    begin
      if Application.MessageBox('BDE Yüklenecek', 'Soru',
          mb_IconQuestion + mb_YesNo + mb_DefButton1) = idYes then
        BDE_Set(fmBelgeKay.BKKDir)
      else
      begin
        Application.MessageBox('İşlem iptal edildi.!.', 'Uyarı',
              mb_IconExclamation + mb_Ok);
        Halt;
      end
    end
    else
    begin
      Application.MessageBox('BDE dosyaları bulunamadı.!.', 'Uyarı',
            mb_IconStop + mb_Ok);
      Halt;
    end;
  end;

  if Database1.Connected then
    Database1.Connected := False;
  Database1.Params[0] := 'PATH=' + fmBelgeKay.BKKDir;
  Database1.Connected := True;

  if not FileExists('Renkler.db') then
  with Renkler do
  begin
    TableType := ttParadox;
    with FieldDefs do
    begin
      Clear;
      Add('RenkKodu', ftInteger, 0, False);
      Add('RenkAdi', ftString, 20, False);
    end;
    with IndexDefs do
    begin
      Clear;
      Add('', 'RenkKodu', [ixPrimary]);
    end;
    CreateTable;
  end;
  if not FileExists('Renkler.px') then
  with Renkler do
  begin
    Exclusive := True;
    Open;
    AddIndex('', 'RenkKodu', [ixPrimary]);
  end;
  if not Renkler.Active then Renkler.Open;

end;
kolay gelsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla