1. aşama - dönüştürme
Onlarca form olduğu için compenentleri değiştirmek oldukça zahmetliydi. O yüzden kendim bir program yazdım. Proje klasörüm içindek .pas ve .dfm dosyalarını bulup bunları değiştiriyor. Değiştirdiklerini aşağıda paylaşıyorum.
Kod: Tümünü seç
Content[i] := StringReplace(Content[i], 'TADOQuery', 'TFDQuery', [rfReplaceAll, rfIgnoreCase]);
Content[i] := StringReplace(Content[i], 'TDateTimeField', 'TSQLTimeStampField', [rfReplaceAll, rfIgnoreCase]);
Content[i] := StringReplace(Content[i], 'TStringField', 'TWideStringField', [rfReplaceAll, rfIgnoreCase]);
2. aşama - çıkacak hatalar
şu an ado yu fdquery ye dönüştürmüş oldunuz. adoconnection yerine fdconnection kullanacaksınız bağlantılar ona göre hazırlanacak. bunları forumdan veya internetten envayi çeşidini bulabilirsiniz. Onun için burda fdconnection nasıl bağlanır gibi bilgiler vermeyeceğim. Bağlantıları yaptığınız varsayıyorum ve karşılaşabileceğiniz olası hatalara geçiyorum.
Programımda iki veri tabanı kullanılıyor. Access ve MSSQL o yüzden her ikisine de uyumlu olmasına özen gösterdim.
DateTime hatası : Ado kullanıyorsanız AdoQueryTarih.value := Now; şeklinde bir eşleme yapabilirsiniz ama FDQuery tarih alanları için TSQLTimeStampField kullanır bunun için
Kod: Tümünü seç
AdoQueryTarih.value := DateTimeToSQLTimeStamp(Now) ; kullanmanız veya
AdoQueryTarih.DateTime := Now; kullanmanız gerekir
Update ve Insert hataları :
Fdquery ile en çok karşılaşılan hata update ve insert hatası. FDQuery.Post olayında güncelleme hataları alabilirsiniz. bu tür her 10 sorunun 9 unun çözümü
Kod: Tümünü seç
FdQuery.UpdateOptions.UpdateMode := upWhereKeyOnly;
FdQuery.UpdateOptions.KeyFields := 'ID'; // identy kimliği
FdQuery.UpdateOptions.AutoIncFields := 'ID'; // identy kimliği
Bu durumu değiştirebilecek mucize bir kod var
FDConnection.FormatOptions.MapRules.Add(dtAnsiString, dtWideString); //bu aynen ado'daki gibi VarChar ise bunları da WideString gibi görüyor. dikkat edin bu Ansiyi Wide ye çevirmez. yani Unicode karakterler kullanamazsınız
Sonuç
bu işlemi özelliklede ilk başta .pas ve .dfm dosyalarını replace etmeden önce bunların yedeğini alın. benim hızlı geçiş için kullandığım yöntem ve yaşadığım hatalar bu şekilde. Tablo adları, alan adlarının büyük harf olması gerekiyor. örneğin Select * from MusteriList diye bir tablo oluşturursanız FDQuery bunu Select * from MUSTERILIST olarak görüyor ve hata veriyor çünkü sizin tablonuz MUSTERILIST değil MUSTERİLİST.
Bunların dışında sorun yaşayan varsa (sadece geçiş için) yazabilir. Belki bende yaşamış çözmüşümdür.