1

Konu: SQL Server 2005 de nasıl yaparız?

üsdatlar,kayıttarihi(datetime),allow null işaretli olmasına rağmen,tarih alanını boş bırakarak kayıt yaparsam 01.01.1900 00:00:00 gibi bir tarih kayıt ediyor.Ancak ben boş olarak kayıt etmek istiyorum.Acaba sorun nedir?

En büyük sermaye nakit,nakit sermaye vakittir...

2

Re: SQL Server 2005 de nasıl yaparız?

Null ile bos ayni sey degil (datetime bos olamaz). Null kaydet. Bos sadece VFP'ye ozgu (daha dogrusu xBase serisine).
Cursoradapter ile kullaniyorsan ve bos sart ise ConversionFunction kullanabilirsin. Ben kullanmak zorunda kaldim ama hic tavsiye etmem.

3

Re: SQL Server 2005 de nasıl yaparız?

çetin hocam, Null kaydet meye bir örnek verebilirmisiniz.Kullanıcı kayıttarihi alanına bilgi girmek zorunda olmadığı için allow null  u işaretlemiştim.Kullanıcı bilgi girmemişse o alana tarih gelmemeli.Uzuun seneler önce(Fox pro ile tanışmadan önce VB kullanırken :-)) bu problemle karşılaşmıştım ve çözdüğümü hatırlıyorum.Malumunuz SQL serverde de yeni sayılırız.Engin bilgilernizden yararlanabilirmiyiz hocam.Teşekkür ederim

En büyük sermaye nakit,nakit sermaye vakittir...

4 Son düzenleyen, cetinbasoz (20.06.2009 14:36:59)

Re: SQL Server 2005 de nasıl yaparız?

*e2n.prg

Visual Fox Pro
Lparameters tuValue

If Empty(m.tuValue) OR (Vartype(m.tuValue) = 'C' And Trim(m.tuValue) == '{}')
    Return .Null.
Else
    Return m.tuValue
Endif

Visual Fox Pro
Define Class Ca_Employee As CaBase Of ("CaBase.prg") && CaBase cursoradapter kullanan base class

    Alias = "Employee"
    SelectCmd = ;
        "select [FirstName], [LastName], [BirthDate], [EmployeeID] from Employees"
    CursorSchema = "FirstName c(15), LastName c(20), BirthDate d, EmployeeID i"
    KeyFieldList = "EmployeeID"
    Tables = "Employees"
    UpdatableFieldList = "FirstName, LastName, BirthDate, EmployeeID"
    UpdateNameList = ;
        "FirstName Employees.[FirstName],"+;
        "LastName Employees.[LastName],"+;
        "BirthDate Employees.[BirthDate],"+;
        "EmployeeID Employees.[EmployeeID]"
    ConversionFunc = "FirstName TRIM, LastName TRIM, BirthDate E2N"
Enddefine

5 Son düzenleyen, mrduyar (23.06.2009 14:27:35)

Re: SQL Server 2005 de nasıl yaparız?

selamlar;
Dbf den sql e çevirdiğim bir programımda Null problemi yaşadığım için aşağıdaki kodu  (TableFixNull) yazdım.
Şuan İşimi görmekte.
1. TableFixNull da düzeltimesi gereken yerler varsa fikirlere açığım.
2. Dbf leri SQL e çevirdiğim. Eski kodlar için SQL de bir çözüm varmıdır.
Örnek;

Visual Fox Pro
Empty(plan.durum) And lceklemiktar>0 And lcgelenmiktar>0


SQL e bu kodu taşıdığımda Empty(plan.durum)  .f. geldiği için çalışmıyor.

SQL deki plan tableindan durum field ının null check ini kaldırsak sorun çözülürmü?


Visual Fox Pro
*TableFixNull('teklif',.t.)

Function TableFixNull
Lparameters fname,lcparam2
Lczaman=Seconds()
If Empty(fname)
    Messagebox(fname +' Kayıt Bulunamadı')
    Return
Endif
If !Empty(lcparam2)
    DosyaAc(fname,,.T.)
