Ms Sql Database Connection sorunu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Ms Sql Database Connection sorunu

Mesaj gönderen Karinca »

Merhabalar. Mssql kullandığım bir projem var, ağ üzerinde 2 bilgisayarda çalışıyorum.

Post olayını Chash Update yi açıp Query nin before post una yazıyorum. Eski Makine Olduğu için diğer bilgisayar bazen SQL cvap vermiyo veya kapalı oluyo. ondan dolayı hata veriyor. Kullanıcının karşılaşması hoş değil. Bu durumlarda Post etmeden önce nasıl bi kontrol önerirsiniz ?

Database nin Bağlı olup olmadığına dair kontrol koydum ama çalışmadı. Yine Kendi hatasını veriyor.

Birde Herhangi bir tabloya sorgu gönderiyorum öyle kontrol ediyim dedim ama yine aynı. ne yapmalıyım?


Selamlar...
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: Ms Sql Database Connection sorunu

Mesaj gönderen pro_imaj »

Karinca yazdı: Database nin Bağlı olup olmadığına dair kontrol koydum ama çalışmadı. Yine Kendi hatasını veriyor.

Birde Herhangi bir tabloya sorgu gönderiyorum öyle kontrol ediyim dedim ama yine aynı. ne yapmalıyım?
Hocam yukarıda belirtiğiniz kodları verirseniz daha faydalı olunabilinir.
Çünkü bu tip işlemler için zaten bu kontrollerden başka bişey yapmanıza mümkün. yok.

Saygılarımla
Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Mesaj gönderen Karinca »

Kod: Tümünü seç

 

if F_MyUnit.db.Connected = False then begin showmessage('Bağlantı Yok, Lütfen Konrtol Edin'); abort end else
......// post vs kodlar

Kod: Tümünü seç

procedure CheckConnection;
var
 i:integer;
begin 
 i:=0;
 F_MyUnit.Q1.Close;
 F_MyUnit.Q1.SQL.Text:='select * from ayarlar';
 Try
  F_MyUnit.Q1.Open;
 except
  i:=1;
 end;
 if i=1 then
 begin
  showmessage('Server bağlantısı koptu program kapatılacak. !');
  halt;
 end;//if
end;// CheckConnection;

Selamlar...
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba;
Kodlarda bir sorun gözükmüyor. MSSQLSERVER'a nasıl bir bağlantı şekli ile ulaşıyorsunuz acaba :idea:

Ben sql server için direk bağlantı yapmıyorum. ODBC ile bağlanıyorum .

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from FINSAT450.STK');
TRY
ADOQuery1.OPEN;
EXCEPT
SHOWMESSAGE (' Bağlantı Sağlanamadı :(' );
END;
end;
Sizin için şimdi denedim sonuç olumlu sql serveri Stop edip programı derledim ve bağlantı sağlanamadı mesajını verdi.

Saygılarımla
Kolay gelsin.

Gelişmelri yazarsanız daha farklı fişkirler çıkacağına eminim bence sizin ufajk bir mantıksal hatanız olabilr.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Mesaj gönderen Karinca »

Tşk ederim Hocam.

Bende ODBC ile bağlanıyorum. Yalnız BDE deki bileşenleri Kullanıyorum. Bendeki Kodun bi benzerini yazmışsınız sanırım. Benim Testimde de hala kendi hatasını veriyor.
Neyse Bakim Biraz, birşe olursa söylerim :) ;)



Selamlar...
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Eğer ODBC + BDE + CachedUpdates kullanıyorsanız, bağlantı olup olmadığını sizin de yaptığınız gibi

Kod: Tümünü seç

if not Database1.Connected then
begin
  ShowMessage('') ;
  Abort ;
end ;
şeklinde kontrol edebilirsiniz.

Sorun tam nerede çıkıyor bunu baştan adım adım anlatırsanız yardımcı olabilirim. Ben daha önce bu bahsettiğiniz biçimde (ODBC + BDE + CachedUpdates) kullandım bir sorun da olmuyordu.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Mesaj gönderen Karinca »

Hocam Parogramı açarken kullanıcınısı ve İzinlerini seçtirtiyorum.
Sonra Database yi bağlıyorum. İşlemler başlıyo.

Herhangi bir formda işlem yapmaya başlıyorum. Sonra Before Post a İnsert cümlesi ile veri ekliyorum.
Denerken; bütün alanları dolduruyorum ve kaydet tuşuna bamadan SQL server i stop ediyorum. Kaydet dediğim zaman makine önce bayılıyo, baya bi bekliyo ve bağlantının olmadığına dair kendi msj ını veriyor. benim kontrolüme bakmıyo.

Acaba Event yakalamamı(nasıl olcaksa :? ) olur veya da ağ üzerinden gidip maikineyi felanmı kontrol ettirsek ? veya veya kayıt yaptıktan sonra:

İnsert çalıştıktan sonra tabloya ekleiğimiz veriyi mi kontrol ettirsek

Kod: Tümünü seç

//ad isimli alana a değerini yazdırdığımızı farzedersek
 Select * tebloismi where ad="a"  
diyerek mi kontrol etsek ? ama program geneline bakınca baya da kasacak bi durum. :?


