table field-size-type larını elde etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

table field-size-type larını elde etmek

Mesaj gönderen danaci »

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
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

FieldName ile Field'ın adını string olarak verdi diye işin kolayına kaçmak olmaz :lol: :lol: 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.

Kod: Tümünü seç

Function FieldTipiStr( Field : TField ): String;
begin
  Case Field of
    ftDate    : Result := 'Date';
    ftInteger : Result := 'Integer';
  end; // Case
end;
- 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...
:idea:
Resim
Resim ....Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Mehaba ,
İ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
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.
Volkan KAMADAN
www.polisoft.com.tr
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

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
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

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.

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
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

çok tşk volkan bey
Cevapla