closed dataset uyarısı... post ederken sorun

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

closed dataset uyarısı... post ederken sorun

Mesaj gönderen CinAnka »

Merhaba;

ADO kullanıyorum, 3 tane tablom var:
1. KISILER(alanlar: ID,ADI,SOYADI, vs...)
2.GRUPLAR(alanlar: ID, ADI)
3.KISIGRUP (alanlar: KİSİLER_İD, GRUPLAR_İD)

Kişiler çeşitli gruplara eklenebiliyor. kişi ekleme-düzeltme formumda, checklistbox içerisinde grup isimleri yer alıyor. kişi hangi gruba bağlı ise, o seçenek seçili. burada yeni eklemeler yapmak da mümkün, yani kişi yeni bir gruba dahil edilmek istendiğinde, ilk önce grup ismi işaretlenip ardından da kaydet butonuna basılıyor.

ben aşağıdaki kodu yazdım ama sürekli aynı uyarıyı alıyorum kaydetmek istediğimde:

'can not perform this operation on a closed dataset'

ama insert yapmışım, edit modunda, hala aynı uyarı. neden?

aşağıdaki kodda, gruba eklenecek kişinin ID si ve ekleneceği grubun ID si bulunup kişigrup tablosunda gerekli alanlara (kisiler_id, gruplar_id) post edilmek isteniyor...

Kod: Tümünü seç


//kisileri gruplara ekleme

ID:=strtoint(form1.DBEdit3.edittext);
for i:=0 to checklistbox1.Items.Count-1 do begin
        if checklistbox1.Checked[i]=true then
        deger:=checklistbox1.items.Strings[i];
        adoquery2.Close;
        adoquery2.SQL.Clear;
        adoquery2.SQL.Text:='SELECT ID FROM GRUPLAR WHERE ADI=:PARAMETRE_DEGERI';
        adoquery2.Parameters.ParamByName('PARAMETRE_DEGERI').VALUE:=deger;
        adoquery2.Open;
        grupid:=strtoint(adoquery2.Fields.Fields[0].asstring);

                while not datamodule1.ADOTable5.Eof do
                begin
                        if (strtoint(datamodule1.ADOTable5.Fields.Fields[1].AsString)=grupid) and (datamodule1.ADOTable5.Fields.Fields[2].AsString=inttostr(ID)) then
                        ayni:='E';
                        datamodule1.ADOTable5.Next;
                end;


                adoquery2.Close;
                adoquery2.SQL.Clear;
                adoquery2.SQL.Text:='SELECT * FROM KISIGRUP WHERE GRUPLAR_ID=:PARAM1 AND KISILER_ID=:PARAM2';
                adoquery2.Parameters.ParamByName('PARAM1').VALUE:=grupid;
                adoquery2.Parameters.ParamByName('PARAM2').VALUE:=ID;
                adoquery2.ExecSQL;

                if ADOQUERY2.recordcount=0 then begin
                datamodule1.ADOTable5.Open;
                datamodule1.ADOTable5.Insert;
                dbedit19.EditText:=inttostr(grupid);
                dbedit20.EditText:=inttostr(ID); 
                datamodule1.ADOTable5.Post;
                end;




end;
teşekkür ederim...
Güçlü olan haklı değil, haklı olan güçlüdür!
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

bu tür durumlarda kodların arasına

Kod: Tümünü seç

showmesssage('1');

...
showmessage('2');
...
showmessage('3');
diye mesajlar koy. böylece hangi komutun hata verdiğini bulmuş olursun.
adotable'a insert dedikten sonra tablo kapanıyodur belki.
sen sonradan bi de

Kod: Tümünü seç

adotable5.post;
demişin. hata ordadır belki.
kolay gelsin.
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

bide table1 in activate özelliğini kontrol et false olabilir onu true yap
Kullanıcı avatarı
CinAnka
Üye
Mesajlar: 84
Kayıt: 03 Nis 2006 11:27
Konum: İstanbul

Mesaj gönderen CinAnka »

söylediklerinizi zaten denemiştim. ama sorun farklı bir yerde imiş, hallettim çok şükür.

teşekkür ederim...
Güçlü olan haklı değil, haklı olan güçlüdür!
Cevapla