MSSQL 2005 de Database Silmede Hata

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: MSSQL 2005 de Database Silmede Hata

Mesaj gönderen akdatilla »

merhaba
Delphi 7 ile test etmedim ancak hatanın sebebi silmek istediğin veritabanına bağlı bulunmandan kaynaklı olduğunu sanıyorum.
Diyelim ki Ado bağlantısı ile DB1 adlı veritabanına bağlandın.
Sonra bağlantın devam ederken drop data_base DB1 komutunu çalıştırırsan veri tabanı kullanılmakta olduğu için hata verir.
Bu sorunu çözmek için, silme komutunu vermeden önce AdoConnection1.DefaultDatabase:='master'; şeklinde bağlantı veritabanını değiştirebilirsin.
Böylelikle en azında kendi bağlantını kesmiş olursun. Ancak silme komutu esnasında başka bir uygulama tarafından veritabanı kullanılıyorsa yine aynı
hata çıkacaktır.
Silme işlemi esnasında Enterprise manager, SQLServer Management Studio gibi veritabanı yönetim araçlarını da kapatman gerekebilir.
Kolay gelsin.
Kullanıcı avatarı
supervisor
Üye
Mesajlar: 50
Kayıt: 07 Kas 2005 10:38
Konum: Turgutlu

Re: MSSQL 2005 de Database Silmede Hata

Mesaj gönderen supervisor »

akdatilla yazdı:merhaba
Delphi 7 ile test etmedim ancak hatanın sebebi silmek istediğin veritabanına bağlı bulunmandan kaynaklı olduğunu sanıyorum.
Diyelim ki Ado bağlantısı ile DB1 adlı veritabanına bağlandın.
Sonra bağlantın devam ederken drop data_base DB1 komutunu çalıştırırsan veri tabanı kullanılmakta olduğu için hata verir.
Bu sorunu çözmek için, silme komutunu vermeden önce AdoConnection1.DefaultDatabase:='master'; şeklinde bağlantı veritabanını değiştirebilirsin.
Böylelikle en azında kendi bağlantını kesmiş olursun. Ancak silme komutu esnasında başka bir uygulama tarafından veritabanı kullanılıyorsa yine aynı
hata çıkacaktır.
Silme işlemi esnasında Enterprise manager, SQLServer Management Studio gibi veritabanı yönetim araçlarını da kapatman gerekebilir.
Kolay gelsin.

Selamlar;
Programda zaten güvenlik var.Bulundugun Db de aynı zamanda silme yapamam. Bu normal. Normal olmayan hani başka Db ye geçin sonra silin dedinizya,silmek istediğim Db ile ilgili bütün Adoları sonlandırıyorum. drop data_base yapınca Db mesgul uyarısı veriyor. :shock: 30-40 sn bekliyorum programdan çıkmadan tekrar sil komutunu veriyorum.Bu sefer siliniyor. :mrgreen: MSSQL2000 ve 2005 de aynı hatayı veriyor.Saygılar.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: MSSQL 2005 de Database Silmede Hata

Mesaj gönderen akdatilla »

Tekrar merhaba
Sizin bahsettiğiniz olayın nasıl gerçekleştiğini denemek için bir Test programı hazırladım
Aşağıda programın kodlarını veriyorum. Bu programı kendi sisteminiz uyarlayıp (şifre ve bağlantı ayarlarını yapın) çalıştırın.
Önce DBAcveKullan butonuna tıklayın. Ekranda bir tablonun listesi görülecektir. Daha sonra DBSil butonuna tıklayın.
Benim sistemimde DB Silindi mesajını alıyorum. Hiç bir hata mesajı almadan çalışma zamanında db açıyorum, kullanıyorum ve
halen kullanımda olan (ekranda liste mevcutken) db'yi siliyorum. Bu program sizin sisteminizde hata mesajı veriyorsa o zaman
kullandığınız delphi yada mssql versiyonu ile ilgili bir problem olabilir.

Kod: Tümünü seç

program mstestpr1;

uses
  Forms,
  mstestu1 in 'mstestu1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Kod: Tümünü seç

unit mstestu1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids;

type
  TForm1 = class(TForm)
    Con1: TADOConnection;
    Q1: TADOQuery;
    Q2: TADOQuery;
    DBAcveKullan: TButton;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBSil: TButton;
    procedure DBSilClick(Sender: TObject);
    procedure DBAcveKullanClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBAcveKullanClick(Sender: TObject);
Var
   j:integer;
begin

     Con1.Close;
     Con1.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;'+
     'User ID=sa;Initial Catalog=master;Data Source=ARGE03\SQLEXPRESS;Password=1234;'+
     'Application Name=TESTPROGRAMI';
     Con1.Open;
     q1.Close;
     q1.SQL.Text:='CREATE DATABASE MYTESTDB';
     q1.ExecSQL;
     Con1.DefaultDatabase:='MYTESTDB';
     q1.Close;
     q1.SQL.Text:='CREATE TABLE TESTTBL (ID INT NOT NULL,'+
     'RANDVAL INT, PRIMARY KEY (ID))';
     q1.ExecSQL;
     for j := 1 to 1000 do
     begin
          q1.Close;
          q1.SQL.Text:='INSERT INTO TESTTBL (ID,RANDVAL) VALUES ('+inttostr(j)+
          ','+inttostr(random(1000))+')';
          q1.ExecSQL;
     end;
     q2.Close;
     q2.SQL.Text:='SELECT * FROM TESTTBL';
     q2.Open;
end;

procedure TForm1.DBSilClick(Sender: TObject);
Var
   vreccordsaffected:integer;
begin
     Con1.DefaultDatabase:='master';
     try
        Con1.Execute('drop data_base MYTESTDB',vreccordsaffected);
     except
        showmessage('DB Silinemedi');
        exit;
     end;
     showmessage('DB Silindi');
end;

end.

Kod: Tümünü seç

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 261
  ClientWidth = 451
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object DBAcveKullan: TButton
    Left = 232
    Top = 40
    Width = 75
    Height = 25
    Caption = 'DB A'#231
    TabOrder = 0
    OnClick = DBAcveKullanClick
  end
  object DBGrid1: TDBGrid
    Left = 56
    Top = 112
    Width = 281
    Height = 121
    DataSource = DataSource1
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object DBSil: TButton
    Left = 232
    Top = 72
    Width = 75
    Height = 25
    Caption = 'DBSil'
    TabOrder = 2
    OnClick = DBSilClick
  end
  object Con1: TADOConnection
    LoginPrompt = False
    Left = 32
    Top = 40
  end
  object Q1: TADOQuery
    Connection = Con1
    Parameters = <>
    Left = 120
    Top = 40
  end
  object Q2: TADOQuery
    Connection = Con1
    Parameters = <>
    Left = 176
    Top = 40
  end
  object DataSource1: TDataSource
    DataSet = Q2
    Left = 176
    Top = 80
  end
end
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: MSSQL 2005 de Database Silmede Hata

Mesaj gönderen sabanakman »

İlginç, test çalışıyor :) . Sanırım DB'ye bağlanan bileşenleri ayrı tutmaktan kaynaklanan bir durum. Çünkü tek ADOConnection bileşeni sorun çıkarmıyor.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
supervisor
Üye
Mesajlar: 50
Kayıt: 07 Kas 2005 10:38
Konum: Turgutlu

MSSQL 2005 de Database Silmede Hata

Mesaj gönderen supervisor »

akdatilla bravo :bravo:
Böyle bir durumu hiç düşünmedim desem yeridir.ßen hatayı nerelerde aradım :D
Tek bir adocon bileşeni işi hallediyor.Farklı adocon bileşeni silme yapmıyor.
Nerden bağlandıysan ordan sil mantığı :mrgreen: teşekkürler.
Kullanıcı avatarı
supervisor
Üye
Mesajlar: 50
Kayıt: 07 Kas 2005 10:38
Konum: Turgutlu

Re: MSSQL 2005 de Database Silmede Hata

Mesaj gönderen supervisor »

Ama Entegre bir programı tek bir adoyla çalıştırmak benim için zor.Dll formlarla tablo bağlantılarım var. :evil:


:? Az kaldı yakında çözücem heralde :lol:
Cevapla