iki alfanümerik arası sorgu yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya »

Arkadaşlar,

DOSYA_NO adında bir alanım var tipi varchar(50) içine alfanümerik "ABC123456789" giriyorum.

Yapmak istediğim "ABC1000000" "ABC9000000" arasındaki kayıtları sorgulamak nasıl bir filtreleme yapabilirim ? aşağıdaki kodu kullanıyorum

Delphi7 kullanıyorum, MSSQL Veri Tabanı

Kod: Tümünü seç

     QRYDOSYALAR_DB.CLOSE;
     QRYDOSYALAR_DB.SQL.Clear;
     QRYDOSYALAR_DB.SQL.Add('SELECT * FROM DOSYALAR '
                         +' WHERE (DOSYALAR.GIRIS_TARIHI BETWEEN :Tar1 and :Tar2)');

    QRYDOSYALAR_DB.Parameters.ParamByName('Tar1').Value := FormatDateTime('DD/MM/YYYY',dtpGIRIS_TARIHI.date);
    QRYDOSYALAR_DB.Parameters.ParamByName('Tar2').Value := FormatDateTime('DD/MM/YYYY',dtpGIRIS_TARIHI1.date);

     if (EDT_EKLEYEN.Text <> '')
    then QRYDOSYALAR_DB.SQL.Add(' and EKLEYEN='+QuotedStr(EDT_EKLEYEN.Text)+'');


    QRYDOSYALAR_DB.Sql.Add(' order by dbo.TEKNIK_SERVIS_KAYIT.SERVIS_ID DESC');
    QRYDOSYALAR_DB.Open;
Teşekkürler
skalkan
Üye
Mesajlar: 21
Kayıt: 28 Haz 2003 08:05

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen skalkan »

Kod: Tümünü seç

function SadeceRakamlar(s: string): string;
var
  i: integer;
  rsp: string;
begin
  Result := s;
  if Length(s) < 1 then Exit;
  rsp := '';
  for i := 1 to Length(s) do
  begin
    if s[i] in ['0'..'9'] then
      rsp := rsp + s[i];
  end;
  Result := rsp;
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya »

hocan bunu nasıl kullanabilirim ? örnek atabilirmisiniz ?
skalkan
Üye
Mesajlar: 21
Kayıt: 28 Haz 2003 08:05

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen skalkan »

Kod: Tümünü seç

//System.RegularExpressions
function ExtractNumbers(const s: string): string;
var
    regex: TRegEx;
begin
Result := '';
Result := TRegEx.Replace(s, '\D', '')
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := ExtractNumbers('ABC1000000');
//Sonuc 1000000
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := SadeceRakamlar('ABC1000000');
//Sonuc 1000000
end;
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya »

Hocam

A,B,C,D serisinden A100 ile B150 arası tüm raporları nasıl alabilirim ?

teşekkürler
kerpeten
Üye
Mesajlar: 62
Kayıt: 26 May 2016 01:31

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen kerpeten »

Sorguya bu kısıtı da eklediğinizde olmuyor mu?
yani

...
and (DOSYA_NO between 'A100' and 'B150')
...

şeklinde...
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen erdogan_ozkaya »

yok hayır
kerpeten
Üye
Mesajlar: 62
Kayıt: 26 May 2016 01:31

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen kerpeten »

alfanümerik alanlarda ascii koda göre sıralama yapar. Bence yazdıklarınızı tekrar gözden geçirin. Hatta sorguyu çalıştırmadan hemen önce SQL Profiler'i çalıştırırsanız SQL servere hangi sorguyu gönderdiğini görebilirsiniz.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: iki alfanümerik arası sorgu yapma

Mesaj gönderen ertank »

Merhaba,

Normalde @kerpeten 'in cevabı doğru. Sizin kısa cevabınız çalışmama sebebini açıklamamış. Hata mesajı mı alıyorsunuz? Yoksa sonuç boş mu geliyor? Yoksa başka bir sorun mu var?

Eğer sonuç boş oluyor ise öncelikle aşağıdaki şekilde deneyin.

Kod: Tümünü seç

QRYDOSYALAR_DB.Close();
QRYDOSYALAR_DB.SQL.Clear();
QRYDOSYALAR_DB.SQL.Add('SELECT * FROM DOSYALAR WHERE DOSYA_NO BETWEEN :No1 and :No2');
QRYDOSYALAR_DB.ParamByName('No1').AsString := 'ABC1000000';
QRYDOSYALAR_DB.ParamByName('No2').AsString := 'ABC9000000';
QRYDOSYALAR_DB.Open();
Yine de olmuyor ise; database içinde özel/gizli bilgi yok ise yedeğini paylaşabilirseniz inceleyip çalışan cevabı verebiliriz. Ancak database paylaşımı sırasında "test" verileri girip gönderir iseniz bu defa test verisi üzerinde çalışan cevabı vermiş oluruz. Orjinal verilerinizde farklı bir sorun var ise bu yine ortaya çıkmayabilir.
Cevapla