Boş alanı bir önceki ile doldurma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Boş alanı bir önceki ile doldurma

Mesaj gönderen Berdem »

Merhaba Arkadaşlar,
Firebird kullanıyorum.Kod sutunumda boş alanlar var bir önceki ile doldurmaya çalıştım olmadı...Yardımlarınızı bekliyorum.Saygılarımla..

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
sd:string;
begin
while not IBQuery1.Eof do
begin
if IBQuery1.FieldByName('KOD').AsString='' then
begin
 with IBQuery1 do
   Begin
     Close;
     SQL.Clear;
     SQL.Add('UPDATE HASTALIK SET KOD='+sd);
     ExecSQL;
   End;
end
else
begin
sd:=IBQuery1.FieldByName('KOD').AsString
end;
end;
end;

procedure TForm1.IBQuery1AfterPost(DataSet: TDataSet);
begin
IBTransaction1.CommitRetaining;
end;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bir de aşağıdaki gibi dene.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  sd: string;
begin
  IBQuery1.First; // eklenen
  sd := IBQuery1.FieldByName('KOD').AsString // eklenen
  while not IBQuery1.Eof do
  begin
    if IBQuery1.FieldByName('KOD').AsString = '' then
    begin
      with IBQuery1 do
      Begin
        Close;
        SQL.Clear;
        SQL.Add('UPDATE HASTALIK SET KOD = ' + sd);
        ExecSQL;
      End;
    end
    else
      sd := IBQuery1.FieldByName('KOD').AsString
    IBQuery1.Next; // eklenen
  end;
end;

procedure TForm1.IBQuery1AfterPost(DataSet: TDataSet);
begin
  IBTransaction1.CommitRetaining;
end;
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Çok teşekkür ederim Recep bey,dediğinizi yaptım..Dynamic SQl Error line -104 hatası verdi.
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject); 
var 
  sd: string; 
begin 
  IBQuery1.First; 
  sd := IBQuery1.FieldByName('KOD').AsString; 
  while not IBQuery1.Eof do 
  begin 
    if IBQuery1.FieldByName('KOD').AsString = '' then 
    begin 
      with IBQuery1 do 
      Begin 
        Edit; 
        FieldByName('KOD').AsString := sd;
        Post
      End; 
      sd := IBQuery1.FieldByName('KOD').AsString 
      IBQuery1.Next; 
  end; 
end; 

Not: İlk kaydın boş olma ihtimali gözardı edildi.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Evet @ylmz ın dediği gibi ya ilk kayıtta boşsa aynen kalacak yada sd := '0'; gibi bir değer atayıp ilk kayıdın boş olması önlenecek. Fakat en önemlisi ben de dikkat etmemişim verdiğiniz update cümlesini çok sakat olması.

Kod: Tümünü seç

...
SQL.Add('UPDATE HASTALIK SET KOD='+sd); 
..
malum bu şekilde tüm kayıtları SET etmiş olur. Ya uygun şekilde IBUpdateSQL bağlayıp ya da mevcut şekilde fakat bu sefer üzerindeki/işlem gören kaydın KEY alanını where içinde kullanabileceğiniz bir UPDATE yazarak yapabilirsiniz.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

@ylmz ve @rsimsek verdiği öneriler doğrultusunda yaptım.Teşekkürler..

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  sd: string;
begin
  while not IBDataSet1.Eof do
  begin
    if IBDataSet1.FieldByName('KOD').AsString = '' then
    begin
      with IBDataSet1 do
      begin
        Edit;
        FieldByName('KOD').AsString := sd;
        Post;
      end;
    end
    else
    begin
      sd := IBDataSet1.FieldByName('KOD').AsString
    end;
    IBDataSet1.Next;
  end;
end;
Cevapla