Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
TAdoQuery fkInternalCalc Fıeld
#11
@meterci  Eğer değişen her satır için hesabın adını gostermek istıyorsan o queryi bır datasource bağlayabılırsın.
datasource nin ondatachange olayına da hesap ismi almak isteginiz query nin kodlarını yazabılırsın.
mesela


procedure TForm1.detayDatasourceDataChange(Sender: TObject; Field: TField);
begin
 queryhesapaditablo.sql.text:='select AD from HPL where HPLKODU=:hesapkodu'
 queryhesapaditablo.parmeters.parambyname('hesapkodu').value:=detayqueryHPLKODU.value;
 if queryhesapaditablo.Active = false then queryhesapaditablo.Open
 else queryhesapaditablo.Requery([]);
end;
Cevapla
#12
açıkçası bu güne kadar TAdoQuery üzeinden böyle bir şeye hiç ihtiyaç duymadım
genelde memdata yada clientdataset kullarak işlemşeri hep çözdüm

sanrım çok yardımcı olamadım
Fakat sizin probleminizi çözüme kavuşturmak adına aklıma gelen yöntemleri paylaşmaya çalışıyorum.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#13
(27-08-2019, Saat: 16:52)serdar Adlı Kullanıcıdan Alıntı: kardes  yanı yapmak ıstegın su mu acaba:
FisDetay tablosunda HPLKODU kodunu degıstırebılmek ve degıstıkten sonra HPL adını görmek ??
HPL adı anladıgım kadarıyla master bır tablodan gelıyor. Neden HPL  adını detay tablosundan elle degıstırmeye calısıyorsun?
FisDetay tablosunda HPLKODU kodunu değiştirirsen (senin verdiğin örenekte hesap 100 adı KASA)  bu sorgudaki  (select *,HPLADI(select AD from HPL were HPLKODU=m.HPLKODU) from FisDetay as M)  HPL  otomatik değişir zaten.

Smile anlaşamadık 

ben örnek veriyorum sadece
sizin programlarınızda hiç mi kod ve ad alanları yok?
sen muhasebecisin fişi ekrana çağırdın, 10 satır var fişte, ilk kolon kod yanında hesap adı kolonun var (hesap adı readonly kullanıcı değiştirmiyor).
3. satırda kod kolonuna 100 yazmışsın ama hata yapmışsın aslında 102 olacaktı, geldin 102 yazdın.
yazar yazmaz yanında yazan KASA ifadesinin BANKA olması lazım (kullanıcıya bunu göstermen lazım)
kod alanının validate eventinde gittin veritabanına 102 hesabın adını aldın ve kolona BANKA yazdın ve görüyorsun hiçbir sorun yok.
sonra aşağı oka bastın alt satıra indin daha veritabanına kaydetmedin, 5. satırda da birşeyler değiştireceksin.
alt satıra indin ya o anda 3. satırda şunlar yazıyor 102 - KASA ama 102- BANKA yazması lazım, senin veritabnanından getirdiğin BANKA değeri biranda KASA ya dönüyor yine.
TAdoQuery dışında bu iş doğru çalışıyor. Ado ise bu fieldın tabloya bağllı olmadığını biliyor bir şekilde ve sen ne yazarsan yaz satırı Rsync([]) yaptığında veritabanında getirdiği orjinal değeri buraya yazıyor. KOD alanı için bunu yapmıyor o aynen 102 olarak kalıyor ama AD alanını orjinal select çektiği değere geri çekiyor.

Sen sonra yularıdan bütün fişi kaydedip refresh ettiğinde tabiki 102-BANKA geliyor ama kayıt girişi anında bu şeklde çalışması kabul edilemez.
Çünkü satırlar arasında dolaşmak zorundasın ve satırdan çıktığın anda bütün böyle olan kolonların değerlerini orjinal değerine getiriyor.

bütün muhasebe programları böyle çalışıyor ve bu sadece bir örnek, neden anlatamadım bende bilmiyorum  Smile

(27-08-2019, Saat: 17:20)adelphiforumz Adlı Kullanıcıdan Alıntı: açıkçası bu güne kadar TAdoQuery üzeinden böyle bir şeye hiç ihtiyaç duymadım
genelde memdata yada clientdataset kullarak işlemşeri hep çözdüm

