1

Konu: tableupdate anında VFPOledb hatası : field MYGUID doesnt accept null .

tabloda field adi MYGUID c(38) Not Null Primary Key olan tabloma

asagidaki form method kodlari ile kayit ekliyorum
kontrol amacli browse yada form uzerindeki textbox a sonuc geliyor ancak kaydetme aninda su hatayi aliyorum
Microsoft OLEDB Provider for VisualFoxPro : field MYGUID doesnt accept null values

nedenin bir turlu bulamadim yardimlariniz icin simdiden tesekkur.

NOT : mode u SQL e aldigimda sorun yok sad ayni kod calisiyor ...

Visual Fox Pro
&& form method NewRec

With This As Form
    Select (.ptable)
    Insert Into (.ptable) (myguid) Values(NewID())
    &&Append Blank
    .txtCkodu.SetFocus()
    .Refresh()
Endwith


Visual Fox Pro
* form method SaveRec

With This As Form
    Select (.ptable)
    &&BROWSE NORMAL
    If Not Tableupdate(1,.T.,.ptable)  && Tableupdate(2,.T.,.ptable) dada sonuc ayni
        Aerror(laError)
        Messagebox(laError[1,2])
    Else
        Wait Window Timeout 0.1 'Kaydedildi....'
    Endif
Endwith


ca_vfp.prg kodu

Visual Fox Pro
Define Class Ca_Cari As CaBase Of ("CaBase.prg")

    Alias = "Cari"
    SelectCmd = ;
        "select Myguid, Ckodu, Cadi from Cari"
    CursorSchema = ;
        "Myguid C(38), Ckodu C(16), Cadi C(25)"
    KeyFieldList = "ckodu"
    Tables = "Cari"
    UpdatableFieldList = ;
        "Ckodu, Cadi"
    UpdateNameList = ;
        "Ckodu Cari.Ckodu, Cadi Cari.Cadi"
 
 
Procedure AfterCursorFill
        Lparameters lUseCursorSchema, NoDataOnLoad, cSelectCmd, lResult
        If Tagcount(This.Alias) = 0
            CursorSetProp("Buffering",3,This.Alias)
            Select (This.Alias)
            Index On CKODU Tag 'CKODU'
            Index On MYGUID Tag 'MYGUID'
            CursorSetProp("Buffering",5,This.Alias)
            Set Order To 0
            If !Empty(This.Order)
                Set Order To Tag (This.Order)
            Endif
        Endif
 
Endproc
 
Enddefine


Guid olusturan kod

Visual Fox Pro
FUNCTION NEWID()

LOCAL pGUID,rGUID
DECLARE INTEGER UuidCreate IN 'RPCRT4.dll' STRING @pguid
DECLARE INTEGER StringFromGUID2 IN 'Ole32.dll' ;
    STRING rguid, STRING @lpsz, INTEGER cchMax
 
pGUID=REPLICATE(CHR(0),16)
rGUID=REPLICATE(CHR(0),80)
 
RETURN IIF(INLIST(UuidCreate(@pGUID),0,1824),;
    IIF(StringFromGUID2(pGUID,@rGUID,40) # 0, ;
    STRCONV(LEFT(rGUID,76),6), ""),"")
ENDFUNC

2

Re: tableupdate anında VFPOledb hatası : field MYGUID doesnt accept null .

MyGuid alanin bahse girerimki
a) NULL kabul etmiyor (mesaj soyluyor zaten)
b) O alan icin senin default degerin yok

Default degerin yoksa sendekini gondermek isteyeceksin, kaldi ki sendekini (NewID() ile yarattigin) gondermeyecek isen neden GUID kullaniyorsun. Eger gondermediginin farkinda degilsen onu duzelt:

Visual Fox Pro
KeyFieldList = "ckodu"

    Tables = "Cari"
    UpdatableFieldList = ;
        "Ckodu, Cadi"
    UpdateNameList = ;
        "Ckodu Cari.Ckodu, Cadi Cari.Cadi"

Updatable icinde MyGUID yok, gitmiyor.

3

Re: tableupdate anında VFPOledb hatası : field MYGUID doesnt accept null .

Oncelikle yanit icin tesekkur,

a) evet null kabul etmiyor etmemeli smile
b) o alan icin default degerim vardi ama oledb tarafindan desteklenmeyen durumlar icin default veya IUD triggerlar da falan cakmasin diye default tan alip insert into ya dahil ettim.
     ornek projeyi hazirlarken default unda vardi o yuzden karsima cikmadi sad

    ayrica Pkey oldugu icin update dışı tuttum (nedenini neden oyle dusundum hatirlamiyorum sad )
default tan alinca ca_vfp.prg de updateFieldlist ve namelist e koymayi akil edememisim sad
   ca_vfp.prg de gerekli duzenlemeyi yapinca duzeldi smile

   ca_sql.prg de sorun cikarmamasi normal SQL de defaultunda var smile

tekrar tesekkur hocam bu onemli konuyuda halletmis olduk.