1

Konu: select komutunda eşitlik

select * from zz where     alltrim(upper(bu))$alltrim(upper(a)) or;
                            alltrim(upper(m.bu))$alltrim(upper(b)) or;
                            alltrim(upper(m.bu))$alltrim(upper(c)) or ;
                            alltrim(upper(m.bu))$alltrim(upper(d)) or;
                            alltrim(upper(m.bu))$alltrim(upper(e)) or;
                            alltrim(upper(m.bu))$alltrim(upper(f)) or;
                            alltrim(upper(m.bu))$alltrim(upper(h)) or;
                            alltrim(upper(m.bu))$alltrim(upper(g)) ;
                            into cursor sondurum order by  A,b,c,d,e,f readwrite
thisform.grid1.recordsoucve="sondurum"
thisform.grid1.afterrowcolchange
*select a,b,c,d,e,f,g,h,i,j,k,l from zz where ;
         sondurum.b$(zz.b) and ;
        sondurum.c$(zz.c) And ;
         sondurum.d$(zz.d) and ;
        sondurum.e$(zz.e) into cursor hadibak1 order by  b,c,d,e,f

Sorun şu
Hadibak1 dosyası sadece b,c,d ve e kolonları doluyken oluşuyor. b,c,d ve e den herhangi bir kolonun içinde kayıt
yoksa yani boşsa dosya oluşmuyor... Sanki boşlukları eşleştiremiyor.

benim istediğimse eşleştirmesi
bunu nasıl yaparım

şimdiden herkese teşekkürler

2

Re: select komutunda eşitlik

SET lerle ilgili olabilir mi acaba? EXACT - ANSI

3 Son düzenleyen, avrasya34 (22.01.2018 09:57:59)

Re: select komutunda eşitlik

malesef bu komutlardfa işe yaramadı hocam.

select count(a) aa,a,b,c,d,e,f,g,h,i,j,k,l from zz where ;
         sondurum.b$(zz.b) and ;
        sondurum.c$(zz.c) And ;
         sondurum.d$(zz.d) and ;
        sondurum.e$(zz.e) into cursor hadibak1 group by 2,3,4,5,6,7,8,9,10,11,12,13

bu çözümü sağlıyor ama benim merak ettiğim select neden boş kayıtların aynı olması gerektiğini düşünmüyor ?

4 Son düzenleyen, ugurlu2001 (23.01.2018 10:35:09)

Re: select komutunda eşitlik

Sadece sesli dusunuyorum:

- Sorgunda kullandigin 'bu' alaninda datalari daha yaziyorken neden Alltrim + Upper olarak tabloya koymuyorsun.
SELECT ile sorgulama yapiyorken kullandigin herbir Alltrim + Upper birlesimi performans acisindan buyuk zaman kaybi yaratacaktir.
Tablo yapin buyudugunde ise 1 sn. altinda surecek sorgularin icin cok cok daha uzun sureler beklemek zorunda kalabilirsin.

- a,b,c,d,e,f,g alanlarinda kullandigin veriler/fieldlar (yada degiskenler - emin olamadim - );
icerik olarak 'bu' alani icerisinde herhangi bir yerde mi  geciyor yoksa ILE MI basliyor.
Eger 'ile basliyorsa' IN tumcecigi ile sorguyu daha kolay isleyebilirsin.

SELECT tumcecigin gorunum olarak gayet basit duruyor (Sanki tek tablodan sorgulama yapiyormussun gibi).
Ancak kurdugun cumleden anladigim, birden fazla tablodan birlesik bir sorgulama yapiyorsun sanki.

Tablo yapisi ve ornek data verebilirsen kolayca cozum bulunabilir gorusundeyim

Forumda ornek data kopyalama ile ornek var diye hatirlamiyorum. Tembellikten linki bulamadim, ozur.

Edit:

* Cursor2Data.prg
Procedure Cursor2Data && Author : Cetin BASOZ 
    LPARAMETERS tcTable && OR Cursor  
    LOCAL lcPreviousTable, llUseInAlias, lnKayitSayisi
    LOCAL ARRAY laTempTable[1]

    STORE .F. TO m.llUseInAlias
    m.lcPreviousTable = ALIAS()

    IF USED(m.tcTable)
        SELECT (m.tcTable)
    ELSE
        USE IN 0 (m.tcTable)
        STORE .T. TO m.llUseInAlias
    ENDIF

    m.lcTempTable = "CrsTemp"+SYS(2015)
    SELECT Count(*) As KayitSayisi From (m.tcTable) INTO ARRAY laTempTable

    STORE laTempTable[1] TO lnKayitSayisi
    DO Cursor_yap WITH m.tcTable, lnKayitSayisi
ENDPROC 

PROCEDURE Cursor_yap 
Lparameters tcTableName,tnRecords
*!*    Use (m.tcTableName) In 0 Alias 'sampling'
*!*    Select 'sampling'
Local lcTemp, ix, lcData, lcRetVal
lcTemp = Sys(2015)+'.Txt'
If !Empty(m.tnRecords) And Type('m.tnRecords') = 'N'
  Copy To (m.lcTemp) Type Delimited Next m.tnRecords
Else
  Copy To (m.lcTemp) Type Delimited
Endif
lcData = Filetostr(m.lcTemp)
Erase (m.lcTemp)
 
Set Textmerge Delimiters To '%%','%%'
Set Textmerge To (m.lcTemp) Noshow
Set Textmerge On
\CreateCursor_%%m.tcTableName%%()
\
\Procedure CreateCursor_%%m.tcTableName%%
\LOCAL lcData, lcTemp
\lcTemp = SYS(2015)+'.tmp'
\TEXT TO m.lcData noshow
\%%m.lcData%%
\ENDTEXT
\
\STRTOFILE(m.lcData,m.lcTemp)
\
\create CURSOR %%m.tcTableName%% ;
\ ( ;
*!*    For ix=1 To Afields(aStruc,'sampling')
For ix=1 To Afields(aStruc,tcTableName)
\  %%IIF(m.ix > 1,',','')%%
\\%%aStruc[m.ix,1]%% %%aStruc[m.ix,2]%%(%%aStruc[m.ix,3]%%,%%aStruc[m.ix,4]%%)
\\ %%IIF(aStruc[m.ix,5],'',' NOT ')%% NULL
\\ %%IIF(aStruc[m.ix,6],'NOCPTRANS','')%% ;
Endfor
\  )
\
\APPEND FROM (m.lcTemp) TYPE delimited
\ERASE (m.lcTemp)
\endproc
Set Textmerge To
Set Textmerge Off
Set Textmerge Delimiters
lcRetVal = Filetostr(m.lcTemp)
_ClipText = lcRetVal && Tabloyu Ctrl + V icin hafizaya al
ENDPROC
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5 Son düzenleyen, avrasya34 (23.01.2018 16:20:41)

Re: select komutunda eşitlik

uğur hocam önce zz dosyasındaki "bu" değişkenini içeren kayıtlar alınıyor ve sondurum adında dosya oluşuyor

sonra zz dosyasının içinden sondurum dosyasındaki a,b,c ve d fieldleriyle birebir eşleşen kayıtlar alınmaya çalışılıyor.
sorun şuki

son durum dosyasının içindeki a,b,c ve d satırlarının hepsi doluysa sorgu çalışıyor ve kayıtlar geliyor. ama satır içindeki bu 4 fieldden biri boşsa sorgu çalışmıyor

select komutu boş satırları birbirine eşitleyemiyor ve o yüzden dosya boş dönüyor.

çünkü yapmak istediğim şey tam olarak

select count(a) aa,a,b,c,d,e,f,g,h,i,j,k,l from zz where ;
         sondurum.b$(zz.b) and ;
        sondurum.c$(zz.c) And ;
         sondurum.d$(zz.d) and ;
        sondurum.e$(zz.e) into cursor hadibak1 group by 2,3,4,5,6,7,8,9,10,11,12,13

bu komut tam istediğimi yapıyor. benim merak ettiğim bu komutla yukardaki komutun farki ne yukardaki neden çalışmadı ?
alltirimler için teşekkürler hocam. düzeltme işine başladım

6

Re: select komutunda eşitlik

Zeki Hocam;

Kimi durumlarda sorunu parcalara ayirmak en mantikli ve efektif cozum oluyor. Soyleki.

Temel olarak zz dosyasindaki bu degiskenini iceren kayitlari lazimsa; ilk olarak bu tablodan gecici bir tabloya gerekli alanlari kullanan bir sorgu calistir:

Select * from zz where KOSUL into cursor CurTempBase readwrite

gibi,

Sonra gerekli alt kosullari saglayan Where lere gore Update komutlarini sira ile calistir.

En son olarakta Curtempbase cursorunden son bir Where kosulu ile istedigin nihai sonucu al

Tablo yapisini ve ornek datalari gorme imkani olsa, kolayca efektif bir Sql tumcecigi yazilir sanki.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

7

Re: select komutunda eşitlik

Bende sonuna kadar okudum ama soruyu anlayamadim smile
Bastaki soru sanki soyle ozetlenebilir:

Local buCheck, cDelimiter
buCheck = '%' +Alltrim(Upper(m.bu)) +'%' && m.bu bosluk icerebilir mi?
cDelimiter = "/" && Normalde buCheck icerisinde asla beklenmeyen bir karakter

Select * From zz ;
    where Upper(a+m.cDelimiter+;
    b+m.cDelimiter+;
    c+m.cDelimiter+;
    d+m.cDelimiter+;
    e+m.cDelimiter+;
    f+m.cDelimiter+;
    g+m.cDelimiter+h) Like m.buCheck ;
    into Cursor sondurum ;
    order By  a,b,c,d,e,F Readwrite

Soruda "eslesme"den kasit ne hic anlayamadim, ortada eslesme arayan hicbir SQL yok.

Not: Calisan ve calismayan komutlarin hicbir benzerligi yok, ayni seyi sorgulamiyor.

Ugur'un dedigi gibi ornek data ile tam olarak ne yapmak sitedigini verseydin daha cok sansimiz olurdu smile

8 Son düzenleyen, avrasya34 (31.01.2018 15:45:45)

Re: select komutunda eşitlik

yukardaki kodun kullanımını bilmediğimden data gönderemiyorum.
ama sizin örneğiniz her zamanki gibi düzgün çalışıyor .

sorun şu benim ilk select komutum çalışmazken sizinki neden çalışıyor. ?

yazdığınız komutu anlayabildim mı ? hayır. smile


buCheck = '%' +Alltrim(Upper(m.bu)) +'%' && m.bu bosluk icerebilir mi?
cDelimiter = "/" && Normalde buCheck icerisinde asla beklenmeyen bir karakter
bunlar ne işe yarıyor selectte nasıl kullanılıyor malesef bilmiyorum smile

9 Son düzenleyen, cetinbasoz (04.02.2018 00:47:03)

Re: select komutunda eşitlik

Yukaridaki kod hazir kod, armut pismis agzina dusmeyi bekliyor, bilinecek bir tarafi yok. Tablondan ornegi cursor'e al, cursor aliasi ona parametre olarak ver gerisini o hallediyor. Sonra tek yapman gereken CTRL+V ile kodu yapistirmak.

Ilki normal wildcard sagliyor. a $ b VFP'ye ozgu. Oysa b like %a% ANSI SQL'de mevcut yani standard.
ikinci ayrac olarak kullanilan bir karakter.

10 Son düzenleyen, avrasya34 (04.02.2018 11:44:41)

Re: select komutunda eşitlik

sondurum dosyası için örnek data

CreateCursor_SONDURUM()


 Procedure CreateCursor_SONDURUM
 LOCAL lcData, lcTemp
 lcTemp = SYS(2015)+'.tmp'
 TEXT TO m.lcData noshow
 "","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefadroksil","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Sefaleksin","","","","","   2"
