1

Konu: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

m.acaip=3/0    && ********************
?VARTYPE(acaip)   && "N"
?acaip>1000000000  && .t. veriyor
*
m.acaip=0/0
?acaip    && ********************
?VARTYPE(acaip)  && "N"
?acaip<0  && .t. veriyor
?STR(acaip)   && ***********
*
m.acaip=0/3
?acaip    && 0
?VARTYPE(acaip)  && "N"
?acaip=0  && .t. veriyor
?STR(acaip)   && 0

bu mantık doğru mu - YA DA DAHA BASİT BİR FONKSİYON VAR MI ?

Visual Fox Pro
DO CASE 

CASE acaip >0 AND ! ALLT(STR(acaip)="0"
  işlem=  "3/0"
CASE acaip =0 AND ! ALLT(STR(acaip)="0"
  işlem= "0/0"
CASE acaip =0 AND  ALLT(STR(acaip)="0"
  işlem= "0/3"
OTHERWISE 
işlem= "aklıma gelmeyen var mı?"
ENDCASE
VFP9 SP2

2 Son düzenleyen, cetinbasoz (29.07.2010 09:23:20)

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

Ali abi,
O bircok dilde hata ("division by zero"). Ancak bildigim kadariyla Foxpro ezelden beridir (foxbaseden beridir:) 0'a bolumlerde ya da sonucun tanimlanan numerik sahaya sigmadiginda tasmayi "*****" seklinde gosteriyor. Yapmak istedigin neydi? Genelde currency type daha guvenilir.

Sonucun oyle olup olmadigini su sekilde test edebilirsin:

Visual Fox Pro
luValue = 3/0

lOverflow = ( m.luValue / 0  == m.luValue )

Not: Eski bir SQL sorunu vardi - kodlarin birisi cok yavas digeri hizli calisan. Ne oldu?

3

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

merhaba Çetin - abilikten istifamı daha önce birkaç kere sunmuştum ...

1. Fabrikada bir günlük verimlilik analizi var. giderler TL -üretim Kg
her kalemde de oranlar önemli:  TL/Kg.
Kg  0 olunca (bölen) **** çıkıyor, bazen TL de 0 olunca **** oluyor, onları düzeltmek istiyorum.
O nedenle **** değerinin 3/0 mı 0/0 mü olduğunu arıyorum.
i- değerlerin hesaplanma noktasında IF... diye yaparım (zor 1000 kadar ölçüm var)
ii- ölçümler biter
FOR Xi= 1 TO .PF.P1.ContolCount,  IF ..Controls[xi]="TextBox" AND acaipmi
diye bir iterasyonla ***** ları başka işaretler ile değiştiririm.

özellikle Excel bacağında önem kazanıyor.

2. SQL başlığındaki sorun çok acaip ve bence MS'u dahi ilgilendirecek acaiplikte
sorgu süresi birinde bir dakika diğerinde moment sürüyor . Bir buluşmamızda rd üstünden (RDa VFP yükledim) gösteriririm.

i- WHERE ( (paket_kont.paketid IS NULL) AND (paket.st<100) AND (paket.teksid BETWEEN ?m.t1 AND ?m.t2) )  && moment

ii- WHERE ( (paket.teksid BETWEEN ?m.t1 AND ?m.t2) AND (paket_kont.paketid IS NULL) AND (paket.st<100) )   && 1 dakika

sevgiler
ali

VFP9 SP2

4

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

galiba mantığı aşağıdaki operatörlele kurmak gerekiyor
?3/0>0  && .t.
?0/0>0  && .f.
?0/0<0  && .t.
?0/0=0  && .f.
?0/3=0  && .t.

VFP9 SP2

5

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

Merhaba, (istifa gozumden kacmis:)
1) Kg bir yerlerdern SQL ile geliyorsa:

Visual Fox Pro
select cast( iif( kg = 0, null, kg ) as int) as kg, ... from ...

ile alsan (tam kafamda canlnadiramiyorum ihtiyacin olan yeri).

2) Ben eski sorudaki sekliyle denemistim ve hemen sonuc verdi. Vaktim oldugunda bu sekilde de bakayim bir.

6

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

cetinbasoz yazdı:

Anladigim kadariyla mesele SQL serverin o SQL icin cok kotu bir plan yaratip cache’e koymus olmasi. (recompile) ekleyince benim makinede 112-115 saniyelerden 0.06-0.09 seviyelerine dustu (bir de NOLOCK ekledim ama asil recompile ise yaradi).


bazen azcık hile türk milletine iyi gelir.
RECOMPILE komutunu ne zaman kullanmalıyım, yani her karmaşık SQLde olası kötü plana karşın koyayım mı ? SQL referanslarda (http://msdn.microsoft.com/en-us/library/ms186819.aspx) açıklama bulamadım.
NOLOCK u da bulamadım

VFP9 SP2

7

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

http://msdn.microsoft.com/en-us/library/ms187713.aspx
http://msdn.microsoft.com/en-us/library/ms181714.aspx
http://msdn.microsoft.com/en-us/library/ms187373.aspx

Ne zaman kullanman gerektigini bilmiyorum. Ben tesadufen uyandim. Senin kodu oldugu gibi alip sadece with (nolock) ekledim hizli calisti. Sonra ustuste calisirken gene yavaslayinca aklima geldi.

Bu arada, ilk tablo icin IS NULL olanlari aliyorsun, NOT EXISTS daha iyi olmaz mi acaba.

8

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

cetinbasoz yazdı:

Bu arada, ilk tablo icin IS NULL olanlari aliyorsun, NOT EXISTS daha iyi olmaz mi acaba.


zaten ben bu sorguya ilk ihtiyacım olduğunda sormuştum ve de çok güzel tartışmıştık:
http://www.fox4um.com/topic/1554/sql-da … erirsiniz/

daha ötesi bulduğum ilgili bir makalede de kaliteli bir yorum çıkmıştı.
http://www.sqlservercentral.com/blogs/s … xists.aspx

aslinda ilk yazdığımda sorgu NOT EXIST ile kurulu idi, sonradan IS NULLa döndü, maalesef neden böyle yaptığımı hatırlamıyorum. (*)

RECOMPILE ı inceledim; "cashdeki planı uyguladıktan sonra bir de yeni planla işlem yapıyor" diyor, yani her seferinde 2 iterasyon, gene de karmaşık sorgular için hep kullanacağım. Muhtemelen 2 planı karşılaştırıp cashe daha iyi olanı alıyor ve bu böyle gidiyor.
Bu arada sp_xxxx  ile olan system SPlerin ne işe yaradıklarını da bulmuş olduk, ufkum kafamın almayacağı kadar genişledi. (Ufku geniş ama bilmiyor :] olduk) Sizleri bilmem ama galiba her olanağın kullanıldığı bir kod yazmak için ayrıca bir SQL danışmanına da gerek duyulacak.

NOLOCK u anlamadım.

VFP9 SP2

9

Re: 3/0 - 0/0 değerleri VARTYPE()="N" veriyor - nasıl test ederim ?

SQL server 4 ana ozelligi garantiliyor ve bunlara ACID properties deniyor (AtomicityConcurrencyIntegrityDurability).  Aynı anda birden afzla kişi birşeyler sorgulayıp, güncellemeye kalktığında Concurency sağlamak için tablolara Shared ya da Exclusive lock koyması gerekiyor. Eğer bir sorgulama yaparken uzerinden geçtiğim kayıtların başkalarının tarafından o sırada güncellenmiş olması beni ilgilendirmiyorsa (dirty read, read uncommitted) kayıtlara kilit koymam gerekmiyor. NOLOCK o işe yarıyor.

"yazmak için ayrıca bir SQL danışmanına da gerek duyulacak" sadece o olsa gene iyi smile Ben yazılım için grafiker, ses teknisyeni, network uzmanı, sql , cep tel. ve benzeri zımbırtıların uzmanları, profesyonel test yapanlar, dokuman yazanlar, editörler ... vs oldukça büyük ekiplere gerek olduğunu düşünüyorum:) Linq bunların içinde SQL uzmanı grekliliğini azalttı (aman bunu duyan SQL yöneticileri kızıyor ve Linq'a kabahat bulmakla uğraşıyorlar) ama yenilikler diğer uzmanları daha çok ihtiyaç haline getirdi.