Kayıt sırası değiştirme

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Kayıt sırası değiştirme

Mesaj gönderen haydarxxx »

Slm arkadaşlar.

Girmiş olduğum kayıtları dbgridte görüyoruz burada bir kayıt seçili ike yukarı ve aşağı butonu ile bir kaydın sıra yerini nasıl değiştirebiliriz.Yani istediğimiz kaydı istediğimiz sıraya alacağız.Ibdataset, IBQuery bleşenleri kullanıyorum.(Tabi girid sql ye yada tableya bağlı olabilir bunuda göz önüne alarak)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
tabloya yeni bir alan ekleyeceksin. (atıyoru sırala diye).
bu alana kayıtların gridde görünmesini istediğin sırayı yazacaksın.
yukarı aşağı düğmeleri ile bu değerleri değiştireceksin.
tablonu sırala alanına göre sıralayacaksın.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

hocam bu dediğinizde olur ama ben buton aracılığı ile kayıtları sıralamak istiyorum.Çünkü kayıt sayısı çok olduğunda bu saralamayı yapmak zor olacak.Kayıt sırasını görerek kim kimden sonra gelmeliyi daha pratik yapmak istemiştim.Öneriniz için teşekkür ediyorum ama kullanıcı açısından iş zor olur diye düşünüyorum.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

######################################################
########### Bu Kodlar Aşağı Taşı Butonuna ############
######################################################

procedure ....
var
a,b:string;
begin
a:= JvDotNetDBEdit13.text;
if QRY_PERSONEL.eof=false then QRY_PERSONEL.next;
b:= JvDotNetDBEdit13.text;
if a <> b then
begin
QRY_PERSONEL.edit;
JvDotNetDBEdit13.text:=a;
QRY_PERSONEL.post;
IBTransaction1.CommitRetaining;
QRY_PERSONEL.prior;
QRY_PERSONEL.edit;
JvDotNetDBEdit13.text:=b;
QRY_PERSONEL.post;
IBTransaction1.CommitRetaining;
QRY_PERSONEL.next;
end;
end;
end.

######################################################
########## Bu Kodlar Yukarı Taşı Butonuna ############
######################################################

procedure ....
var
a,b:string;
begin
a:= JvDotNetDBEdit13.text;
if QRY_PERSONEL.eof=false then QRY_PERSONEL.prior;
b:= JvDotNetDBEdit13.text;
if a <> b then
begin
QRY_PERSONEL.edit;
JvDotNetDBEdit13.text:=a;
QRY_PERSONEL.post;
IBTransaction1.CommitRetaining;
QRY_PERSONEL.next;
QRY_PERSONEL.edit;
JvDotNetDBEdit13.text:=b;
QRY_PERSONEL.post;
IBTransaction1.CommitRetaining;
QRY_PERSONEL.prior;

end;
end;

end.

QRY_PERSONEL (Ibdataset)
bu kod paradox da table kaydında kayıt yerini değiştiriyor.Ama firebird de çalışmıyor.Bu konuda yardımlarınızı bekliyorum.Teşekkür ediyorum
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
arkadaşım bu kodlar benim dediğim işlemi yapıyor.
bunlar senin yazdığın kodlar ise hata veriyormu? eğer hata vermiyorsa kapatıp açınca sıralama işlemi yapıyormu. Tabloların refresh edilmesi gerekiyor olabilir.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Aslında buradaki mantık şu; eğer kullanılan Grid in sıralama özelliği yoksa kayıtlar tablodaki aktif anahtar alanının sırasında gelecektır. Sıralamayı ne şekilde olursa olsun değiştirmek istediğinizde tablodaki ilgili anahtar/indeks alanında istediğiniz yere gelecek şekilde anahtar bilgilerini değiştirmeniz gerekir. İllaki grid üzerinde olması isteniyorsa StringGrid e okunup eklenen kayıtlar dediğiniz gibi satır değiştirme şeklinde yerleri değiştirilebilir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Benim böyle birşeye ihtiyacım olmuştu programımın bir çok yerinde. Onun için genel bir SP_SIRA_UPDATE isimli bir stored procedure oluşturdum. Bu fonksiyon aldığı parametreye göre SIRA fieldinin değerinin bir üstteki veya alttaki kayıdın değeriyle değiştiriyordur. Böylece sırası değişmiş oluyordu. Ve SIRA fieldine sahip her tablo'nun before insert triggerına son SIRA numarasını vermesi için kodlar yazdım.

