DbExpress bileşenleri
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
DbExpress bileşenleri
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ı
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ı
Re: DbExpress bileşenleri
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.
Re: DbExpress bileşenleri
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
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
Re: DbExpress bileşenleri
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ı');
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ı');
Re: DbExpress bileşenleri
İ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.
Veri tabanında primary indexin varmı? O alana değer atamadığın için kaydedemiyor olabilirsin.
Re: DbExpress bileşenleri
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;
Re: DbExpress bileşenleri
veri tabanında primary indeksim var. (otamatik artan alan yaptım)
birde tsimpledataset kullandım şöyle. sp yi sql serverda oluşturdum. çalışıyor.
delphide şu şekilde denemdim hata vermiyo sadece yaptıkarım veri tabanına yansımıyo
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
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;
Re: DbExpress bileşenleri
hatayı yakaladım
internaldataset: cursor not returned from guery
internaldataset: cursor not returned from guery
Re: DbExpress bileşenleri
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.
datset isimli bileşinin TSQLDataset sınıfından kullanıyorsan;
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)cursor not returned from guery
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;
Re: DbExpress bileşenleri
teşekürler yardımlarınız icin.
deiklerinizi aynen yapıcam . vesselam
deiklerinizi aynen yapıcam . vesselam