Endif
Wait Window fname Nowa
Set Escape On
Private nfields, Afields, Lcf
Select (fname)
nfields = Afields(aflds)
Go Top
Lcsayi=0
Scan
    For Lcf = 1 To nfields
        lcbaslik=aflds(Lcf, 1)
        If Isnull(&lcbaslik)=.F. And Upper(aflds(Lcf,2))=='T'
            LCalan1=m.fname+'.'+Lower(aflds(Lcf, 1))
            If &LCalan1=Datetime(1900,01,01,00,00,00)
                Lcdeger=Ctot('//')
                lcsorgu3='repl &LCalan1 with Lcdeger'
                &lcsorgu3
            Endif
        Endif
        If     Isnull(&lcbaslik)=.T.
            Lcsayi=Lcsayi+1
            Do Case
            Case Upper(aflds(Lcf,2))=='C'
                Lcdeger=" "
            Case Upper(aflds(Lcf,2))=='I'
                Lcdeger=0
            Case Upper(aflds(Lcf,2))=='N'
                Lcdeger=0
            Case Upper(aflds(Lcf,2))=='L'
                Lcdeger=0
            Case Upper(aflds(Lcf,2))=='M'
                Lcdeger=" "
            Case Upper(aflds(Lcf,2))=='D'
                Lcdeger=Ctod('//')
            Case Upper(aflds(Lcf,2))=='T'
                Lcdeger=Ctot('//')
            Case Upper(aflds(Lcf,2))=='B'
                Lcdeger=0
            Otherwise
                Wait Window (Upper(aflds(Lcf,2))) Nowa
                Messagebox('HAta')
            Endcase
            Wait Window (Upper(aflds(Lcf,2))) Nowa
            LCalan1=m.fname+'.'+Lower(aflds(Lcf, 1))
            lcsorgu3='repl &LCalan1 with Lcdeger'
            &lcsorgu3
        Endif
    Endfor
    Select (fname)
Endscan
Select (fname)
Go Top
If !Empty(lcparam2)
    If Tableupdate(.T.,.T.,fname)
        Wait Window 'Kayit tamam...' Nowa
    Else
        Wait Window 'Kayit HAtalı...'
    Endif
Endif
Wait Window Lcsayi Nowa
Endfunc
Bilmediğin Neyse Yanıldığındır.

6

Re: SQL Server 2005 de nasıl yaparız?

Kodun uzun ve katmasik. Bakmadim napiyor diye,

Empty(nvl(plan.durum,0)) And lceklemiktar>0 And lcgelenmiktar>0

gibi kullanabilirsin. Ama durum ne ki NULL kullandin. Datetime disinda NULL kullanmak pek akillica degil. Sadece gerekliyse kullan.

7 Son düzenleyen, mrduyar (23.06.2009 17:07:14)

Re: SQL Server 2005 de nasıl yaparız?

cetinbasoz yazdı:

Datetime disinda NULL kullanmak pek akillica degil. Sadece gerekliyse kullan.

Selamlar;
Cetin hocam,
Gerekliliğini bir bilsem!  Acep Bu SQL deki bu null ne işe yarar?
Aşağıdaki kod da datetime dışındakileri NULL ları  NOT NULL a çevirmek mi gerekiyor?

SQL
CREATE TABLE [dbo].[adet](

    [adet] [numeric](10, 0) NULL,
    [id] [numeric](15, 0) NULL,
    [acan] [char](10) NULL,
    [actar] [datetime] NULL,
    [duzelten] [char](10) NULL,
    [duzelttar] [datetime] NULL,
    [guid] [uniqueidentifier] NOT NULL CONSTRAINT [DF_adet_guid]  DEFAULT (newid()),
    [sirano] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_adet] PRIMARY KEY CLUSTERED
