veritabanını veritabanına aktarma sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
veritabanını veritabanına aktarma sorunu
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...
göbekadı: hasan
soyadı: vahab
şeklinde ayırmalıyım.
sağlık, başarı ve mutluluk dileklerimle...
- itsmylife38
- Üye
- Mesajlar: 28
- Kayıt: 07 Haz 2005 04:11
- Konum: İzmir
- İletişim:
Merhaba
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 !
Gibilerinden birşey geldi aklıma ...
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
Ismail ULUSOY
it is my life
( Hayat bizim peki Kontrolu kimde? )
it is my life
( Hayat bizim peki Kontrolu kimde? )
constant object cannot be passed as var parameter
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]
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]
ö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
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
ad gobekad soyad ayırma problemi
merhabalar,
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...
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;
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...
birinci stringde boşluk ' ' olmadığından olmuyor
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.
şimdiden tüm emeği geçen arkadaşlara teşekkür ederim.
İş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]);
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;
- 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;
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.
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.
s.a.
kod olarka bişey yazamıyacağım ama mantık olarak şu sıra takip edilebilir.
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.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
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
// Kullanımı //
- 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;
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.
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.
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;