Tablo Yedekleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Merhaba;
Kodu kullandım ama şu hatayı verdi ne yaptıysam aşamadım ;

Kod: Tümünü seç

procedure TEmanet_Giris.EmanetBilgileriniYedekleme1Click(Sender: TObject);
begin
try
EYedek.Close;
EYedek.SQL.text:='drop table TBLEMANETYDK';
EYedek.SQL.text:='drop table TBLEMANETPARAMYDK';
EYedek.execsql;
exception
end;  // BURDA HATA VERİYOR
EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETYDK FROM TBLEMANET';
EYedek.execsql;
[Error] EMANETGIR.pas(157): Statement expected, but expression of type 'Class reference' found

end try dedim olmadı.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Tablo Yedekleme

Mesaj gönderen tuna »

EYedek.SQL.text:='drop table TBLEMANETYDK';
EYedek.SQL.text:='drop table TBLEMANETPARAMYDK';

bu şekilde kullanmayın. aşğıdaki şekilde kullanmanız lazım.
Sql'e tek komut göndermeniz gerkiyor. Birden fazla komut göndermenin yöntemleride var ama siz önce bu probleminizi çözün.

try
EYedek.Close;
EYedek.SQL.text:='drop table TBLEMANETYDK';
EYedek.execsql;
exception
end;

try
EYedek.Close;
EYedek.SQL.text:='drop table TBLEMANETPARAMYDK';
EYedek.execsql;
exception
end;

EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETYDK FROM TBLEMANET';
EYedek.execsql;

EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETPARAMYDK FROM TBLEMANETPARAM';
EYedek.execsql;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Arkadaşlar hatayı buldum;
Exception yerine Except yazdım.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Şunu yapmak istedim Tabloyu bulamadım hata aldım ;

Kod: Tümünü seç

procedure TEmanet_Giris.EmanetBilgileriniYedekleme1Click(Sender: TObject);
begin
try
EYedek.Close;
EYedek.SQL.Text:='IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=BASE TABLE AND TABLE_NAME=TBLEMANETYDK)';
IF TABLE_NAME=TBLEMANETYDK Then
Application.MessageBox('Eski Yedekleme Mevcuttur. Silmek İstermisiniz ? !!!','Bilgilendirme Mesajı',MB_YesNo or MB_ICONQUESTION) of;
  IDYES:
begin
EYedek.SQL.text:='drop table TBLEMANETYDK';
EYedek.SQL.text:='drop table TBLEMANETPARAMYDK';
EYedek.execsql;
except
End;
  IDNO: Application.MessageBox('Eski Yedekleriniz Silinmemiştir. !!!','Bilgilendirme Mesajı',MB_ICONINFORMATION); // hayır seçilirse ( kaydedilmesin
  End;
EYedek.Open();
Else
EYedek.SQL.Add('SELECT * INTO TBLEMANETYDK FROM TBLEMANET');
EYedek.SQL.Add('SELECT * INTO TBLEMANETPARAMYDK FROM TBLEMANETPARAM');
Application.MessageBox('Eski Yedek Bulunamamıştır.Yeni Yedek Oluşturuldu !!!','Bilgilendirme Mesajı'
EYedek.Open;
EYedek.Active:=True;
end;
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Tablo Yedekleme

Mesaj gönderen tuna »

Pardon except yazacağıma exception yazmışım :)
Benim yazdığım kodda programı debug modda çalıştırdığınızda excet'e düşünce uyarı gelir ama program kırılmaz devam eder.
Programı son kullanıcı açtığında except'e düşen hatayı görmez hata yokmuş gibii devam eder.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Tuna kardeşim ben başlarına kontrol koymak istedim ama beceremedim yardımcı olur musun ?
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Tablo Yedekleme

Mesaj gönderen tuna »

//Kontrol tablo varsa siler yoksa işlem yapmaz

eyedek.close;
eyedek.sql.clear;
eyedek.sql.add('IF OBJECT_ID(''DATABASEADINIYAZ..TBLEMANETYDK '') IS NOT NULL ');
eyedek.sql.add('BEGIN ');
eyedek.sql.add('DROP TABLE TBLEMANETYDK ');
eyedek.sql.add('END');
eyedek.execsql;


//yedek alır

EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETYDK FROM TBLEMANET';
EYedek.execsql;

diğer tablon içinde aynı işlemleri yap

eyedek.close;
eyedek.sql.clear;
eyedek.sql.add('IF OBJECT_ID(''DATABASEADINIYAZ..TBLEMANETPARAMYDK'') IS NOT NULL ');
eyedek.sql.add('BEGIN ');
eyedek.sql.add('DROP TABLE TBLEMANETPARAMYDK');
eyedek.sql.add('END');
eyedek.execsql;


EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETPARAMYDK FROM TBLEMANETPARAM';
EYedek.execsql;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Tuna Kardeşim özür dilerimbenim hatam eksik yazdım. Mesaj verdirmek istedim.
Silmek istermisiniz?
dosya mevcut
yedek alındı gibi

Yardımların İçin Çok Teşekkür Ederim.
Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Tablo Yedekleme

Mesaj gönderen tuna »

eyedek.close;
eyedek.sql.clear;
eyedek.sql.add('IF OBJECT_ID(''DATABASEADINIYAZ..TBLEMANETYDK '') IS NOT NULL ');
eyedek.sql.add('BEGIN ');
eyedek.sql.add('select ''VAR'' AS SORGU ');
eyedek.sql.add('END ');
eyedek.sql.add('ELSE ');
eyedek.sql.add('BEGIN ');
eyedek.sql.add('select ''YOK'' AS SORGU ');
eyedek.sql.add('END ');
eyedek.open;

if eyedek.fieldbyname('SORGU').asstring='VAR' THEN
BEGIN
Tablo var olduğunda yapılacak komutlar
end
else
begin
tablo yoksa yapılacak komutlar
end;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Ben şu şekilde bir kod düzenledim ama tabloyu bulamadığım için hata verdiği yerler oluyor;

Kod: Tümünü seç

procedure TEmanet_Giris.EmanetBilgileriniYedekleme1Click(Sender: TObject);
begin
EYedek.Close;
EYedek.SQL.Text:='IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=BASE TABLE AND TABLE_NAME=TBLEMANETYDK)';
//IF TABLE_NAME=TBLEMANETYDK Then
  Case Application.MessageBox('Eski Yedekleme Mevcuttur. Silmek İstermisiniz ? !!!','Bilgilendirme Mesajı',MB_YesNo or MB_ICONQUESTION) of
  IDYES:
begin
try
EYedek.Close;
EYedek.SQL.text:='drop table TBLEMANETYDK';
EYedek.execsql;
except
end;

try
EYedek.Close;
EYedek.SQL.text:='drop table TBLEMANETPARAMYDK';
EYedek.execsql;
except
End;
end;
  IDNO: Application.MessageBox('Eski Yedekleriniz Silinmemiştir. !!!','Bilgilendirme Mesajı',MB_ICONINFORMATION); // hayır seçilirse ( kaydedilmesin
end;

EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETYDK FROM TBLEMANET';
EYedek.execsql;

EYedek.Close;
EYedek.SQL.text:='SELECT * INTO TBLEMANETPARAMYDK FROM TBLEMANETPARAM';
EYedek.execsql;

Application.MessageBox('Eski Yedek Bulunamamıştır.Yeni Yedek Oluşturuldu !!!','Bilgilendirme Mesajı');
end;

Kullanıcı avatarı
tuna
Üye
Mesajlar: 300
Kayıt: 07 Tem 2008 04:39
Konum: İstanbul

Re: Tablo Yedekleme

Mesaj gönderen tuna »

Benim yazdığım şekilde deneme yapabildinizmi?
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Ben şuna takıldım ; SQL de ;

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='TBLEMANETYDK')
SELECT 'BU TABLO VERITABANINDA KAYITLIDIR.'
ELSE
SELECT 'BU TABLO VERITABANINDA KAYITLI DEGILDIR.'

bu şekilde TABLO yu buluyorumda delphi de neden bunu uyarlayamıyorum ? :)
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

şimdi sizin dediğinizi yapıyorum .
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Şirket DATABASES yi şu şekilde Form1 de buluyorum ama EMANET_GIRIS e taşıyamadım ;

Var
SIRKET:String;
begin
SIRKET:=Form1.ADOConnection1.DefaultDatabase:=DATA;
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Tablo Yedekleme

Mesaj gönderen ozcank »

Bu Form1 de ben sorguyu Emanet_Giris de çalıştırıyorum.

Kod: Tümünü seç

procedure TForm1.DBLookupComboBox1CloseUp(Sender: TObject);
Var
DATA:String;
begin
  if DBLookupComboBox1.Text <>'' then
  begin
     DATA:=DBLookupComboBox1.Text;
     ADOConnection1.Connected:=False;
     memo1.Lines.LoadFromFile('c:\netsis\dataconnection.txt');
     ADOConnection1.DefaultDatabase:=DATA;
     ADOConnection1.Connected:=True;
     Form2.StatusBar1.Panels[0].Text := 'Şirket : '+DATA;
Cevapla