(
    [guid] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Bilmediğin Neyse Yanıldığındır.

8

Re: SQL Server 2005 de nasıl yaparız?

Ben olsam oyle yaparim. Ama senin icin NULL'in ozel bir anlami varsa olmaz.

Mesela adet'in 0 ya da NULL olmasinin arasinda senin acindan fark var mi? Yoksa NULL yapma. Ya da acan "" ile NULL farkli mi istiyorsun? Istemiyorsan yapma. Datetime icin de yapma derdim ama Datetime icin 0 ya da "" gibi bir deger yok.

9

Re: SQL Server 2005 de nasıl yaparız?

tarihlerde null için eğer class bazlı çalıştıysan birşeyler yapabilirsin. tarih li fieldların init ine

if isnu(this.value)
this.value={}
endif

yazabilirsin. null çetin'in dediği gibi gerçekten başbelası.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

10

Re: SQL Server 2005 de nasıl yaparız?

metin yazdı:

tarihlerde null için eğer class bazlı çalıştıysan birşeyler yapabilirsin. tarih li fieldların init ine

if isnu(this.value)
this.value={}
endif

yazabilirsin. null çetin'in dediği gibi gerçekten başbelası.

üsdatlarım.Yukarıdaki gibi tarih alanların initine yazdığım halde tarih alanına bilgi girmediğimde
01/01/1900 12:00:00 değerini görüyorum,çok bişey farketmedi yani.
şimdi ben şu hususu hakikaten anlayamadım.
Şimfi bir mal var ve  firmaya geliş tarihi tutuluyor.Ancak bu tarihi çoğu firmada girmek istemiyor.Kullanıcı ben girmek istemiyorum kardeşim diyor.Bu mantıkla illa bilgi girmesi mi gerekecek?Bu hususta daraldım.İlla boş olacaksa,tarih alanından vaz geçip varcar(10) tanımlayıp karakter olarak bilgiyi tutmak kalıyor galiba...en kötü çare,çaresizlikten iyidir babında.. siz ne dersiniz?

En büyük sermaye nakit,nakit sermaye vakittir...

11

Re: SQL Server 2005 de nasıl yaparız?

selamlar;

neyzen kardeşim bende seninle aynı fikirdeyim SQL deki şu NULL ve tarih olayını halen tam olarak anlayamadım.
Çözüm olarak  http://www.fox4um.com/post/7683/#p7683 buradaki TableFixNull('Mytable')  ile tableupdate den önce çalıştırıp, çözüyorum.
Hiç bir problemde olmadı.
Cetin hocamın dediği gibi SQL table oluştururken NOT Null kullandım bu seferde acayip mesajlar vermeye başladı. Bende eskisine tekrar döndüm.
İstersen bu yöntemi bi dene.

Bilmediğin Neyse Yanıldığındır.

12

Re: SQL Server 2005 de nasıl yaparız?

neyzen yazdı:
metin yazdı:

tarihlerde null için eğer class bazlı çalıştıysan birşeyler yapabilirsin. tarih li fieldların init ine

if isnu(this.value)
this.value={}
endif

yazabilirsin. null çetin'in dediği gibi gerçekten başbelası.

üsdatlarım.Yukarıdaki gibi tarih alanların initine yazdığım halde tarih alanına bilgi girmediğimde
01/01/1900 12:00:00 değerini görüyorum,çok bişey farketmedi yani.
şimdi ben şu hususu hakikaten anlayamadım.
Şimfi bir mal var ve  firmaya geliş tarihi tutuluyor.Ancak bu tarihi çoğu firmada girmek istemiyor.Kullanıcı ben girmek istemiyorum kardeşim diyor.Bu mantıkla illa bilgi girmesi mi gerekecek?Bu hususta daraldım.İlla boş olacaksa,tarih alanından vaz geçip varcar(10) tanımlayıp karakter olarak bilgiyi tutmak kalıyor galiba...en kötü çare,çaresizlikten iyidir babında.. siz ne dersiniz?

pardon kod biraz eksik olmuş:

if isnu(this.value) or this.value={01-01-1900}
this.value={}
endif

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

13

Re: SQL Server 2005 de nasıl yaparız?

neyzen yazdı:
metin yazdı:

tarihlerde null için eğer class bazlı çalıştıysan birşeyler yapabilirsin. tarih li fieldların init ine

if isnu(this.value)
this.value={}
endif

yazabilirsin. null çetin'in dediği gibi gerçekten başbelası.

üsdatlarım.Yukarıdaki gibi tarih alanların initine yazdığım halde tarih alanına bilgi girmediğimde
01/01/1900 12:00:00 değerini görüyorum,çok bişey farketmedi yani.
şimdi ben şu hususu hakikaten anlayamadım.
Şimfi bir mal var ve  firmaya geliş tarihi tutuluyor.Ancak bu tarihi çoğu firmada girmek istemiyor.Kullanıcı ben girmek istemiyorum kardeşim diyor.Bu mantıkla illa bilgi girmesi mi gerekecek?Bu hususta daraldım.İlla boş olacaksa,tarih alanından vaz geçip varcar(10) tanımlayıp karakter olarak bilgiyi tutmak kalıyor galiba...en kötü çare,çaresizlikten iyidir babında.. siz ne dersiniz?

Hayir illa bilgi girmeyecek, sadece sen oraya null destegi verceksin ve baslangic degeri null olacak. Bos ile NULL ayni sey degil. Tek yapman gereken ayrim o. En iyisi birgun online gostereyim:)

14 Son düzenleyen, neyzen (10.07.2009 16:26:41)

Re: SQL Server 2005 de nasıl yaparız?

üsdatlarım iki ayrı tablodan sql serverde bilgi getiriyorum

TEXT TO m.lcStatement1 noshow
        SELECT   emanet.uyeid,personel.ad,personel.soyad
                                         FROM emanet,personel  where   emanet.uyeid = personel.uyeid

ENDTEXT

şeklinde fox prodaki gibi, babadan kalma yöntemler le çalışıyor.
Aynı sorguyu başka nasıl yapabiliriz merak ettim (Join kullanarak yada başka bir şekilde).Biraz ufkumuz açılsın diye söylüyorun :-)

En büyük sermaye nakit,nakit sermaye vakittir...

15 Son düzenleyen, ugurlu2001 (10.07.2009 16:28:06)

Re: SQL Server 2005 de nasıl yaparız?

SQL
SELECT

        emanet.uyeid,
        personel.ad,
        personel.soyad
    FROM emanet
    INNER JOIN personel  ON emanet.uyeid = personel.uyeid  -- Burada LEFT yada RIGHT tercih ederbilirsin


Syntax hemen hemen aynı

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ü