Bide şöyle bir durum var, sıralama bütün tablo olarak değil, o tablonun selectlenmiş bir kısmı arasındadad olabilir. Bu durumlarıda düşündüm.
Procedure'un parametre olarak aldığı FILTER_EXPRESSION bu işe yarıyor.

Stored Procedure :

Kod: Tümünü seç

SET TERM ^ ;

CREATE PROCEDURE SP_SIRA_UPDATE (
    tablo varchar(30),
    eleman_id integer,
    filter_expression varchar(100),
    operasyon smallint)
as
declare variable eleman_sira_no integer;
declare variable swap_eleman_sira_no integer;
declare variable swap_eleman_id integer;
begin
  /* operasyon 1 ise UP 2 ise DOWN */

  if (OPERASYON = 1) then
  BEGIN
    EXECUTE STATEMENT 'SELECT SIRA FROM ' || TABLO || ' WHERE ID = ' || ELEMAN_ID
    INTO :ELEMAN_SIRA_NO;

    EXECUTE STATEMENT 'SELECT FIRST 1 ID, SIRA FROM ' || TABLO || ' WHERE ('||TABLO||'.SIRA < ' || ELEMAN_SIRA_NO
    || ') AND ('|| FILTER_EXPRESSION ||') ORDER BY SIRA DESC'
    INTO :SWAP_ELEMAN_ID, :SWAP_ELEMAN_SIRA_NO;

    if ((SWAP_ELEMAN_ID is NULL) or (SWAP_ELEMAN_SIRA_NO is NULL) or (ELEMAN_SIRA_NO is NULL)) then exit;

    EXECUTE STATEMENT 'UPDATE '|| TABLO ||
    ' SET SIRA = ' || SWAP_ELEMAN_SIRA_NO ||
    ' WHERE ID = ' || ELEMAN_ID;

    EXECUTE STATEMENT 'UPDATE ' || TABLO ||
    ' SET SIRA = ' || ELEMAN_SIRA_NO ||
    ' WHERE ID = ' || SWAP_ELEMAN_ID;


  END ELSE
  if (OPERASYON=2) then
  BEGIN
    EXECUTE STATEMENT 'SELECT SIRA FROM ' || TABLO || ' WHERE ID = ' || ELEMAN_ID
    INTO :ELEMAN_SIRA_NO;

    EXECUTE STATEMENT 'SELECT FIRST 1 ID, SIRA FROM ' || TABLO || ' WHERE ('||TABLO||'.SIRA > ' || ELEMAN_SIRA_NO
    || ') AND ('|| FILTER_EXPRESSION ||') ORDER BY SIRA ASC'
    INTO :SWAP_ELEMAN_ID, :SWAP_ELEMAN_SIRA_NO;

    if ((SWAP_ELEMAN_ID is NULL) or (SWAP_ELEMAN_SIRA_NO is NULL) or (ELEMAN_SIRA_NO is NULL)) then exit;

    EXECUTE STATEMENT 'UPDATE '|| TABLO ||
    ' SET SIRA = ' || SWAP_ELEMAN_SIRA_NO ||
    ' WHERE ID = ' || ELEMAN_ID;

    EXECUTE STATEMENT 'UPDATE ' || TABLO ||
    ' SET SIRA = ' || ELEMAN_SIRA_NO ||
    ' WHERE ID = ' || SWAP_ELEMAN_ID;

  END

end^

SET TERM ; ^
Delphiden kullanımı için procedure

Kod: Tümünü seç

procedure TF_ETDUZENLE.SIRA_UPDATE(Tablo: string; Eleman_ID: integer;
  Filter_Expression: string; Operasyon: smallint);
