arkadaşlar delphi ile mysql veritabanı kullanıyorum.
Yedekleme işlemi için
mysql in dump dosyasına yaptığı yaptığı gibi
hem sql scriptini hemde mevcut verilerini insert için;
aşağıdaki kod ile table in field larının adlarını aldım ama
var
i: Integer;
Info: String;
begin
for i := 0 to Table1.FieldCount - 1 do
alanlar := alanlar + Table1.Fields.FieldName + #13#10;
ShowMessage(alanlar);
bunun yanısıra
size larını ve type larını elde etmek istiyorum.
iyi çalışmalar
table field-size-type larını elde etmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
FieldName ile Field'ın adını string olarak verdi diye işin kolayına kaçmak olmaz
Biraz çaba lazım...
- MySQL tablosunda hangi tip field'lar tanımlanabilir eksiksiz olarak onu araştırman ve bir fonksiyon hazırlamalısın.
- Hatta bunu çeşitlendirip bir taşla üç kuş vurabilirsin.. Yani Field verip 3 sonucu (Adı, FieldTipi, Uzunluk)'nı beraber döndüren şekilde bit TYPE tanımlarsın ve RESULT olarak o Type'ı kullanırsın. O da olmadı beni Type ile uğraştırma diyorsan Function değil Procedure hazırlarsın, parametreleri VAR ile verip geriye paramterelerden dönersin . Karar senin...



- MySQL tablosunda hangi tip field'lar tanımlanabilir eksiksiz olarak onu araştırman ve bir fonksiyon hazırlamalısın.
Kod: Tümünü seç
Function FieldTipiStr( Field : TField ): String;
begin
Case Field of
ftDate : Result := 'Date';
ftInteger : Result := 'Integer';
end; // Case
end;

Mehaba ,
İlave olarak ,
Eğer MySQL deki bir tablonun yaratılış cümlesini almak isterseniz bir query den,
cümlesini çalıştırınız geriye iki alan ve tek satırlı bir sonuç döner, 1.Alan tablo adını, 2.alan ise tablonun yaratılış sql ini verir.
Ben yedekleme sistemimde bu şekilde kullanıyorum çok basit bir yöntem.
İlave olarak ,
Eğer MySQL deki bir tablonun yaratılış cümlesini almak isterseniz bir query den,
Kod: Tümünü seç
SHOW CREATE TABLE tablo_adi
Ben yedekleme sistemimde bu şekilde kullanıyorum çok basit bir yöntem.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
vkamadan arkadaş query ilgili table ın create cümlesini oluşturuyor, ancak sorun bu cümleyi nasıl parse edeceğimiz. fieldlar arasında ki virgülleri esas alarak parse etsek fildler double olduğunda field tanımında da double(16,2) gibi virgül oacak. Bu nedenle sizden bu konuda yardım rica edeceğim.
iyi çalışmalar
iyi çalışmalar
Merhaba,
MySQL DB üzerinde kullandığım aynı mysqldump gibi işlem yapan yani önce tablonun yapısal sytax ının sonrada ilgili tablodaki verileri SQL Script dosyası olarak yedekleyen bir procedure aşağıdaki yapıyı incelersen fikir verecektir sana.
MySQL DB üzerinde kullandığım aynı mysqldump gibi işlem yapan yani önce tablonun yapısal sytax ının sonrada ilgili tablodaki verileri SQL Script dosyası olarak yedekleyen bir procedure aşağıdaki yapıyı incelersen fikir verecektir sana.
Kod: Tümünü seç
procedure TForm1.CreateBackup(DatabseName: String;Yer:Byte=0);
var
SqlBackup:TStringList;
qData,qExcute,qTables:TQuery;
Cumle,CumleBilgi:AnsiString;
i:integer;
Mesaj:String;
DosyaAdi:String;
InternalValue:String;
begin
CreateODBCDriver(DatabseName);
Database1.Connected:=false;
Database1.AliasName:=DatabseName;
Database1.Connected:=true;
try
DecimalSeparator:='.';
SqlBackup:=TStringList.create;
qData:=TQuery.create(nil);
qExcute:=TQuery.create(nil);
qTables:=TQuery.create(nil);
qData.DatabaseName:='dbbackup';
qExcute.DatabaseName:='dbbackup';
qTables.DatabaseName:='dbbackup';
with qTables do //VT deki Mevcut Tabloları tespit ediyorum
begin
close;
sql.clear;
sql.add('SHOW TABLES FROM '+DatabseName);
Active:=true;
first;
end;
Gauge2.Progress:=0;
Gauge2.Visible:=true;
Gauge2.MaxValue:=qTables.RecordCount;
while not qTables.eof do //Tüm Tabloları tek tek değerlendiriyorum
begin
cumle:='';
with qData do
begin
if CheckBox1.Checked then
begin
close;
sql.clear;
sql.add('SHOW CREATE TABLE '+qTables.Fields[0].AsString);
Active:=true;
SqlBackup.Add(Fields[1].AsString+';');
end;
close;
sql.clear;
sql.add('select *from '+qTables.Fields[0].AsString);
Active:=true;
first;
end;
Cumle:='INSERT INTO '+qTables.Fields[0].AsString+' (';
for i:=0 to qData.FieldCount-1 do
begin
Cumle:=Cumle+qData.fields[i].FieldName;
if i<>qData.FieldCount-1 then cumle:=cumle+',';
end;
Cumle:=Cumle+') VALUES (';
with qExcute do
begin
close;
sql.clear;
sql.add('SHOW fields from '+qTables.Fields[0].AsString);
Active:=true;
first;
end;
while not qData.Eof do //DataPump Başlıyor
begin
CumleBilgi:=Cumle;
qExcute.first;
for i:=0 to qData.FieldCount-1 do
begin
if qExcute.fields[1].AsString<>'date' then
begin
if Pos('"',qData.fields[i].AsString)>0 then InternalValue := StringReplace(qData.fields[i].AsString,'"','''',[rfReplaceAll]) else InternalValue:=qData.fields[i].AsString;
if i=0 then CumleBilgi:=CumleBilgi+'"'+InternalValue+'"' else
CumleBilgi:=CumleBilgi+',"'+InternalValue+'"';
end else
begin
if i=0 then CumleBilgi:=CumleBilgi+'"'+donustur(qData.fields[i].AsDateTime)+'"' else
CumleBilgi:=CumleBilgi+',"'+donustur(qData.fields[i].AsDateTime)+'"';
end;
qExcute.next;
end;
CumleBilgi:=CumleBilgi+');';
SqlBackup.add(CumleBilgi);
qData.next;
end;
Gauge2.Progress:=Gauge2.Progress+1;
qTables.Next;
end;
if yer=0 then
DosyaAdi:=StringReplace(Label7.Caption,'[DbName]',DatabseName+'_',[rfReplaceAll, rfIgnoreCase]) else
DosyaAdi:=StringReplace(GenerateFileLocationAndNameABSQL,'[DbName]',DatabseName+'_',[rfReplaceAll, rfIgnoreCase]);
SqlBackup.SaveToFile(DosyaAdi);
Gauge2.Visible:=false;
finally
begin
qData.free;
qExcute.free;
qTables.free;
SqlBackup.free;
end;
end;
end;
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr