Query sonucu.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Query sonucu.

Mesaj gönderen vipaydin »

Merhaba,

SELECT MAX(REF) REFERANS NO FROM tablo_adi.

REF alanı integer.

Bu sorgunun sonucunu normal bir edit e nasıl bağlarım?

Bu sorguyu ileride INSERT INTO da kullanacağım. Yalnız şu an deneme çalışmasında bir edit veya label içinde görmem gerekiyor. Yeni kayıt girileceğinde referans numarası veritabanından +1 artırılarak yeni kayıt ile birlikte database kaydedilecek.

İyi çalışmalar.
Misafir

Mesaj gönderen Misafir »

Kod: Tümünü seç

query1.sql.add('SELECT MAX(REF) as ref  REFERANS NO FROM tablo_adi.');

edit1.text := query1.fieldbyname('ref').asstring;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ;

Kod: Tümünü seç

 with query1 do
  begin
   close;
   sql.clear;
   sql.add('select max(refno) from referans');
   Active:=true; 
   Edit1.Text:=Fields[0].Asstring;
  end;   
Kullandığın DB AutoInc alan destekliyorsa bence daha zahmetsiz olur.
Kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

Merhaba,

Volkan Bey,
Sizin dediğiniz gibi Edit1.Text:=Fields[0].AsString;
gibi bir tanımlama da
List Index out of bounds(0) hatası alıyorum.
Kullandığım DB SQL Server 2000.
DB AutoInc desteğinin olup olmadığına nerden bakabilirim?

Teşekkür ederim.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
Yukarıda ki örnek kodda herhangi bir sorun yok Active:=true satırı istisna oluşturmuyorsa 0 indise sahip tek sütunluk bir veri dönmek zorundadır.
MSSQL otomatik artan alan desteklediğini düşünüyorum.
Kodunuzu inceleyin derim.
kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
Bil_Bakalım
Üye
Mesajlar: 61
Kayıt: 31 Ara 2004 01:45
Konum: İzmir
İletişim:

Mesaj gönderen Bil_Bakalım »

Kod: Tümünü seç

 with query1 do
  begin
   close;
   sql.clear;
   sql.add('select max(refno) from referans');
   Active:=true; 
   Edit1.Text:=Fields[0].Asstring;
  end;   
Yukarıdaki satırda edit1.text := inttostr(fields[0].asinteger)
olarak değişiklik yaparsan sanırım istediğin olacak.

Ayrıca :oops: Affınıza sığınarak sql cümleciğini yazdığında

query1.sql.txt:=' select max(refno) from referans';
query1.open;
edit1.text := inttostr(fields[0].asinteger);
gibi bir kalıp kullanırsan daha kısa bir kod olur diye düşünüyorum.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
alan nesnelerinde uygun tipler arasında atama yapabilmek için ayrıca bir type casting işlemi yapmanıza gerek yoktur. AsString , AsInteger gibi metodlar uyumlu ise sonucu belirttiğiniz veritipinde döndürecektir. dolayısıyla aslında Integer tipindeki bir alan verisini String bir değişkene AsString metodunu kullanarak zahmetsizce aktarabilirsiniz.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

vipaydin yazdı:Sizin dediğiniz gibi Edit1.Text:=Fields[0].AsString;
gibi bir tanımlama da
List Index out of bounds(0) hatası alıyorum.

vkamadan'ın yazdığı kodların işinizi görmesi lazım.
with ifadesinden dolayı gözünüzden kaçan biryer olabilir.
birde şu şekilde deneyin.

Kod: Tümünü seç

   
   query1.close; 
   query1.sql.clear; 
   query1.sql.add('select max(refno) from referans'); 
   query1.Active:=true; 
   Edit1.Text:=query1.Fields[0].Asstring; 
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Arkadaşlar dikkat edelim. Hata "List Index out of bounds(0) hatası alıyorum." mış. Anlamı Fields[0].AsString; Fields class ına field isimleri eklenmemiş dolayısıyla 0 ıncı field a erişmeye çalışınca hata alırsınız.
Her zaman söylediğim gibi
FieldByName('').As kullanın
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Misafir

Mesaj gönderen Misafir »

freeman35 yazdı:Arkadaşlar dikkat edelim. Hata "List Index out of bounds(0) hatası alıyorum." mış. Anlamı Fields[0].AsString; Fields class ına field isimleri eklenmemiş dolayısıyla 0 ıncı field a erişmeye çalışınca hata alırsınız.
Her zaman söylediğim gibi
FieldByName('').As kullanın
merhaba.
hocam öncelikle Fields bir class değil property'dir bildiğim kadarıyla (yanılıyorsam düzeltiniz).ikinci olarak eğer tabloya erişimi sağlayan component bağlantıyı başarılı bir şekilde gerçekleştirmişse TStringList tipinde olan Fields property'sine alanları ekler..aksi halde fieldbyname('').as ya da fields[0].as.. hata döndürecektir..
saygılar..
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

delphi_coder yazdı:
freeman35 yazdı:Arkadaşlar dikkat edelim. Hata "List Index out of bounds(0) hatası alıyorum." mış. Anlamı Fields[0].AsString; Fields class ına field isimleri eklenmemiş dolayısıyla 0 ıncı field a erişmeye çalışınca hata alırsınız.
Her zaman söylediğim gibi
FieldByName('').As kullanın
merhaba.
hocam öncelikle Fields bir class değil property'dir bildiğim kadarıyla (yanılıyorsam düzeltiniz).ikinci olarak eğer tabloya erişimi sağlayan component bağlantıyı başarılı bir şekilde gerçekleştirmişse TStringList tipinde olan Fields property'sine alanları ekler..aksi halde fieldbyname('').as ya da fields[0].as.. hata döndürecektir..
saygılar..
Fields Property olarak düşünebilirsiniz. Fakat gerçek manada bir class tır.
property Fields: TFields read FFields;

TFields Classı

Kod: Tümünü seç

  TFields = class(TObject)
  private
    FList: TList;
    FDataSet: TDataSet;
    FSparseFields: Integer;
    FOnChange: TNotifyEvent;
    FValidFieldKinds: TFieldKinds;
  protected
    procedure Changed;
    procedure CheckFieldKind(FieldKind: TFieldKind; Field: TField);
    function GetCount: Integer;
    function GetField(Index: Integer): TField;
    procedure SetField(Index: Integer; Value: TField);
    procedure SetFieldIndex(Field: TField; Value: Integer);
    property SparseFields: Integer read FSparseFields write FSparseFields;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
    property ValidFieldKinds: TFieldKinds read FValidFieldKinds write FValidFieldKinds;
  public
    constructor Create(ADataSet: TDataSet);
    destructor Destroy; override;
    procedure Add(Field: TField);
    procedure CheckFieldName(const FieldName: string);
    procedure CheckFieldNames(const FieldNames: string);
    procedure Clear;
    function FindField(const FieldName: string): TField;
    function FieldByName(const FieldName: string): TField;
    function FieldByNumber(FieldNo: Integer): TField;
    procedure GetFieldNames(List: TStrings);
    function IndexOf(Field: TField): Integer;
    procedure Remove(Field: TField);
    property Count: Integer read GetCount;
    property DataSet: TDataSet read FDataSet;
    property Fields[Index: Integer]: TField read GetField write SetField; default;
  end;
Fields[0] şeklinde kullanımı bende tasvif etmiyorum bunun bir çok sebebi var.

Birincisi Okunabilirlik. Bir kodu yazıyoruz yazıyoruz fakat geriye döenbileceğimizi düşünüyormuyuz? ben bu konuya çok dikkat ediyorum. Field[0], fields[1] bunlar nedir hangi alanı işler hoppala her yapılandırmada veriabanına mı dönecem ya ben işi bıraktım yerime gelecek çalışacak arkadaş ne yapacak ? Bunlar çok önemli ! Takım çalışmalarında başarı sağlayabilmek için okunabilrliğe dikkat etmeliyiz.

İkincisi Projemiz bitti teslim ettik ve müşterimizin 15 gün sonra bilemediniz 3 ay sonra (Atıyorum) Ya Ahmet bey ben Cari Kartlarda 2 inci mail adresi kaydedbileceğim bir alan eklemenizi istiyorum. Hoppala ne yapcaz şimdi Yapılandırmamız ve kodlamamamız ne tip sıkıntıya girer? Artık burasınıda size bırakıyorum ;) düşünelim.

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.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ben sadece Fields[0] ibaresini
select count(*) from tablo gibi basit sqller icin moduler yapı hazırlamakta kullanıyorum

mesela

Kod: Tümünü seç

function TabloToplam(Qry:TIbQuery;Tablo:String):Integer;
begin
  result:=-1;
  with Qry do
  try
    Close;
    SQL.Text:='select count(*) from '+Tablo;
    Open;
    result:=Fields[0].AsInteger;
  finally
    Close;
  end;
end;
gibi bir yapı dusunebilir ve fonksiyon kutupanemize atabiliriz.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

delphi_coder yazdı: hocam öncelikle Fields bir class değil property'dir bildiğim kadarıyla (yanılıyorsam düzeltiniz).
husonet yazdı:Fields Property olarak düşünebilirsiniz. Fakat gerçek manada bir class tır.
Hüseyin in dediğini biraz daha anlaşılır yapmak gerek sanırım.

Fields TDataSet Class ının bir property(Özelliği) dir. Doğrudur. Ama bu bir class (sınıf [Türkçe karşılığı bana saçma geliyor :) ]) tır. Class ı şöyle daha anlaşılır bir halde söyleyebiliriz. Tek isim altında gruplanmış, benlli bir işlevselliği olan kod yumağı.

Yukarıdaki FieldByName, ParamByName kullanın demekteki gayem,diğer arkadaşlarda anlatmaya çalışmışlar, yazılan kodun daha mantıklı ileriye dönük bir yapı olması, yoksa yazılım hatası zaten Delphi compiler ı izin vermiyor, daha IDE de iken yazım hataları bildiriliyor.

Şimdi fark ettimki "TStringList tipinde olan Fields property'sine" demişsin aman burda yanılgın büyük. TStringList çok farklı bir class. incelemeni öneririm.

"fieldbyname('').as ya da fields[0].as.. hata döndürecektir.." doğru her ikiside hata döndürebilir ama hata ve oluşum sebepleri farklı. Arkadaşın verdiği hatanın sebebi yukarıda yazdın senin söylediğindede kısmen aynı, yani bağlantı sağlanmadıysa TFields içeriği boş olur ve ve alınan hata 0 list index ... yani 0 diye bir kayıt yok gibisinden bir mesaj verir. ama Fieldbyname de ise bu falanca field bulunamıyor diye hata verir. Hata hatadır deniyorsa hem fikiriz. Ama burdaki yani forumun amacı öğretmek ben buyüzden direk konuyu söylemeden etrafındaki konuları anlatmaya çalışırıp ve sorunu kişinin bulmasını isterim yani balık tutmasını öğretmeye çalışırım.

Delphi yi öğrenmek istiyorsanız class ları bir bütün olarak sakın düşünmeyin. en temelden başlayıp yukarıya doğru inceleyin. Bu size daha hakimiyet kazandırır. Orjinal Delphi box ı satın aldığınızda kutudan kitap CD den çok çok daha kıymetli, bir çarşafı aratmıycak büyüklükte class haritası çıkar. Hatta bu harita borland yazılım ekibinin duvarlarında asılıdır :) Yani her eve lazım

Kolay gele
:lol:
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
sayın freeman35
bahsettiğiniz class haritasını nereden bulabiliriz borland ın original box ı haricinde? bizde asalım duvarımıza :)
kolay gelsin.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Ben web siteme Haritayı ekledim çekebilirsiniz.

http://www.durmus.net/huso/Delphi.pdf

Not : Delphi 5 sürümünün haritasıdır. İlk Delphi ye başladığım zaman bir arkadaş hediye etmişti:)

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