begin
  // SIRA_UPDATE_SQL : IBSQL nesnesi 
  if not assigned(SIRA_UPDATE_SQL) then exit;
  with SIRA_UPDATE_SQL do
  begin
    Close;
    Sql.Clear;
    Sql.Add('EXECUTE PROCEDURE SP_SIRA_UPDATE(:TABLO,:ELEMAN_ID,:FILTER_EXP,:OPERASYON)');
    ParamCheck := true;
    ParamByName('TABLO').AsString := Tablo;
    ParamByName('ELEMAN_ID').AsInteger := Eleman_ID;
    ParamByName('FILTER_EXP').asstring := Filter_expression;
    ParamByName('OPERASYON').AsShort := Operasyon;
    ExecQuery;
  end;
end;
örnek kullanım :

Kod: Tümünü seç

SIRA_UPDATE('STOK', QStok.fieldbyname('ID').asinteger,'CINSI=5', 1);
Yukarıdaki kod, stok tablosundaki kullanıcının seçtiği kaydı (Qstoktaki yani), cinsi 5 olan mallar arasındaki sıraya göre bu kaydı yukarıyı alır. Son SIRA numarasını verdirtecek before insert triggerınıda unutmaman lazım. Bu triggerın yapısı senin yaptığın işe bağlı olduğu için örnek vermenin anlamı yok.

Çok uzun oldu, umarım anlaşılmıştır.
Kolay gelsin.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy undefined biraz daha açılayıcı olabilrmisiniz.Ben tablomda SIRA_NO alanına kaydet butonu ne

Kod: Tümünü seç

var
a:integer;
b:String;
begin
QRY_PERSONEL.edit;
QRY_PERSONEL.post;

QRY_PERSONEL.refresh;
QRY_PERSONEL.first;
for a:=1 to QRY_PERSONEL.recordcount do
begin
QRY_PERSONEL.edit;
QRY_PERSONEL.FieldByName('SIRA_NO').Value:=inttostr(a);

QRY_PERSONEL.post;
QRY_PERSONEL.next;
end;
kodu ile sıra numarası verdiriyorum.Fakat daha sonra yukarı ve aşağı butonu ile bu kayıtların yerini değiştirmek için bu butonların kodları ne olmalı.
//Kaydı Bir Yukarı taşıma

Kod: Tümünü seç

var
a,b:string;
begin
a:= QRY_PERSONEL.fieldbyname('SIRA_NO').asstring;
if IBQuery10.eof=false then QRY_PERSONEL.prior;
b:= QRY_PERSONEL.fieldbyname('SIRA_NO').asstring;
if a <> b then
begin
QRY_PERSONEL.edit;
QRY_PERSONEL.fieldbyname('SIRA_NO').asstring:=a;
QRY_PERSONEL.post;
IBTransaction1.CommitRetaining;
QRY_PERSONEL.next;
QRY_PERSONEL.edit;
QRY_PERSONEL.fieldbyname('SIRA_NO').asstring:=b;
QRY_PERSONEL.post;
IBTransaction1.CommitRetaining;
QRY_PERSONEL.prior;


end;
Yukarda belirttiğim kodlama benim işimi görmüyor.Daha doğrusu taşıyor ama bir satır sonrası yok.Firebird ve delphi tarafı durumunu biraz daha açsanız.Tek tek bölüm bölüm kodlarını nerelere nasıl oturtacağımız konusundad da bilgi verirseniz çok sevinirim
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Delphi tarafından numara verdirtmiyorum. Galiba sıralama olayı senin programının yapısında bütün tablo arasında oluyor. Yani tablonun selectlenmiş bir kısmı arasında değil. Bende örneğimi buna göre vericem.

Numara verdirtme trigger ile oluyor. Aşağıdaki örnek ET_DOSYA tablosuna eklenen her kayda son SIRA numarasını veriyor. Eğer hiç kayıt yoksa 0 veriyor. Delphi tarafından uğraşmana gerek yok bunun için.

Kod: Tümünü seç

CREATE TRIGGER ET_DOSYA_BI_SIRA FOR ET_DOSYA
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE MAXSIRA INTEGER;
begin
  if (NEW.SIRA IS NULL) then
  BEGIN
     SELECT coalesce(MAX(SIRA),0)+1 FROM ET_DOSYA  INTO NEW.SIRA;
   END
end
Bir önceki mesajımdaki verdiğim delphi tarafındaki örneği birazdaha anlaşılır yapayım

Kod: Tümünü seç

procedure TF_ETDUZENLE.SIRA_UPDATE(Tablo: string; Eleman_ID: integer;
  Filter_Expression: string; Operasyon: smallint);
var
  SIRA_UPDATE_SQL:TIBSQL;
begin
  if not assigned(SIRA_UPDATE_SQL) then
     SIRA_UPDATE_SQL := TIBSQL.CREATE(self);
  with SIRA_UPDATE_SQL do
  begin
    Close;
    Sql.Clear;
    Sql.Add('EXECUTE PROCEDURE SP_SIRA_UPDATE(:TABLO,:ELEMAN_ID,:FILTER_EXP,:OPERASYON)');
    ParamCheck := true;
    ParamByName('TABLO').AsString := Tablo;
    ParamByName('ELEMAN_ID').AsInteger := Eleman_ID;
    ParamByName('FILTER_EXP').asstring := Filter_expression;
    ParamByName('OPERASYON').AsShort := Operasyon;
    ExecQuery;
  end;
end;
Mesela Tablomuz STOK olsun. Program tarafından tabloyu çektiğimiz nesne QStok TIBQUERY'si olsun. Kullanıcının grid'te bir recordu seçtiğini düşünüyoruz. Aşağıdaki kod, seçili olan kaydın sırasını değiştirir.

Yukarı Buttonu için kod:

Kod: Tümünü seç

SIRA_UPDATE('STOK', QStok.fieldbyname('ID').asinteger,'1=1', 1);
Aşağı butonu için

Kod: Tümünü seç

SIRA_UPDATE('STOK', QStok.fieldbyname('ID').asinteger,'1=1', 2);
Filter_expression parametresi niye 1=1 diye sorabilirsin. Çünkü herhangi bir filtrelemeye gerek yok senin için. Eğer tablonun belli bir filtrelenmiş result'ında yapmak istiyorsan sıralama olayını bunu işine uygun olarak değiştirmen gerekli. Ama şu an bir görevi yok, onun için herzaman true döndürecek bir expression yazdım.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam cevep için çok teşekkür ediyorum.Triger olayı çok iyi oldu

Ama yazmışolduğunuz.procedure yi kendi verilerime uyarlayamadım bir türlü
tablo adı : TBL_PERSONEL ve alan adları

PERSOEL_ID (pk)
ADI_SOYADI (string)
GOREVI (string)
BRANSI (string)
HESAP_NO (string)
DERS_SAATI (integer)
SIRA_NO (integer)

IBQuery10
QRY_PERSONEL (IBDataset) bileşenlerim

Kod: Tümünü seç

SET TERM ^ ; 

CREATE PROCEDURE SP_SIRA_UPDATE ( 
    tablo varchar(30), 
    eleman_id integer, 
    filter_expression varchar(100), 
    operasyon smallint) 
as 
declare variable eleman_sira_no integer; 
declare variable swap_eleman_sira_no integer; 
declare variable swap_eleman_id integer; 
begin 
  /* operasyon 1 ise UP 2 ise DOWN */ 

  if (OPERASYON = 1) then 
  BEGIN 
    EXECUTE STATEMENT 'SELECT SIRA FROM ' || TABLO || ' WHERE ID = ' || ELEMAN_ID 
    INTO :ELEMAN_SIRA_NO; 

    EXECUTE STATEMENT 'SELECT FIRST 1 ID, SIRA FROM ' || TABLO || ' WHERE ('||TABLO||'.SIRA < ' || ELEMAN_SIRA_NO 
    || ') AND ('|| FILTER_EXPRESSION ||') ORDER BY SIRA DESC' 
    INTO :SWAP_ELEMAN_ID, :SWAP_ELEMAN_SIRA_NO; 

    if ((SWAP_ELEMAN_ID is NULL) or (SWAP_ELEMAN_SIRA_NO is NULL) or (ELEMAN_SIRA_NO is NULL)) then exit; 

    EXECUTE STATEMENT 'UPDATE '|| TABLO || 
    ' SET SIRA = ' || SWAP_ELEMAN_SIRA_NO || 
    ' WHERE ID = ' || ELEMAN_ID; 

    EXECUTE STATEMENT 'UPDATE ' || TABLO || 
    ' SET SIRA = ' || ELEMAN_SIRA_NO || 
    ' WHERE ID = ' || SWAP_ELEMAN_ID; 


  END ELSE 
  if (OPERASYON=2) then 
  BEGIN 
    EXECUTE STATEMENT 'SELECT SIRA FROM ' || TABLO || ' WHERE ID = ' || ELEMAN_ID 
    INTO :ELEMAN_SIRA_NO; 

    EXECUTE STATEMENT 'SELECT FIRST 1 ID, SIRA FROM ' || TABLO || ' WHERE ('||TABLO||'.SIRA > ' || ELEMAN_SIRA_NO 
    || ') AND ('|| FILTER_EXPRESSION ||') ORDER BY SIRA ASC' 
    INTO :SWAP_ELEMAN_ID, :SWAP_ELEMAN_SIRA_NO; 

    if ((SWAP_ELEMAN_ID is NULL) or (SWAP_ELEMAN_SIRA_NO is NULL) or (ELEMAN_SIRA_NO is NULL)) then exit; 

    EXECUTE STATEMENT 'UPDATE '|| TABLO || 
    ' SET SIRA = ' || SWAP_ELEMAN_SIRA_NO || 
    ' WHERE ID = ' || ELEMAN_ID; 

    EXECUTE STATEMENT 'UPDATE ' || TABLO || 
    ' SET SIRA = ' || ELEMAN_SIRA_NO || 
    ' WHERE ID = ' || SWAP_ELEMAN_ID; 

  END 

end^ 

SET TERM ; ^
kodunu firebird de ekledim ama üzerinde hiç bir değişiklik yapmadım.
yazdığınız procedure çalışıyor

delphi tarafında yazılan procedure

Kod: Tümünü seç

procedure SIRA_UPDATE(Tablo: string; Eleman_ID: integer;
  Filter_Expression: string; Operasyon: smallint);
var
  SIRA_UPDATE_SQL:TIBSQL;
begin
  if not assigned(SIRA_UPDATE_SQL) then
SIRA_UPDATE_SQL := TIBSQL.CREATE(self);
  with SIRA_UPDATE_SQL do
  begin
    Close;
    Sql.Clear;
    Sql.Add('EXECUTE PROCEDURE SP_SIRA_UPDATE(:TABLO,:ELEMAN_ID,:FILTER_EXP,:OPERASYON)');
    ParamCheck := true;
    ParamByName('TABLO').AsString := Tablo;
    ParamByName('ELEMAN_ID').AsInteger := Eleman_ID; 
    ParamByName('FILTER_EXP').asstring := Filter_expression;
    ParamByName('OPERASYON').AsShort := Operasyon; 
    ExecQuery;
  end;
end;
(TF_ETDUZENLE...... hata aldım bende SIRA_UPDATE olarak kullandım)


var
SIRA_UPDATE_SQL:TIBSQL; //Burayı anlamadım
begin
if not assigned(SIRA_UPDATE_SQL) then
SIRA_UPDATE_SQL := TIBSQL.CREATE(self);// burada self le ilgili hata alıyorum
[Error] Bordro.pas(882): Undeclared identifier: 'self'

TIBSQL dediğiniz

IBSQL
IBDataSet
IBQuery

bu bileşenlerden hangisi.
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

SIRA_UPDATE_SQL := TIBSQL.CREATE(self);// burada self le ilgili hata alıyorum
SIRA_UPDATE procedure'unu üzerinde çalıştığın formun procedure'u olarak ayarla. Yani Tfom1.SIRA_UPDATE olsun.
TIBSQL dediğiniz

IBSQL
IBDataSet
IBQuery

bu bileşenlerden hangisi.
Sence hangisi :)
TIBSQL görsel olmayan, dataset özelliği taşımayan bir nesne. Tek query çalıştırmak için kullanıyorum.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam
IBSQL olduğunu anladımda hatta onla ilgili de değiştirdim kodu hata verince şüphelendim.Formum Form3 ve kodları aşağıdaki şekilde yazıyorum

Kod: Tümünü seç

procedure TFom3.SIRA_UPDATE(Tablo: string; Eleman_ID: integer;
  Filter_Expression: string; Operasyon: smallint);
var
 IBSQL1:TIBSQL;
begin
  if not assigned(IBSQL1) then