sanrım çok yardımcı olamadım
Fakat sizin probleminizi çözüme kavuşturmak adına aklıma gelen yöntemleri paylaşmaya çalışıyorum.

Aynen bizde öyle yapıyoruz, ClientDataset kullanıyoruz ama burada AdoQuery ile devam etmem gerekiyordu, herşey güzel birtek bu temporary field diyeceğim şey çalışmıyor.
RecordBuffer'a değeri yazıyor post deyince gidip orjinal değerine getiriyor. batch optimistik ise gridde alt satıra inince bütün açıklama alanları orjinal değerine geliyor.
kodlar başka adlar başka oluyor. post edip refresh deyince düzgün geliyor ama tabi giriş anında saçma bir görüntü oluyor.

sDac, unidac, firedac, dbexpres, BDE hepsinde kullandığımız yöntem aslında.
Microsoft girince işin içine terse döndük.

Teşekkür ederim birader.
Cevapla
#14
şimdi anladım tane tane anlatınca Smile)
sen o anda tabloyu post ettıgınde hesap adının degıstıgını gormen ıcın tablonu requery etmen lazım.
ızleyecegın yol su. hesap kodunu 100den 102 ye degıstırdın. ama hesap adı degısmedı.
sımdı adonun AfterPost olayına sunları yazıyorsun
..

var i:string;
begin

i:=adouery.fieldbyname('tablonun primary fieldi').text;
if adouery.Active = false then adouery.Open
else adouery.Requery([]);
adoquery.locate('tablonun primary fieldi',i,[]);

end


umarım işini görür

Bu arada tablon batchoptimistic olmasın dıkkat et. Tablonun primary alani varsa onu yazmalisin mesela id varsa onu yazmalisin.

Ben ado ile post olayinda bunu kullanirim subquery alanlar guncellenir
Cevapla
#15
(27-08-2019, Saat: 14:20)adelphiforumz Adlı Kullanıcıdan Alıntı: Kullandığınız grid TcxGrid ise bunların hiçbirine gerek yok
grid üzerinde bulunan check özelliğini aktif ederek cok daha hızlı ve performnslı bir chekc işlem yapabilirsiniz.
Filtrelemeler dahil olarak

procedure TForm1.FormCreate(Sender: TObject);
begin
 cxGrid1DBTableView1.OptionsView.Indicator := True;
 cxGrid1DBTableView1.OptionsSelection.CheckBoxPosition := cbpIndicator; //yada cbpFirstColumn
 cxGrid1DBTableView1.OptionsSelection.CheckBoxVisibility := [cbvDataRow, cbvColumnHeader];
 cxGrid1DBTableView1.OptionsSelection.MultiSelect := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 I, ARecIndex: Integer;
 AValue: Variant;
 sValue : String;
begin
   try
     for I := 0 to cxGrid1DBTableView1.Controller.SelectedRecordCount - 1 do
     begin
       if (I mod 25) = 0 then
         Application.ProcessMessages;
       ARecIndex := cxGrid1DBTableView1.Controller.SelectedRecords[I].RecordIndex;
       AValue    := cxGrid1DBTableView1.DataController.Values[ARecIndex, cxGrid1DBTableView1.GetColumnByFieldName('IdKurlar').Index];
       sValue := AValue;
       if (sValue <> '') then
           ListBox1.Items.Add(sValue);
     end;

   except
   end;
end;

Hocam verdiğiniz örneği ListBox'a değilde başka bir tabloya aktarım yapınca bazı verilerden iki tane ekleme yapıyor. Sebebi ne olabilir. Ayrıca Listbox'a aktarım yapınca da ikişer aktarıyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  RTTI Field ile Sınıfa Nasıl Ulaşırım? 3ddark 4 2.154 16-11-2018, Saat: 18:08
Son Yorum: Tuğrul HELVACI
  Field Alignment, #pragma pack erkankurtaga 9 4.483 22-12-2017, Saat: 18:51
Son Yorum: savasabd
  [Çözüldü]Çözemediğim veri tabanı hatası (Cannot access field as type Text) musdi42 15 7.423 19-01-2017, Saat: 14:07
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi