veritabanını veritabanına aktarma sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

veritabanını veritabanına aktarma sorunu

Mesaj gönderen kazimates »

merhabalar daha önce yazılan bir program access veritabanını kullanıyor ve önceleri sadece isim diyebir colonda adı+göbek adı+soyadı olarak saklanmış ve bu programın yenisini yapacağımdan dolayı eski bilgileri yeni programa aktaracağım bu durumda ise bende adı, göbek adı ve soyadı kolonları ayrı tanıtılmış durumda ve eski veriyi nasıl ayrıştırıp yeni database e ayrı ayrı kopyalayabilirim diye bir sorun çıkıyor? örnek olarak eski programın da isim kolonunda :ali hasan vahap diye bir isim var ben bunu isim : ali
göbekadı: hasan
soyadı: vahab
şeklinde ayırmalıyım.

sağlık, başarı ve mutluluk dileklerimle...
Kullanıcı avatarı
itsmylife38
Üye
Mesajlar: 28
Kayıt: 07 Haz 2005 04:11
Konum: İzmir
İletişim:

Merhaba

Mesaj gönderen itsmylife38 »

Hocam selam;

eger isim değişkenin sabit olarak adı+göbek adı+soyadı olarak degerler içeriyorsa küçük bir string parçalama ile yapabilirsin !

Kod: Tümünü seç


ad:=copy(isim,1,pos('+',isim)); // eger '+' işareti yoksa boşluksa atarsın.
delete(isim,1,pos('+',isim)+1);
gobekad:=copy(isim,1,pos('+',isim));
delete(isim,1,pos('+',isim)+1);
soyad:=isim
Gibilerinden birşey geldi aklıma ...
Ismail ULUSOY

it is my life
( Hayat bizim peki Kontrolu kimde? )
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

tsk ederim

Mesaj gönderen kazimates »

hocam valla çok makbule geçti ellerinize sağlık.
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

constant object cannot be passed as var parameter

Mesaj gönderen kazimates »

Kod: Tümünü seç

procedure TAnamenuFrm.BBEskiIsimClick(Sender: TObject);
begin
   datamodule1.ADOTPKDS.First;
   while not datamodule1.ADOTPKDS.Eof do
   begin
      LBEskiIsim.Items.Add(datamodule1.ADOTPKDS.fieldbyname('ADSOYAD').AsString);
      datamodule1.ADOTPKDS.Next;
   end;
end;

Kod: Tümünü seç

procedure TAnamenuFrm.BBIsimAyristirClick(Sender: TObject);
var
   adi,gobekadi,soyadi:string;

begin
   adi:=copy(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4]));
   delete(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4])+1);

   gobekadi:=copy(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4]));
   delete(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4])+1);

   soyadi:=copy(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4]));
   delete(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4])+1);

   LBAdi.Items.Add(adi);
   LBGobekAdi.Items.Add(gobekadi);
   LBSoyadi.Items.Add(soyadi);
end;


burada
delete(LBEskiIsim.Items[4],1,pos(' ',LBEskiIsim.Items[4])+1);
cümlesine delphi
"constant object cannot be passed as var parameter" şeklinde hata veriyor???


[/code]
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Merhaba ;

önceikle insanların çift isim olabileceğini unutmayınız

bir for dongusu içinde
pos ile en sondaki boşluğu bulup sonrasını copy ile soyadı bunun solunu ise adı yaparsınız ... [/code]
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

ad gobekad soyad ayırma problemi

Mesaj gönderen kazimates »

merhabalar,

Kod: Tümünü seç

procedure TAnamenuFrm.BBIsimAyristirClick(Sender: TObject);
var
   degiskenadi:string;
   adi,gobekadi,soyadi:string;
   x:integer;
begin
   x:=-1;
   datamodule1.ADOTPKDS.First;
   while not datamodule1.ADOTPKDS.Eof do
   begin
      LBEskiIsim.Items.Add(datamodule1.ADOTPKDS.fieldbyname('ADSOYAD').AsString);
      x:=x+1;
      degiskenadi:=LBEskiIsim.Items[x];
      adi:=copy(degiskenadi,1,pos(' ',degiskenadi));
      delete(degiskenadi,1,pos(' ',degiskenadi));

      gobekadi:=copy(degiskenadi,1,pos(' ',degiskenadi));
      delete(degiskenadi,1,pos(' ',degiskenadi));

      soyadi:=degiskenadi;

      LBAdi.Items.Add(adi);
      LBGobekAdi.Items.Add(gobekadi);
      LBSoyadi.Items.Add(soyadi);

      datamodule1.ADOTPKDS.Next;
   end;


end;
yukarıdaki kodu verdiğimde
databaseden alınan bilgi sırasıyla şu şekilde

orijinal bilgi:
Hasan
Kazim ATES
Ahmet Hüseyin Rızaner

kodun neticesinde ise
isim kolonunda gobekadi kolonu soyisim kolonu
Hasan Kazim ATES
Ahmet Hüseyin Rızaner

şeklinde netice alıyorum aslında

burada Hasan isim kolonunda gözükmesi gerekirken soyisim kolonunda gözüküyor bu durumda hata nerede?

Sağlık, başarı ve mutluluk dileklerimle...
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

birinci stringde boşluk ' ' olmadığından olmuyor

Mesaj gönderen kazimates »

selamlar dediğim gibi birinci alınan string değerde ' ' boşluk digiti yok arkadaşlar isim hanesine eski database de sade deneme diye bir değer girmişler ve yukarıdaki kodda boşluk varsa işlemine göre işlem yaptığındna burada olmadığı için deneme ismini soyadı hanesine atıyor oysa bunu isim hanesine koyması gerekiyor bu problemde 3 gündür takıldım kaldım ve müm olabilirse yardımlarınızı rica edeceğim.
şimdiden tüm emeği geçen arkadaşlara teşekkür ederim.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

İşlem yaptığın DegiskenAdi degiskenine atama yaparken TRIM fonksiyonu kullanırsan başta ve sondaki boşluklardan kurtulursun..

Kod: Tümünü seç

     degiskenadi:= Trim(LBEskiIsim.Items[x]); 
Resim
Resim ....Resim
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

Mesaj gönderen kazimates »

vermiş olduğunuz bilgiler doğrultusunda problemi denememe rağmen henüz daha çözebilmiş değilim ve bu sebepten dolayı sizlere basitleştirilmiş bir kod gönderiyorum bu kodu denemenizi ve gerçekte cevabın ne olduğunu benimde gördüğüm gibi görmenizi ve gerçekte problemin daha iyi anlaşılabilmesini sağlamak istedim. tsk ederim.

Kod: Tümünü seç

procedure TForm1.BBAyristirClick(Sender: TObject);
var
   degiskenadi:string;
   adi,gobekadi,soyadi:string;
   i:integer;
begin
   LBEskiIsim.Items.Insert(0,'Hasan');
   LBEskiIsim.Items.Insert(1,'Kazim ATEŞ');
   LBEskiIsim.Items.Insert(2,'Ali Hasan KEBAPCI');

   for i:=0 to 2 do
   begin
      degiskenadi:=LBEskiIsim.Items[i];;
      adi:=copy(degiskenadi,1,pos(' ',degiskenadi));
      delete(degiskenadi,1,pos(' ',degiskenadi));

      gobekadi:=copy(degiskenadi,1,pos(' ',degiskenadi));
      delete(degiskenadi,1,pos(' ',degiskenadi));

      soyadi:=degiskenadi;

      LBAdi.Items.Add(adi);
      LBGobekAdi.Items.Add(gobekadi);
      LBSoyadi.Items.Add(soyadi);
   end;
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Sonda da boşluk varsa değerlendiriyorsun. Boşluk yoksa ne yapacağını bildirmemişsin. Trim ile önce başta ve sondaki tüm boşlukları alacaksın sonra da kontrolün altında bir tane kendin ekleyeceksin.

Kod: Tümünü seç

      degiskenadi:=Trim(LBEskiIsim.Items[i]) + ' '; 

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
   degiskenadi:string;
   adi,gobekadi,soyadi:string;
   i:integer;
begin
   LBEskiIsim.Items.Insert(0,' Hasan');
   LBEskiIsim.Items.Insert(1,' Kazim ATEŞ');
   LBEskiIsim.Items.Insert(2,'Ali Hasan KEBAPCI');

   for i:=0 to 2 do
   begin
      degiskenadi:=Trim(LBEskiIsim.Items[i]) + ' ';
      adi:=copy(degiskenadi,1,pos(' ',degiskenadi));
      delete(degiskenadi,1,pos(' ',degiskenadi));

      gobekadi:=copy(degiskenadi,1,pos(' ',degiskenadi));
      delete(degiskenadi,1,pos(' ',degiskenadi));

      soyadi:=degiskenadi;

      LBAdi.Items.Add(adi);
      LBGobekAdi.Items.Add(gobekadi);
      LBSoyadi.Items.Add(soyadi);
   end;
end;
Resim
Resim ....Resim
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

Mesaj gönderen kazimates »

dikkat edilecek olursa bu seferde Kazim ATEŞ isminde ayrıştırırken Kazim uı isim hanesine koyabildi ama ATEŞ i ise göbekadı hanesine almış buda demek oldu ki programda hala daha yanlışlık var ATEŞ soyadı olması lazımdı. yani çıktıda görmemiz gerekenler yukarıdakşi örneğe göre şu şekilde olmalı.
LBADI: Hasan, Kazim, Ali değerlerini listine eklemeli
LBGobekAdi: , , Hasan
LBSoyadi: , ATEŞ, KEBAPCI

şeklinde olmalıydı.
Tekrar bir gözden geçirmeniz sanırım daha iyi olacak.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Ben sadece sana ilk boşluğu nasıl kontrol altına alabileceğini gösterdim. Sana program kodu vermek niyetli değildi :lol: :lol:

- Bu basit bir kurgu. Her satır işelmi bittiğinde üçüncü sütunu kontrol et, eğer son sütun boşsa ikinci sütunu üçüncüye kaydır al sana soyadı... :wink:
Resim
Resim ....Resim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
kod olarka bişey yazamıyacağım ama mantık olarak şu sıra takip edilebilir.
  • 1 soldan ve sağdan boşluklar atılır.
    2 eğer hiç boşluk yoksa "ad" sütununa atılır.
    3 bir boşluk varsa biri ad biri soyad sütununa atılır.
    4 iki ve daha fazla boşluk varsa ilk boşluğa kadar ad sütununa atılır. değişken ters çevrilir (stringi ters çeviren bir fonksiyon vardı ama adı şu an aklımda değil) ilk boşluğa kadar soyada atılır. değişken tekrar ters çevrilir soldan ve sağdan boşluklar silinir(varsa tabi) kalan göbek adına atılır.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Dara düştünün resmini gördüğümden sabah beyin jimlastiği yaparak bir fonksiyon hazırladım. İhtimaller birden fazla göbek adının olması durumunda yine tırmalayacağını gösteriyordu çünkü...

- iki isimli + evlenmiş soyadı almış eski soyadını korumuş hanımlar vs. için de işlevsel

Kod: Tümünü seç

Type tAdGobekSoyad = Record Adi, Gobekadi, Soyadi:String; end;

Function AdGobekSoyad( isim : String ):tAdGobekSoyad;
Var
  Liste : TStringList;
