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;