MDB kütüğünde string alanı kod ile otomatik sayıya çevirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

MDB kütüğünde string alanı kod ile otomatik sayıya çevirmek

Mesaj gönderen NewMember »

Arkadaşlar, MsAccess formatında(*.mdb) uzantılı bir database dosyasındaki bir tablonun bir alanı tasarlanırken String olarak tasarlanmış ama sayısal ifadeler tutulmuş bu alanda.Aslında otomatik artan sayı olarak ayarlannmsı gereken bu alan(firebirddeki sayısal bir alanın generatöre bağlanması gibi) bu şekilde tasarlanıp bu işlemler manuel olarak programcı tarafından yapılmış.Ama bu sistem doğal olarak zaman zaman hatalara sebebp oluyor.Bu alanı sayısal bir tipe dönüştürüp aynı zamanda da otomatik artan sayıya çevirmeliyim.Bu alandaki değerler hep sayısal ifadeler olduğundan alanın tipini MsAccess programı ile değiştirince sorun olmadı ama benim bunu kod ile yapmam lazım.Bu konuda yardımcı olabilirmisiniz.?
Teşekkürler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

ALTER TABLE xx ALTER COLUMN yy ile bunu yapabilirsin. Sadece bu sayı girilmiş string alana herhangi bir farklı karakter karışmışsa hata alınabilir. Bunu da IsNumeric kontrolü ile UPDATE işlemi ile boşaltmak şeklinde ön işlem yapılarak hatanın önüne geçilir.
Resim
Resim ....Resim
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Hocam bu alanda tip dönüşümünde hataya sebep olabilecek veri yok.Ama dediğiniz gibi bir kontrolle bunu test etmekte fayda var.Ancak söylediğiniz yöntemle sayısal alana çevireceğimiz bu alanı nasıl otomatik artan sayı(Access tabiriyle) yapabiliriz.?
Teşekkür ederim.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Alanın özelliklerinde veri türü olarak Otomatik tamsayı gibi birşey olacaktı.(Open Office yüklü makinada bakamıyorum).

Kolay Gelsin...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Access in bu konudaki tavrı belli. Bir alana daha önceden veri girilmişse (Bu sayılar birbirini takip eden sayılar bile olsa) otomatik artan alana çevrilemez. Bunun için yeni bir otomatik artan alan tanımlanız gerekir.
Kolay gelsin.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Alan tipi değişikliği için aşağıdaki örneği dene.

Kod: Tümünü seç

  With TAdoQuery.Create(Nil) do begin
    Active     := False;
    Connection := AdoConnection1;
    SQL.Text   := 'ALTER TABLE tablo ALTER COLUMN alan Integer';
    ExecSQL;
    Free;
  end;
- AUTOINCREMENT bir alan olacaksa bu, @ASE'nin dediği geçerli, o zaman bu alanı DROP edip yani silip, AUTOINCREMENT özellikli bir alan ekleyeceksin.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bu tablondaki manuel arttırılmış numaraları anahtar bağlamında önemlidir. Diğer tablolarla arasındaki bağlantıyı koparmamak için önerim, bir dönüştrücü servis fonksiyonu yaz.

- Fonksiyon, master veritabanının bir kopyasını çıkartacak, çıkartırken MANUEL attırım yaptığın bu alanı AUTOINCREMENT alan ile donatılmış olan ile değiştiredek.

- Eski tabloyu bu yenisine aktarırken, DETAIL bağlı diğer tablolardaki her kayıt için eski numarayı içeren kayıtların numaralarını AUTOINCREMENT verilen yenisi ile UPDATE et.

- Bu senin uygulaman gereken çözümdür.
Resim
Resim ....Resim
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Arkadaşlar teşekkürler.Söylediklerinizi deneyeceğim.Orayı atlamışım MsAccess hakkaten otomatik sayı yaptırmıyor. :x
Cevapla