Mysql Backup SQL komutları şeklinde.

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mysql Backup SQL komutları şeklinde.

Mesaj gönderen MercilessTurk »

Forumda bu tip bir fonksiyon ya da class araştırdığımda herhangi birşey bulamadım. Bende daha önce php de yazdığım kodları delphiye çevirip class haline getirdim. Özellikle delphiye karşılık gelen bazı fonksiyonları bulmakta biraz zorlandım :D . Kodu php den çevirdiğim için özellikle karmaşık string (' ,\, / vs.. gibi) içeren alanlarda sorun çıkarabilir. Şimdilik kodu kullandığım programda sorunsuz şekilde yedek alma işlemini yaptı. Herhangi bir eksik filan varsa yazarsanız sevinirim.

Kod: Tümünü seç

type
  TBackupMysql=Class
  private
  dbname:string;
  Query:TZQuery; {Zeos bileşenlerini kullandığımdan dolayı bu şekilde tanımladım. Siz kendi kullandığınız bileşen ismini yazarsınız. TSqlQuery mesala.}
  protected

  function CheckTypeOfField(FieldType: TFieldType): Boolean;
  public
  constructor Create(ZQuery:TZQuery;databasename:string);
{Yukarıda da belirttiğim gibi  kendi kullandığınız bileşen ismini yazın TZQuery yerine.}
  destructor Destroy; override;
  function dump_mysql_database():String;
  end;

implementation


constructor TBackupMysql.Create(ZQuery:TZQuery;databasename:string);
begin
  dbname:=databasename;
  Query:=ZQuery;
end;

destructor TBackupMysql.Destroy;
begin
  inherited;
end;

function TBackupMysql.CheckTypeOfField(FieldType: TFieldType): Boolean;
begin
If FieldType=ftInteger Then Result := true;
If FieldType=ftSmallInt Then Result := true;
If FieldType=ftBoolean Then Result := true;
If FieldType=ftFloat Then Result := true;
If FieldType=ftDate Then Result := true;
If FieldType=ftTime Then Result := true;
If FieldType=ftDateTime Then Result := true;
If FieldType=ftLargeint Then Result := true;
If FieldType=ftDataSet Then Result := true;
If FieldType=ftTimeStamp Then Result := true;

If FieldType=ftUnknown Then Result := false;
If FieldType=ftCurrency Then Result := false;
If FieldType=ftString Then Result := false;
If FieldType=ftWord Then Result := false;
If FieldType=ftBCD Then Result := false;
If FieldType=ftBytes Then Result := false;
If FieldType=ftVarBytes Then Result := false;
If FieldType=ftBlob Then Result := false;
If FieldType=ftMemo Then Result := false;
If FieldType=ftGraphic Then Result := false;
If FieldType=ftFmtMemo Then Result := false;
If FieldType=ftParadoxOle Then Result := false;
If FieldType=ftDBaseOle Then Result := false;
If FieldType=ftTypedBinary Then Result := false;
If FieldType=ftCursor Then Result := false;
If FieldType=ftWideString Then Result := false;
If FieldType=ftFixedChar Then Result := false;
If FieldType=ftADT Then Result := false;
If FieldType=ftArray Then Result := false;
If FieldType=ftReference Then Result := false;
If FieldType=ftOraBlob Then Result := false;
If FieldType=ftOraClob Then Result := false;
If FieldType=ftVariant Then Result := false;
If FieldType=ftInterface Then Result := false;
If FieldType=ftIDispatch Then Result := false;
If FieldType=ftGuid Then Result := false;
If FieldType=ftFMTBcd Then Result := false;
end;

function TBackupMysql.dump_mysql_database():String;
var
search_array:Array[1..6] of string=('\\','\''','\x00','\x0a','\x0d','\x1a');
replace_array:Array[1..6] of string=('\\\\','\\\''','\0','\n','\r','\Z');
tables: array of string;
generated_sql,last_key_name,default_str,null_str,extra_str,key_prefix,replacedtext:string;
i,x,y,arraylength,fieldcount,keycount:integer;
typeoffield:Boolean;
begin
generated_sql :='#   MercilessDumper'+#13#10;
generated_sql :=generated_sql+'#---------------------------------------------'+#13#10;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('show tables FROM '+dbname);
Query.Open;
arraylength:=Query.RecordCount;
if arraylength=0 then
Result:='false';
SetLength(tables,arraylength);
x:=1;
while not Query.EOF do
begin
    tables[x]:=Query.Fields[0].Text;
    Query.Next;
    Inc(x);
end;
for x:=1 to arraylength do
begin
last_key_name := '';
generated_sql := generated_sql+#13#10+'#'+#13#10+'# Tablo bilgisi ['+tables[x]+']'+#13#10+'#'+#13#10;
generated_sql := generated_sql+'CREATE TABLE IF NOT EXISTS '+tables[x]+' ('+#13#10;

Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SHOW FIELDS FROM '+tables[x]);
Query.Open;
fieldcount:=Query.RecordCount;

Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SHOW KEYS FROM '+tables[x]);
Query.Open;
keycount:=Query.RecordCount;


Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SHOW FIELDS FROM '+tables[x]);
Query.Open;
i:=1;
while not Query.EOF do
begin

if SameText(Query.FieldByName('Default').Text, 'NULL') or SameText(Query.FieldByName('Default').Text, '') then
default_str:=''
else
default_str:=' DEFAULT '''+Query.FieldByName('Default').Text+'''';

if not SameText(Query.FieldByName('Null').Text, 'YES') then
null_str:=''
else
null_str:=' NOT NULL';

if SameText(Query.FieldByName('Extra').Text, 'NULL') or SameText(Query.FieldByName('Extra').Text, '') then
extra_str:=''
else
extra_str:=' '+Query.FieldByName('Extra').Text;

generated_sql:=generated_sql+'  '+Query.FieldByName('Field').Text+' '+Query.FieldByName('Type').Text+null_str+default_str+extra_str;

if (i+1<fieldcount) or (keycount>0) then
generated_sql :=generated_sql+ ' ,';

generated_sql :=generated_sql+#13#10;
Inc(i);
Query.Next;
end;

Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SHOW KEYS FROM '+tables[x]);
Query.Open;

while not Query.EOF do
begin

if not SameText(last_key_name, Query.FieldByName('Key_name').Text) then
begin

if not SameText(last_key_name,'') then
begin
generated_sql:=copy(generated_sql,0,length(generated_sql)-1);
generated_sql :=generated_sql+'),'+#13#10;
end;

if SameText(Query.FieldByName('Key_name').Text, 'PRIMARY') then
key_prefix := '  PRIMARY KEY'
else begin

if not SameText(Query.FieldByName('Non_unique').Text, '1') then
key_prefix :='  UNIQUE KEY '+Query.FieldByName('Key_name').Text
else
key_prefix := '   KEY '+Query.FieldByName('Key_name').Text;

end;

generated_sql := generated_sql+key_prefix+' (';
end;

generated_sql := generated_sql+Query.FieldByName('Column_name').Text+',';

last_key_name := Query.FieldByName('Key_name').Text;
Query.Next;

end;

if not SameText(last_key_name,'') then
begin
generated_sql:=copy(generated_sql,0,length(generated_sql)-1);
generated_sql :=generated_sql+')'+#13#10;
end;

generated_sql :=generated_sql+');'+#13#10;


generated_sql :=generated_sql+#13#10+'#'+#13#10+'# Veriler -- ['+tables[x]+']'+#13#10+'#'+#13#10;

Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT * FROM '+tables[x]);
Query.Open;

if Query.RecordCount=0 then
generated_sql :=generated_sql+'# (no data in ['+tables[x]+'])'+#13#10;


while not Query.EOF do
begin
generated_sql :=generated_sql+ 'INSERT INTO '+tables[x]+' VALUES(';
for i:=0 to Query.Fields.Count-1 do
begin
if Query.Fields[i].IsNull=true then
generated_sql :=generated_sql+'NULL'
else begin
if SameText(Query.Fields[i].Text, '0') or not SameText(Query.Fields[i].Text,'') then begin
typeoffield:=CheckTypeOfField(Query.Fields[i].DataType);
if typeoffield=true then
generated_sql:=generated_sql+Query.Fields[i].Text
else begin
replacedtext:=Query.Fields[i].Text;
for y:=Low(search_array) to High(search_array) do
begin
replacedtext:=StringReplace(replacedtext,search_array[y],replace_array[y],[rfReplaceAll]);
end;

generated_sql:=generated_sql+''''+replacedtext+'''';

end;

end else
generated_sql:=generated_sql+''''+'''';

end;


if i+1<Query.Fields.Count then
generated_sql:=generated_sql+',';

end;
generated_sql:=generated_sql+ ');'+#13#10;
Query.Next;
end;
end;
Query.Close;
Query.SQL.Clear;
Result:=generated_sql;
end;  
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mesaj gönderen MercilessTurk »

Unutmadan kullanımı:

Kod: Tümünü seç

var
sqlsorgusu:TStrings;
yol:string;
yedekci:TBackupMysql;
begin
yedeksorgu.Connection:=ZConnection1;
yedeksorgu.SQL.Clear;
yol:=extractfilepath(application.exename);
try
yedekci:=TBackupMysql.Create(yedeksorgu,'veritabani');
sqlsorgusu:=TStringList.Create;
sqlsorgusu.Add(yedekci.dump_mysql_database);
sqlsorgusu.SaveToFile(yol+'/veritabaniyedegi/yedek.sql');
finally
sqlsorgusu.Free;
yedekci.Free;
ShowMessage('Yedek Alma islemi tamamlandi.');
end;
end; 
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Paylaşım için teşekkürler :)
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
igny
Üye
Mesajlar: 54
Kayıt: 14 Mar 2008 04:03

Re: Mysql Backup SQL komutları şeklinde.

Mesaj gönderen igny »

hocam sorun bendemi bilmiyorum ama çalıştıramadım bunu ben ordaki protected ı anlamadım sürekli hata veriyoneyin nereye yazılacağını açıklarsanız çok iyi olur.nezamandır böyle birşey arıyorum.emeğiniz için teşekkürler.
01esra
Üye
Mesajlar: 1
Kayıt: 27 Eyl 2010 02:53

Re: Mysql Backup SQL komutları şeklinde.

Mesaj gönderen 01esra »

k.bakmayın rahatsız ediorum ama yardım ederseniz sevinirim
burada ki result ne anlama geliyor acaba?
şimdiden çook teşekkürler
function tform1.sesli(harf:string):boolean;
begin
result:=false;
if harf='a'then result:=true;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Mysql Backup SQL komutları şeklinde.

Mesaj gönderen aslangeri »

makale ve ipucu bölümünde sorulara cevap verilmiyor. lütfen sorunuzu programlama bölümüne sorunuz.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla