Delphi Can
mssql mastersource - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: mssql mastersource (/showthread.php?tid=5104)



mssql mastersource - guvenlik - 19-07-2020

iyi geceler arkadaşlar uzun zaman oldu delphi ile birşeyler yazmıyalı önceden bde var dı onda bir proje yapmıştım lakin şimdi MsSQL ile yapmak istiyorum bir türlü yapamadım eski kaynaktan yararlanayım dedim olmadı her neyse konuya geleyim.
iki tablom var

tablo1
id---int-----premery key
adı---nchar
soyadi - nchar

tablo2
id----int---- premery key
tid---int---
sinif--nchar

ado connect ile bağlantı sağlıyorum adotable1 de tablo1 ve adotable2 de tablo2 var ve tablo2 de mastersource ile tablo1 deki id ile tablo2 deki tid birleştiriyorum. kayıt işlemi yapıyor lakin tablo2 deki tid de tablo1 deki id yazmıyor. bunun bu şekilde olması gerekiyor eski projemde böyle yapmışım dedimya uzun zaman oldu atladığım bir yermi var yoksa MsSQL bu işlemi gerçekleştirmiyormu. bu arada Embarcadero® Delphi 10.3 kullanıyorum şimdiden yardımlarınız size nefes olarak allahım size versin.


mssql mastersource - FiRewaLL - 19-07-2020

mastersource değil de dediğiniz işlemi MSSQL üzerinde foreign key ile yaparsınız.
İki tabloyu foreign key ile bağlarsanız kayıtlar yapılırken diğer tabloya yapılır ve silinirken de tek tablodan silinmez.


mssql mastersource - guvenlik - 20-07-2020

Firewall arkadaşım ilgin için teşekkür ederim dediğinin üzerinde araştırıyorum sonucu inşallah buara atacağım.


mssql mastersource - guvenlik - 21-07-2020

FiRewaLL arkadaşım iki gündür uğraşuyorum malesef bu iş olmadı tablo2 de ki tid e tablo1 deki id yi yazdıramadım.


mssql mastersource - FiRewaLL - 21-07-2020

(21-07-2020, Saat: 03:46)guvenlik Adlı Kullanıcıdan Alıntı: FiRewaLL arkadaşım iki gündür uğraşuyorum malesef bu iş olmadı tablo2 de ki tid e tablo1 deki id yi yazdıramadım.

Hocam anladığım şu yanlışsa düzeltin.
2 tane tablonuz var
Siz Program üzerinden kayıt gönderdiğiniz de
1. Tabloya kayıtlar girince 2. tabloyada buna bağlı kayıtlar girilecek ve 1. Tablodaki ID kısmını 2. Talodaki TID kısmına yazacaksınız.

Bunu Program üzerinden yapabileceğiniz gibi
SQL üzerinde
1. Tabloya Triger olarak yazabilirsiniz.
1. Tablonun inserted durumunda yani kayıt girildiğikten sonra.
2. Tabloya da o kayıt ile ilişkili verileri yazdırabilrisiniz.


mssql mastersource - guvenlik - 22-07-2020

hocam doğrudur aynen öyle yapacağım bir şeyler yaptım müsait olunca bir bakın sorunum şimdi başka oldu

USE [deneme]
GO
/****** Object: StoredProcedure [dbo].[sp_tablo_insert] Script Date: 22.07.2020 00:03:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Proc [dbo].[sp_tablo_insert]
(
@adi nchar(10),
@soyadi nchar(10),
@sinif nchar(10)
)

As

Begin
insert into tablo1 (adi,soaydi) values (@adi,@soyadi)
declare @tid int
set @tid = SCOPE_IDENTITY()
insert into tablo2 (tid,sinif) values ( @tid, @sinif)
End

Exec sp_tablo_insert 'ali','veli','deli'

bunu girince

tablo1
id adi soyadı
1020 ali veli

tablo2
id tid sınıf
1 1020 deli

bu şekilde kayıt yapıyorum

amacım ise

bu öğrencı 1 den fazla sınıfa girip ders alıyorsa ne yapacağım

Exec sp_tablo_insert 'ali','veli',('deli','zeka','fizik') gibi

sonuc olarakta

tablo1
id adi soyadı
1020 ali veli

tablo2
id tid sınıf
1 1020 deli
2 1020 zeka
3 1020 fizik

olması inşallah anlatabilmişimdir. bu arada Exec sp_tablo_insert 'ali','veli',('deli','zeka','fizik') buradaki kod çalışmıyacak temsili "deli zeka fizik " olanyeri böyle gönderip yapmak mı daha mantıklı yada

Exec sp_tablo_insert 'ali','veli','deli' kaydettikten sonra
Exec sp_tablo_insert '','','zeki'
Exec sp_tablo_insert '','','fizik'
diye devam edip tablo1 deki son id yi alıp altına bunları yazmak mı daha mantıklı onu çözmeye çelişiyorum.

kusura bakma biraz uzun oldu ama başka türlü derdimi anlatamam diye düşünüyorum. hakkını helal et


mssql mastersource - FiRewaLL - 22-07-2020

Alıntı:bu şekilde kayıt yapıyorum

amacım ise

bu öğrencı 1 den fazla sınıfa girip ders alıyorsa ne yapacağım


İnsert procedurunde önce kontrol edin.
2. Tabloya Ekleyeceğiniz zaman eğer bu ID var ise
yani 1. tablodaki Id ikinci tabloda TID kısmında var ise
O zaman bu öğrenci her hangi bir sınıfa kayıtlıdır.
O zaman diğer sınıflar için kayıtlarını sadece 2. Tabloya insert ettirin.
Bunun için program üzerinden bir sorgu yaparak gelen değer True ise 2. Tabloya gönder değilse 1 tabloya
MSSQL üzerinden Exist ile kontrol ederek yapabilrisiniz
MSSQL üzerinde de Procedurede IF ile kontrol edebilirsiniz
MSSQL üzerinde MERGE ile yapabilirsiniz.


mssql mastersource - guvenlik - 22-07-2020

Create Proc [dbo].[sp_tablo_insert]

(
@adi nchar(10),
@soyadi nchar(10),
@sinif nchar(10)
)

As

Begin

if  @adi != '' 
begin
insert into tablo1 (adi,soaydi) values (@adi,@soyadi)
declare @tid int
set @tid = SCOPE_IDENTITY()
insert into tablo2 (tid,sinif) values (@tid,@sinif)
end

if  @adi = '' 
begin
insert into tablo2 (tid,sinif) values ((select top 1 id from tablo1 order by  id desc), @sinif)
end

End

exec sp_tablo_insert 'elif','pala','a sınıfı'
exec sp_tablo_insert '','','b sınıfı'
exec sp_tablo_insert '','','c sınıfı'

sql tarafında böyle bir çözüm buldum.  bunu şimdi adostoreproc ile bağlayıp delphiden gönderince olacaktır.

ilgin için teşekkürler


mssql mastersource - FiRewaLL - 22-07-2020

(22-07-2020, Saat: 15:59)guvenlik Adlı Kullanıcıdan Alıntı:
Create Proc [dbo].[sp_tablo_insert]

(
@adi nchar(10),
@soyadi nchar(10),
@sinif nchar(10)
)

As

Begin

if  @adi != '' 
begin
insert into tablo1 (adi,soaydi) values (@adi,@soyadi)
declare @tid int
set @tid = SCOPE_IDENTITY()
insert into tablo2 (tid,sinif) values (@tid,@sinif)
end

if  @adi = '' 
begin
insert into tablo2 (tid,sinif) values ((select top 1 id from tablo1 order by  id desc), @sinif)
end

End

exec sp_tablo_insert 'elif','pala','a sınıfı'
exec sp_tablo_insert '','','b sınıfı'
exec sp_tablo_insert '','','c sınıfı'

sql tarafında böyle bir çözüm buldum.  bunu şimdi adostoreproc ile bağlayıp delphiden gönderince olacaktır.

ilgin için teşekkürler

Çözüm yollarından birim Smile
Olacaktır böylede