"KÖPEK","Deri","Derin piyoderma","","","Antibiyotikler","Sefaleksin","","","","","   2"
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefaleksin","","","","","   2"
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefaloglisin","","","","",""
"KÖPEK","Deri","Derin piyoderma","","","Antibiyotikler","Sefaloglisin","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Sefaloglisin","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Sefalotin","","","","",""
"KÖPEK","Deri","Derin piyoderma","","","Antibiyotikler","Sefalotin","","","","",""
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefalotin","","","","",""
"KEDİ","Deri","Derin piyoderma","","","Antibiyotikler","Sefasetril","","","","",""
"KÖPEK","Deri","Derin piyoderma","","","Antibiyotikler","Sefasetril","","","","",""
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefasetril","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Sefasetril","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Sefazolin","","","","",""
"KÖPEK","Deri","Derin piyoderma","","","Antibiyotikler","Sefazolin","","","","",""
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefazolin","","","","",""
"KEDİ","Deri","Derin piyoderma","","","Antibiyotikler","Sefradin","","","","",""
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Sefradin","","","","",""
"KÖPEK","Deri","Derin piyoderma","","","Antibiyotikler","Sefradin","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Sefradin","","","","",""
"KUŞ","Genel Durum","","","","","ADT","","","","","Tavuk ve Hindi"
"","Kas-İskelet","Artiritis","","","Antibiyotikler","Amikasin sulfat","","","","",""
"","Kulaklar","Otitis eksterna (akut)","","","Antibiyotikler","Amikasin sulfat","","","","",""
"","Genel Durum","Konjunktivit","","","Antibiyotikler","Amikasin sulfat","","","","",""
"","Kulaklar","Kulak İltahabı","","","Antibiyotikler","Amikasin sulfat","","","","","Lokal"
"","Kulaklar","Otitis eksterna (akut)","","","Antibiyotikler","Aminoglikozidler + Benzilpenisilin","","","","",""
"","Sindirim Sistemi","Peritonitis (akut)","","","Antibiyotikler","Aminoglikozidler + Penisilinler","","","","","   2"
"KUŞ","Solunum","Rinotrakeats (Hindi korizası)","","","Antibiyotikler","Amoksisilin sodyum","","","","","Tavuk ve Hindi"
"KUŞ","Solunum","Trake ve hava kesesi yangısı","","","Antibiyotikler","Amoksisilin sodyum","","","","","Tavuk ve Hindi"
"","Genel Durum","Merkezi Sinir sistemi enfeksiyonlar","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Solunum","Bronşit (Akut )","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Genel Durum","Lyme hastalığı","","","Antibiyotikler","Amoksisilin sodyum","","","","","   2"
"","Solunum","Sinüzid Tonsillitis","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Genitouriner","Piyelonefritis","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"KEDİ","Endokrin","Kolangitis","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Deri","Yüzeysel piyodarmanın ilk aşaması","","","Antibiyotikler","Amoksisilin sodyum","","","","","   2"
"","Genitouriner","Cystitis (idrar kesesi yangısı)","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Sindirim Sistemi","Enteritis","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Gözler","Retro orbital işlemler sonrası","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Genel Durum","Leptospirosis","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Kas-İskelet","Artiritis","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"","Deri","Lokolize piyoderma","","","Antibiyotikler","Amoksisilin sodyum","","","","","   2"
"","Deri","Derin piyoderma","","","Antibiyotikler","Amoksisilin sodyum","","","","","   2"
"","Deri","Isırık yarası","","","Antibiyotikler","Amoksisilin sodyum","","","","",""
"KUŞ","Solunum","Peritonit","","","Antibiyotikler","Amoksisilin sodyum","","","","","Tavuk ve Hindi"
"KUŞ","Genel Durum","","","","Antibiyotikler","Amoksisilin sodyum","","","","","Tavuk ve Hindi"
"KUŞ","Dolaşım","Perikardit","","","Antibiyotikler","Amoksisilin sodyum","","","","","Tavuk ve Hindi"
"KUŞ","Kulaklar","Orta kulak iltahabı","","","Antibiyotikler","Amoksisilin sodyum","","","","","Tavuk ve Hindi"

 ENDTEXT

 STRTOFILE(m.lcData,m.lcTemp)

 create CURSOR SONDURUM ;
 ( ;
  A C(27,0)  NOT  NULL  ;
  ,B C(16,0)  NOT  NULL  ;
  ,C C(52,0)  NOT  NULL  ;
  ,D C(45,0)  NOT  NULL  ;
  ,E C(47,0)  NOT  NULL  ;
  ,F C(30,0)  NOT  NULL  ;
  ,G C(132,0)  NOT  NULL  ;
  ,H C(43,0)  NOT  NULL  ;
  ,I C(23,0)  NOT  NULL  ;
  ,J C(27,0)  NOT  NULL  ;
  ,K C(19,0)  NOT  NULL  ;
  ,L C(14,0)  NOT  NULL  ;
  )

 APPEND FROM (m.lcTemp) TYPE delimited
 ERASE (m.lcTemp)
 endproc

11

Re: select komutunda eşitlik

Buraya kimse gelmiyor diye ben de nadiren uğruyorum, simdi gordum smile
Sagol data var, bir de ek olarak, ornek verebilir misin nasıl bir girdi olup nasıl sonuc bekliyorsun. Aksam bakmaya calisirim.

12

Re: select komutunda eşitlik

this.grid1.recordsource="zz"