begin
  ZeroMemory(@result, SizeOf(Result));
  isim := Trim(isim) + ' ';
  Liste := TStringList.Create;
  While Pos(' ', isim) > 0 do begin
    Liste.Add( Trim( Copy(isim, 1, Pos(' ', isim))) );
    Delete(isim, 1, Pos(' ', isim));
  end;

  If Liste.Count > 0 then begin
    result.Adi := Liste[0];
    Liste.Delete(0);
  end;

  If Liste.Count > 1 then begin
    result.Soyadi := Liste[Liste.Count-1];
    Liste.Delete(Liste.Count-1);
  end else begin
    result.Soyadi := Liste[0];
    Liste.Delete(0);
  end;

  While Liste.Count > 0 do begin
    result.GobekAdi := Trim(result.GobekAdi + ' ' + Liste[0]);
    Liste.Delete(0);
  end;
  Liste.Free;
end;
// Kullanımı //

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  isim : tAdGobekSoyad;
begin
  isim := AdGobekSoyad('Ali Veli Konya Kazım ATEŞ ');
  With isim do
    ShowMessageFmt('%s (%s) %s', [Adi, GobekAdi, Soyadi]);
end;
En son mrmarman tarafından 31 Eki 2007 01:01 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
kazimates
Üye
Mesajlar: 332
Kayıt: 01 Tem 2005 12:40
Konum: Kıbrıs
İletişim:

Mesaj gönderen kazimates »

herekese teşekkür ederim bende foruma bakmadan bunu hazırlamıştım yinede vermek istedim ama sizinki sanırım daha fonksiyonel gibi duruyor onuda bir deneyeceğim bu arada aşağıdaki kod 2 boşluk veya daha azları için çalışıyor.
yardımlarınızdan dolayı hepinize çok çok teşekkür ederim.

Kod: Tümünü seç

procedure TForm1.BBAyristirClick(Sender: TObject);
var
   degiskenadi:string;
   adi,gobekadi,soyadi:string;
   i,x, netice:integer;
begin
   LBEskiIsim.Items.Insert(0,'Hasan');
   LBEskiIsim.Items.Insert(1,'Kazim ATEŞ');
   LBEskiIsim.Items.Insert(2,'Ali Veli KEBAPCI');

   for i:=0 to 2 do
   begin
      netice:=-1;
      degiskenadi:=Trim(LBEskiIsim.Items[i])+' ';

      for x := 1 to length(trim(degiskenadi)+' ') do
      begin//1'den String'in uzunluğuna kadar
         if degiskenadi[x] = ' ' then
         begin //i'ninci karakter '@' mi?
            netice := netice + 1;
         end;
      end;
      if netice=0 then
      begin
         degiskenadi:=Trim(LBEskiIsim.Items[i])+' ';
         adi:=copy(degiskenadi,1,pos(' ',degiskenadi));
         delete(degiskenadi,1,pos(' ',degiskenadi));
      end;

      if netice=1 then
      begin
         degiskenadi:=Trim(LBEskiIsim.Items[i])+' ';
         adi:=copy(degiskenadi,1,pos(' ',degiskenadi));
         delete(degiskenadi,1,pos(' ',degiskenadi));

         soyadi:=copy(degiskenadi,1,pos(' ',degiskenadi));
         delete(degiskenadi,1,pos(' ',degiskenadi));
      end;

      if netice=2 then
      begin
         degiskenadi:=Trim(LBEskiIsim.Items[i])+' ';
         adi:=copy(degiskenadi,1,pos(' ',degiskenadi));
         delete(degiskenadi,1,pos(' ',degiskenadi));

         gobekadi:=copy(degiskenadi,1,pos(' ',degiskenadi));
         delete(degiskenadi,1,pos(' ',degiskenadi));

         soyadi:=degiskenadi;
      end;

      LBAdi.Items.Add(adi);
      LBGobekAdi.Items.Add(gobekadi);
      LBSoyadi.Items.Add(soyadi);
   end;

end;
Cevapla