tablodaki değer değiştiği anda nasıl anlarım?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hardndark
Üye
Mesajlar: 23
Kayıt: 14 Tem 2003 05:25
Konum: Keban Barajı

tablodaki değer değiştiği anda nasıl anlarım?

Mesaj gönderen hardndark »

merhaba,
mysql ve d6 (zeos bileşenleri) ile bir uygulama geliştiriyorum.
birden fazla kullanıcı var, network ortamında çalışmakta.
sorum şu : herhangi bir tablo'daki enum(örneğin '0' ya da '1' değerini alan ) tanımlı bir alanın değeri değiştirildiği anda bunu kullanıcılarda çalışan uygulamamda showmessage ya da başka bi şekilde nasıl gösterebilirim? aklıma timer ile tabloda belli aralıklarla kontrol yapmak geldi ama daha sağlıklı bir yolu olmalı diye üstatlara sorayım dedim.

selamlar...
İnsanlar, insan sayısı kadar gruba ayrılırlar...
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

datasetinin açık olup olmadığına (ki zaten açık olacaktır), o an işlem yapılıp yapılmadığına yani dsedit 'te mi nerde onu kontrol ettirerek başka bir kullanıcının o an için erişmesini engelleyebilir daha sonradan da tablonu tekrar refresh ederek diğer kullanıcıda da gösterebilirsin dostum.

Yapabilirsen kodu buraya yaz herkes incelesin. Yapamazsan zaten mrmcop dostum onun için de buraya bir kod yazar...


Kolay gelsin

Saygılar.
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
hardndark
Üye
Mesajlar: 23
Kayıt: 14 Tem 2003 05:25
Konum: Keban Barajı

Mesaj gönderen hardndark »

başka fikri olan var mı?
İnsanlar, insan sayısı kadar gruba ayrılırlar...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

bu işlemden amacınız nedir? amacınızı yazarsanız daha uygun yöntemler bulunabilir.

Kolay gelsin.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba

Vereceğim örnek işinizi görecektir.

Kod: Tümünü seç

unit LockForm;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, DBTables;

type
  TNavigForm = class(TForm)
    DataSource1: TDataSource;
    Table1: TTable;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    Label1: TLabel;
    Label2: TLabel;
    DBNavigator1: TDBNavigator;
    Label3: TLabel;
    DBEdit3: TDBEdit;
    Timer1: TTimer;
    procedure DataSource1DataChange(Sender: TObject; Field: TField);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    procedure TestLockStatus;
  end;

var
  NavigForm: TNavigForm;

implementation

{$R *.DFM}

uses
  BDE;

function IsRecordLocked (Table: TTable): Boolean;
var
  Locked: BOOL;
  hCur: hDBICur;
    rslt: DBIResult;
begin
    Table.UpdateCursorPos;
  // test if the record is locked by the current session
  Check (DbiIsRecordLocked (Table.Handle, Locked));
  Result := Locked;
  // otherwise check all sessions
  if (Result = False) then
    begin
    // get a new cursor to the same record
    Check (DbiCloneCursor (Table.Handle, False, False, hCur));
        try
      // try to place a write lock in the record
      rslt := DbiGetRecord (hCur, dbiWRITELOCK, nil, nil);
      // don't call Check: we want to do special actions
      // instead of raising an exception
      if rslt <> DBIERR_NONE then
            begin
        // if a lock error occured
        if HiByte (rslt) = ERRCAT_LOCKCONFLICT then
          Result := True
        else
          // if some other error happened
          Check (rslt); // raise the exception
      end
            else
        // if the function was successful, release the lock
        Check (DbiRelRecordLock (hCur, False));
        finally
      // close the cloned cursor
      Check (DbiCloseCursor (hCur));
    end;
  end;
end;

procedure TNavigForm.TestLockStatus;
begin
  // if the table is not in edit mode
  if Table1.State in [dsEdit, dsInsert] then
    Caption := 'LockTest - Record in edit mode'
  else if IsRecordLocked (Table1) then
  begin
    DbEdit1.ReadOnly := True;
    DbEdit2.ReadOnly := True;
    DbEdit3.ReadOnly := True;
    Caption := 'LockTest - Record already locked';
  end
  else
  begin
    DbEdit1.ReadOnly := False;
    DbEdit2.ReadOnly := False;
    DbEdit3.ReadOnly := False;
    Caption := 'LockTest - Record not locked';
  end;
end;

procedure TNavigForm.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  // if the record changed
  if (Field = nil) then
    TestLockStatus;
end;

procedure TNavigForm.Timer1Timer(Sender: TObject);
begin
  TestLockStatus;
end;

end.
Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla