paradox veritabanında like kullanımı
paradox veritabanında like kullanımı
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
"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.
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,
ş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
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
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/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Merhaba,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.
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.
Merhaba,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?
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.
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
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.
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 )
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 )
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;
OnCreate ı de;
kolay gelsin.
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;
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;
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!