DbExpress bileşenleri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

DbExpress bileşenleri

Mesaj gönderen mahir »

slm. forumda aradım ama bulamadım. bu yuzden kon acmak zorunda kaldım. mssql veri tabanına dbexpress bileşenleri ile bağlanıyorum. sqlconnection ve sqldataset kullanıyorum. bunlarla ilgili basit veri tabanı uygulamalarını yapmam gerek.ekle,sil,ilerri, geri ....hep bir yerlerde hata alıyorum. mesela ikinci bir kayıt ekleyemiyorum. kodlarım bu(ikinci bir kayıt eklemek için transactionu kapatıp açmak mı gerekiyor. )
begin

try
Trans.TransactionID := 1;
Trans.IsolationLevel := xilREPEATABLEREAD;
connect.StartTransaction(Trans);
datset.Close;
datset.CommandType := ctQuery;
datset.CommandText := 'INSERT INTO kayit(ad, soyad) values(:Ad, :Soyad)';
DatSet.Params[0].AsString :=EdAd.Text;
DatSet.Params[1].AsString :=EdSoy.Text;
DatSet.ExecSQL;
connect.Commit(Trans);
except
on Exc:Exception do
Connect.Rollback(Trans);

end;


mesela bir sonraki kayda gidiyo. fakat bir önceki kayda gelmiyo.
procedure TForm1.ileriClick(Sender: TObject);
begin
DatSet.CommandType:=ctQuery;
DatSet.CommandText:='select * from kayit';

if DatSet.Bof then
begin
Datset.Next;
EdNo.Text:= Datset.FieldByName('id').AsString;
EdAd.Text:= Datset.FieldByName('ad').AsString;
EdSoy.Text:= Datset.FieldByName('soyad').AsString;
End;

end;

bir önceki kayıt
procedure TForm1.geriClick(Sender: TObject);
begin
DatSet.Close;
DatSet.CommandType:=ctQuery;
DatSet.CommandText:='select id,ad,soyad from kayit';

if not Datset.eof then
begin
Datset.prior;
EdNo.Text:= Datset.FieldByName('id').value;
EdAd.Text:= Datset.FieldByName('ad').value;
EdSoy.Text:= Datset.FieldByName('soyad').value;
end;

end;
bu kodların dışında başka şeyler yapmam lazımmı
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Re: DbExpress bileşenleri

Mesaj gönderen hbahadir »

Kullandığın bileşen unidirectional, yani sadece first, next kullanabilirsin. Delphinin helpinde gerekli açıklamaların tümü mevcut. Eğer kayıtlar arasında dolanmak istiyorsan TSimpleDataset'i kullanacaksın.
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: DbExpress bileşenleri

Mesaj gönderen mahir »

tsimpledataset kullnadım ama sonuc aynı şu koda bakalım
Trans.TransactionID := 1;
Trans.IsolationLevel := xilREPEATABLEREAD;
connect.StartTransaction(Trans);
tsimpledatset.Close;
tsimpledatset.dataset.CommandType := ctQuery;
tsimpledatset.dataset.CommandText := 'INSERT INTO kayit(ad, soyad) values(:Ad, :Soyad)';
tsimpledatset.Open;
tsimpledatset.Params[0].AsString :=EdAd.Text;
tsimpledatset.Params[1].AsString :=EdSoy.Text;
tsimpledatset.Post;
tsimpledatset.ApplyUpdates(0);
connect.Commit(Trans);
bu şekilde denmedim ama yine olmadı. bu kodların haricinde yapacağım bi şey var mı. ayrıca teşeküür ediyorum
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: DbExpress bileşenleri

Mesaj gönderen mahir »