select * from zz where     alltrim(upper(bu))$alltrim(upper(a)) or;
                            alltrim(upper(m.bu))$alltrim(upper(b)) or;
                            alltrim(upper(m.bu))$alltrim(upper(c)) or ;
                            alltrim(upper(m.bu))$alltrim(upper(d)) or;
                            alltrim(upper(m.bu))$alltrim(upper(e)) or;
                            alltrim(upper(m.bu))$alltrim(upper(f)) or;
                            alltrim(upper(m.bu))$alltrim(upper(h)) or;
                            alltrim(upper(m.bu))$alltrim(upper(g)) ;
                            into cursor sondurum order by  A,b,c,d,e,f readwrite
this.grid.afterrowcolchange

select a,b,c,d,e,f,g,h,i,j,k,l from zz where ;
         sondurum.b$(zz.b) and ;
        sondurum.c$(zz.c) And ;
         sondurum.d$(zz.d) and ;
        sondurum.e$(zz.e) into cursor hadibak1 order by  b,c,d,e,f

Bu komutta colonlardan herhangi biri boşsa hadibak1 dosyası oluşmuyor. yani bulunulan satırda bütün kolonlar doluysa
sorun olmuyor ama satırın  hehangibir kolonu boşsa hadibak1 dosyasi boş dönüyor

yukardaki komutu şu hale çevirince hadibak1 dosyası istendiği şekilde oluşuyor.
select count(a) aa,a,b,c,d,e,f,g,h,i,j,k,l from zz where ;
         sondurum.b$(zz.b) and ;
        sondurum.c$(zz.c) And ;
         sondurum.d$(zz.d) and ;
        sondurum.e$(zz.e) into cursor hadibak1 group by 2,3,4,5,6,7,8,9,10,11,12,13

merak ettiğim ilk selek komutunda colonların boş olması durumunu neden kabul etmiyor

13

Re: select komutunda eşitlik

Ben ne yazık ki dediğini oluşturamıyor ve soruyu anlayamıyorum. Yapmak istediğini bir turlu çözemedim. Bende hadibak1 daima oluşuyor (ornegin sondurum'un "B= Genel Durum", diler kolonlar boş olan satırında beklediğim 2 satiri alıyorum - m.bu = 'ADT' orneginde olduğu gibi ).

Iki sorgunun arasındaki temelde tek fark, ikincisi dolaylı yoldan "true cursor" oluşumunu zorluyor ki aslinda benim önerim hep öyle olması. hadibak1 olan sorgularinin sonuna "nofilter" ekleyerek dene.

Birde sorgular aslında pamuk ipliğine bağlı. O an sondurum'un uzerinde ola kaydına gore arama yapıyorsun. %99.999 calisir. Yine de record pointer in ne zaman hangi nedenle hareket edeceği belli olmaz (ornegin arka planda calisan bir refresh etkileyebilir), isini saglama bağla ve değişken kullan (object ya da dogrudan değişkenler - bagimsiz değişkenlerin bu durumdaki derdi senin a,b, ... gibi tek harfli alan adları kullanman, o zaman mutlaka m. kullanmalısın - m. kullanma zorunluluğuna harika bir ornek ama unutma arada 'm' kullanamazsin). Yani şöyle:


   ...  into cursor sondurum order by  A,b,c,d,e,f readwrite 
 
local b,c,d,e
scatter memvar fields b,c,d,e
select a,b,c,d,e,f,g,h,i,j,k,l ;
  from zz where ; 
        m.b$(zz.b) and ; 
        m.c$(zz.c) And ; 
        m.d$(zz.d) and ; 
        m.e$(zz.e) ;
  into cursor hadibak1 ;
  order by  b,c,d,e,f ;
  nofilter
 

Ya da:

   ...  into cursor sondurum order by  A,b,c,d,e,f readwrite 
 
local oRecord
scatter memvar name oRecord
select a,b,c,d,e,f,g,h,i,j,k,l ;
  from zz where ; 
        m.oRecord.b$(zz.b) and ; 
        m.oRecord.c$(zz.c) And ; 
        m.oRecord.d$(zz.d) and ; 
        m.oRecord.e$(zz.e) ;
  into cursor hadibak1 ;
  order by  b,c,d,e,f ;
  nofilter
 

Burada VFP'nin tablo yapıları nedeniyle, aradaki $ tamamen anlamsız. Bu dogrudan dogruya == karsilastirmasi olmuş. Ben olsam tum o $ işaretlerini == yapardım (ki ne yapmaya calistigimi ben de okurken daha net görebileyim).

14

Re: select komutunda eşitlik

Hocam bilgiler için teşekkürler