IBSQL1:=TIBSQL.CREATE(self);
  with IBSQL1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('EXECUTE PROCEDURE SP_SIRA_UPDATE(:TABLO,:ELEMAN_ID,:FILTER_EXP,:OPERASYON)');
    ParamCheck := true;
    ParamByName('TABLO').AsString := Tablo;
    ParamByName('ELEMAN_ID').AsInteger := Eleman_ID; 
    ParamByName('FILTER_EXP').asstring := Filter_expression;
    ParamByName('OPERASYON').AsShort := Operasyon; 
    ExecQuery;
  end;
end;

Kod: Tümünü seç

procedure TFom3.SIRA_UPDATE(Tablo: string; Eleman_ID: integer;
  Filter_Expression: string; Operasyon: smallint);
satırında hata alıyorum
[Error] Bordro.pas(877): ';' expected but '.' found
[Error] Bordro.pas(883): Undeclared identifier: 'self'
[Error] Bordro.pas(890): Undeclared identifier: 'Tablo'
[Error] Bordro.pas(891): Undeclared identifier: 'Eleman_ID'
[Error] Bordro.pas(892): Undeclared identifier: 'Filter_expression'
[Error] Bordro.pas(893): Undeclared identifier: 'Operasyon'
[Error] Bordro.pas(899): Undeclared identifier: 'SIRA_UPDATE'
[Error] Bordro.pas(903): Undeclared identifier: 'SIRA_UPDATE'

SIRA_UPDATE olarak düzenlediğimde

IBSQL1:=TIBSQL.CREATE(self); satırında hata alıyorum.
(IBSQL1 bağlantıları tamam)
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

Tfom3 de Tform3 olacak hocam dikkat etsene biraz.
IBSQL unitini dahil et ayrıca.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
kardeş sanırım gönderdiğin procedureden bir önceki procedure/fonksiyon da end in sonunda ; yerine . koymuşsun yada onun gibi bişeyler var.
877. satırı kontrol et. sıkıntın o satırda başlıyor. self olayı 883. satırda.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Syn undefined Form yerine fom yazmışım özür diliyorum.Ama aşağıdaki şekilde procedure düzeltim (TForm olarak) ama yine hata alıyorum IBSQL1 olarak sql bileşenim forma eklemiştim önceden gerekli IBTransaction ve IBDatabase ini bağladım Tstrin ini yazdım ama yine aynı hatayı alıyorum yani procedure ü çalıştıramadım

Kod: Tümünü seç

procedure TForm3.SIRA_UPDATE(Tablo: string; Eleman_ID: integer;
  Filter_Expression: string; Operasyon: smallint);
var
 IBSQL1:TIBSQL;
begin
  if not assigned(IBSQL1) then
IBSQL1:=TIBSQL.CREATE(self);
  with IBSQL1 do
  begin
    Close;
    Sql.Clear;
    Sql.Add('EXECUTE PROCEDURE SP_SIRA_UPDATE(:TABLO,:ELEMAN_ID,:FILTER_EXP,:OPERASYON)');
    ParamCheck := true;
    ParamByName('TABLO').AsString := Tablo;
    ParamByName('ELEMAN_ID').AsInteger := Eleman_ID;
    ParamByName('FILTER_EXP').asstring := Filter_expression;
    ParamByName('OPERASYON').AsShort := Operasyon;
    ExecQuery;
  end;
end;
hata

Kod: Tümünü seç

[Error] Bordro.pas(879): Undeclared identifier: 'SIRA_UPDATE'  // procedure TForm3.SIRA_UPDATE  olan satır
[Error] Bordro.pas(879): ';' expected but '(' found
[Error] Bordro.pas(885): Undeclared identifier: 'self'
[Error] Bordro.pas(892): Undeclared identifier: 'Tablo'
[Error] Bordro.pas(893): Undeclared identifier: 'Eleman_ID'
[Error] Bordro.pas(894): Undeclared identifier: 'Filter_expression'
[Error] Bordro.pas(895): Undeclared identifier: 'Operasyon'
[Error] Bordro.pas(901): Undeclared identifier: 'SIRA_UPDATE'
[Error] Bordro.pas(905): Undeclared identifier: 'SIRA_UPDATE'

Cevapla