yani bu(yukardaki) kodda ikici bir kayıt ekleyemiyorum
try
Trans.TransactionID := 1;
Trans.IsolationLevel := xilREPEATABLEREAD;
connect.StartTransaction(Trans);
datset.Close;
datset.dataset.CommandType := ctQuery;
datset.dataset.CommandText := 'INSERT INTO kayit(ad, soyad) values(:Ad, :Soyad)';
Datset.Open;
DatSet.Params[0].AsString :=EdAd.Text;
DatSet.Params[1].AsString :=EdSoy.Text;
Datset.Post;
DatSet.ApplyUpdates(0);
connect.Commit(Trans);
except
Connect.Rollback(Trans);
ShowMessage('olmadı');
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Re: DbExpress bileşenleri

Mesaj gönderen hbahadir »

İlk önce aldığın hata mesajını tam olarak yazarsan kahinlik yapmak zorunda kalmayız.
Veri tabanında primary indexin varmı? O alana değer atamadığın için kaydedemiyor olabilirsin.
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Re: DbExpress bileşenleri

Mesaj gönderen hbahadir »

bu arada post değil şöyle kullanacaksın. (Yani edit moduna almıcaksın)

Kod: Tümünü seç

DatSet.Params[0].AsString :=EdAd.Text;
DatSet.Params[1].AsString :=EdSoy.Text;
Datset.ExecSQL;
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: DbExpress bileşenleri

Mesaj gönderen mahir »

veri tabanında primary indeksim var. (otamatik artan alan yaptım)
birde tsimpledataset kullandım şöyle. sp yi sql serverda oluşturdum. çalışıyor.

Kod: Tümünü seç

CREATE PROCEDURE     [kayitekle]    (@ad  nvarchar(25),    @soyad  nvarchar(25))    AS 
INSERT INTO kayit (ad, soyad)  VALUES (@ad,@soyad)
go
delphide şu şekilde denemdim hata vermiyo sadece yaptıkarım veri tabanına yansımıyo

Kod: Tümünü seç

try
  Trans.TransactionID := 1;
  Trans.IsolationLevel := xilREPEATABLEREAD;
  connect.StartTransaction(Trans);
  TsimpleDataset.Close;
  TsimpleDataset.dataset.CommandType := ctStoredProc;
  TsimpleDataset.dataset.CommandText :='KayitEkle';
  TsimpleDataset.Open;
  TsimpleDataset.DataSet.ParamByName('ad').Value :=EdAd.Text;
  TsimpleDataset.dataset.ParamByName('soyad').Value :=EdSoy.Text;
  TsimpleDataset.ApplyUpdates(0);//burada bu şekildemi kulancaz (sqldataset' de ExecSQL)
  connect.Commit(Trans);
except
Connect.Rollback(Trans);
end;
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: DbExpress bileşenleri

Mesaj gönderen mahir »

hatayı yakaladım
internaldataset: cursor not returned from guery
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Re: DbExpress bileşenleri

Mesaj gönderen hbahadir »

Aldığın hata mesajında sorgun herhangi bir kayıt döndürmüyor diyor. Insert into sadece kayıt ekler. Geriye kayıt döndürmez. Bence SQL komutlarını ve ne işe yaradığını iyice oku ve öğren.
cursor not returned from guery
Hiç strored procedure ile falan uğraşma, delphinin helpinden dbExpress transaction yönetiminin nasıl olması gerektiğini oku, hatta forumda da ara. Kodunu sadece aşağıdaki gibi yaz. (open, post gibi komutlar kullanma)

datset isimli bileşinin TSQLDataset sınıfından kullanıyorsan;

Kod: Tümünü seç

datset.CommandText := 'INSERT INTO kayit(ad, soyad) values(:Ad, :Soyad)';
DatSet.Params[0].AsString :=EdAd.Text;
DatSet.Params[1].AsString :=EdSoy.Text;
Datset.ExecSQL;
mahir
Üye
Mesajlar: 82
Kayıt: 11 Mar 2008 12:13

Re: DbExpress bileşenleri

Mesaj gönderen mahir »

teşekürler yardımlarınız icin.
deiklerinizi aynen yapıcam . vesselam
Cevapla