Selamlar...
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Karinca yazdı:...Sonra Before Post a İnsert cümlesi ile veri ekliyorum....
BeforePost a insert cümlesi mi ekliyorsun? Sanki burada bir problem var gibi geldi. Nasıl ekliyorsun bir örnek yazabilir misin?
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Mesaj gönderen Karinca »

Kod: Tümünü seç

 
    Query1.Close;
    Query1.SQL.Text :=' begin transaction '+
     ' insert into web_paket ( '+
     ' paket_id, '+
     ' paket_adi, '+
     ' top_dmn, '+
     ' alan, '+
     ' trafik, '+
     ' ) values ( '+
      pak_adi.text+', '+
      pak_id.text+', '+
      pak_dmn.text+', '+
      pak_alan.text+', '+
      pak_trafik.text+', '+
     ' ) '+
     ' commit transaction ';
     Query1.ExecSQL; 
Tabloya veri eklemde sıkıntım yok. Orda bi problem olduğunu sanmıyorum
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Coder Lord Haklı,

Bana yaptığınız çok doğru kurgulanmış bir yapı gibi gelmedi.

??? Before Post'ta INSERT cümlesi kullanmak. Maksadı tam olarak anlayamadım !

Biraz daha genişletmek mümkün mü?

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Peki şöyle birşey diyeyim. Before post'ta insert ile başka bir tabloya birşey ekledin. Post başarısız olursa ne yapıyorsun? Rollback?

Ben böyle şeylerde Event'lerden ziyade trigger yöntemini tercih ediyorum.
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Mesaj gönderen Karinca »

Sorunda Post un başarısız olmasını engellemek. SQL server cevap vermediğinde veya kapalı olduğunda sorun oluyor. Sonra Elle düzeltmem gerekiyor felan filan.

Yani siz Eğer rollback geldiğinde veya post başarısız olursa trigger vasıtasıyla msj verdirtiyorum diyosunuz. Buna bakmalıyım. Tşk ler.



Selamlar...
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
Kullanıcı avatarı
Karinca
Üye
Mesajlar: 239
Kayıt: 25 Ağu 2004 07:06
Konum: http://localserver/
İletişim:

Mesaj gönderen Karinca »

Ben böyle şeylerde Event'lerden ziyade trigger yöntemini tercih ediyorum.
Hocam bu trigger e bir örnek verebilirmisiniz ?



Selamlar...
cihana hakan olmak bir kuru kavga imiş
bir mürşide bende olmak cümleden evla imiş
h.z. Fatih


Resim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Hayır hayır. Farklı tabloya Insert'i BeforePost yerine Trigger'dan yapıyorum demek istedim.

Yani olay şöyle ki:

Kod: Tümünü seç

Query1.Open;
Query1.Insert;
Query1.FieldByName('Test').Value:= 'TEST';
try
  Query1.Post;  // Bu başarılı olursa VT içindeki Trigger'da diğer tabloya insert eder
  Commit;
except
  Rollback;  // Bütün değişiklikleri geri al.
  // Burada hata mesajı da verilebilir.
end;
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Re: Ms Sql Database Connection sorunu

Mesaj gönderen tuanna »

Karinca yazdı:Merhabalar. Mssql kullandığım bir projem var, ağ üzerinde 2 bilgisayarda çalışıyorum.

Post olayını Chash Update yi açıp Query nin before post una yazıyorum. Eski Makine Olduğu için diğer bilgisayar bazen SQL cvap vermiyo veya kapalı oluyo. ondan dolayı hata veriyor. Kullanıcının karşılaşması hoş değil. Bu durumlarda Post etmeden önce nasıl bi kontrol önerirsiniz ?

Database nin Bağlı olup olmadığına dair kontrol koydum ama çalışmadı. Yine Kendi hatasını veriyor.

Birde Herhangi bir tabloya sorgu gönderiyorum öyle kontrol ediyim dedim ama yine aynı. ne yapmalıyım?

////////////////////////////////////////////////////////////////////////////////////

sorun kısmının Bura olduğunu anladım ...

Eski Makine Olduğu için diğer bilgisayar bazen SQL cvap vermiyo veya
kapalı oluyo. ondan dolayı hata veriyor.

sizin sıkıntınız...:: bu hatanın kullanıcıya yanması...

////////////////////////////////////////////////////////////////////////////////////
Tuannanın cevabı..:Bu hatanın kullanıcıya yanımasını engellemek için su tür bir sey yazarız ama bence bu connect olmadığında bir hatayı olayı vardır...onu yakalıyp hata olmadığını söyleyebilriz...

ama bu hata olayını yakalamadanda sunuda yapsak olur ama profesyonelce değil

try
if not Database1.Connected then
begin
ShowMessage('') ;
Abort ;
end ;
except

/// hata oluştuğunda belkide kullancıya uygun bir dile bir seyler söleyebilirz...veya biz işlemi sonlandırırız...
end;

bu mesajı yazıyor olmama ragmen bir yerde okumuştum bağlantı hatasında oluşnca kodu yakalbiliyorduk...bence o yolla çözmek lazım ....
kolay gelsin ben o olaya bakacam....








Selamlar...
Siz hayal edin...Biz yapalım TuannaSoft...
Cevapla