Delphi Can

Orjinalini görmek için tıklayınız: birden fazla veritabanindan ayni verileri dataset de birlestirmek
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3
DMvt.MemDataset1.AppendRecord(SQLQueryL,true);  

lazarus ide kullaniyorum clientdataset bulamadim.
memdataset de denedigimde hata aliyorum.

linki inceleyecegim tesekkurler

bu iş için memdata kullansan daha iyi olur. gride bağlı datasource u memdataya bağla. ilk tablondan while ile çek. döngü bittikten sonra ikinci while ile diğer tablondan veri çek ve bunları memdataya yazdır. hepsini gride yazdıracaktır.
@ercankose hocam bahsettiginiz olayi yapmak istiyorum fakat
memdata ya yazdirmayi
sorguyu memdata1:=query1; seklinde esitleyerek atayabiliyormuyuz.
yoksa memdata kolonlari olusturup while ile satir satir datayi memdata ya eklememiz mi gerekiyor.
saygilarimla
(03-01-2025, Saat: 21:41)sadikacar60 Adlı Kullanıcıdan Alıntı: [ -> ]
DMvt.SQLQueryL.Open;

DMvt.DataSourceL.DataSet:=DMvt.SQLQueryL;  // normalde dasete bu sekilde bilgileri aktariyordum
DMvt.MemDataset1 :=DMvt.SQLQueryL;   //bu sekilde denedim calismiyor
DMvt.MemDataset1 :=DMvt.DataSourceL.DataSet;  //bu sekildede denedim olmadi
internetden birsey bulamadim memdatasete pratik sekilde data aktaramiyormuyuz.
while ile bilgileri tek tek mi kaydetmeliyiz.

saygilarimla

quer1 sorgusu yap...

query1.first;

while not query1.eof do
begin
dxmemdata.insert;
dxmemdata.fielsdbyname('ALAN1').asstring:=query1.fieldbyname('ALAN1').asstring;
dxmemdata.fielsdbyname('ALAN2').asstring:=query1.fieldbyname('ALAN2').asstring;
dxmemdata.post;

query1.next;
end;

quer2 sorgusu yap...

query2.first;

while not query2.eof do
begin
dxmemdata.insert;
dxmemdata.fielsdbyname('ALAN1').asstring:=query2.fieldbyname('ALAN1').asstring;
dxmemdata.fielsdbyname('ALAN2').asstring:=query2.fieldbyname('ALAN2').asstring;
dxmemdata.post;

query2.next;
end;
anladim hocam. cok tesekkur ederim. saygilar sunarim.

mevcut durumda kullandigim sekil soyle: (tablolar ayni)
pc1 1.ci tablodan aldigim bilgileri stringride aktariyorum.
pc2 2.ci tablodan aldigim bilgileri ayni stringride aktariyorum.
daha sonra stringriddeki tum bilgiyi clientdatasete aktariyorum. sonra lazreport islemlerini yapiyorum.

memdataset kullanma sekli: (anladigim kadariyla)
pc1 tablo1 deki bilgileri al memdatasete aktar.
pc2 tablo2 deki bilgileri al ayni memdatasete aktar
memdataseti dbgride bagla butun bilgiler dbgridde listelenir.
lazreport islemlerini memdataset uzerinden yap.

saygilarimla
(04-01-2025, Saat: 10:01)sadikacar60 Adlı Kullanıcıdan Alıntı: [ -> ]anladim hocam. cok tesekkur ederim. saygilar sunarim.

mevcut durumda kullandigim sekil soyle: (tablolar ayni)
pc1 1.ci tablodan aldigim bilgileri stringride aktariyorum.
pc2 2.ci tablodan aldigim bilgileri ayni stringride aktariyorum.
daha sonra stringriddeki tum bilgiyi clientdatasete aktariyorum. sonra lazreport islemlerini yapiyorum.

memdataset kullanma sekli: (anladigim kadariyla)
pc1 tablo1 deki bilgileri al memdatasete aktar.
pc2 tablo2 deki bilgileri al ayni memdatasete aktar
memdataseti dbgride bagla butun bilgiler dbgridde listelenir.
lazreport islemlerini memdataset uzerinden yap.

saygilarimla


aynen. memdata sadece verileri ram bellekte tutuyor herhangi bir yere kaydetmiyor. stringridle uğraşmana gerek yok. bir tabloya kaydetmek istersen yine memdata içindeki vrileri while döngüsü içinde veritabanına kaydedebilirsin. işlem yapmadan önce herzaman memdatayı kapatıp açman lazım. hata alırsın yoksa.

memdata.close;
memdata.ope;
selam, 
memdataset yerine bufdataset kullanmanız daha mantıklı olacaktır. Biyerlerde memdataset ten daha iyi olduğunu okumuştum, index vs. var farklı olarak, bende uzun zamandır kullanıyorum zaten. Aşağıda basit bir örnek forum lazarus tan.
uses
  db,BufDataset;
var
 BufDb:TBufDataset;
begin
BufDb:=TBufDataset.Create(nil);
try
  BufDb.FieldDefs.Add('NAME',ftString,20);
  BufDb.CreateDataSet;
  BufDb.Open;
  BufDb.Append;
  BufDb.FieldByName('NAME').Value:='Free';
  BufDb.Post;
  BufDb.Append;
  BufDb.FieldByName('NAME').Value:='Pascal';
  BufDb.Post;
  BufDb.SaveToFile('BufDb.txt');
finally
  BufDb.Close;
  BufDb.Free;
end;
 BufDb:TBufDataset;
begin

VTbaglan_VT_TURNUVA;

sql_v:=  'select * from TBL_TRNV ';

  Form1.SQLQueryTRNV.Close;
  Form1.SQLQueryTRNV.sql.Clear;
  Form1.SQLQueryTRNV.sql.add(sql_v);
  Form1.SQLQueryTRNV.Open;
  bid:=SQLQueryTRNV.fieldbyname('BID').value;


  BufDb:=TBufDataset.Create(nil);
try
  BufDb.FieldDefs.Add('BID',ftString,20);
  BufDb.CreateDataSet;
  BufDb.Open;
  BufDb.Append;
  BufDb.FieldByName('BID').Value:=bid;
  BufDb.Post;

  BufDb.Open;
  data:=BufDb.FieldByName('BID').Value;
  BufDb.Close;
  Label1.Caption:=data;
finally
  BufDb.Close;
  BufDb.Free;
end;
//Form1.DBGrid1.DataSource:=BufDb;   //hata veriyor
Form1.DBGrid1.DataSource.DataSet:=BufDb; //hata veriyor
   

ancak zaman ayirabildim denemek icin 

memdataset de hic basarili olamadim ama bufdataset de birseyler yapmayi basardim.
veritabanindan aldigim BID kolon bilgisini once bufDatasete aktardim sonra bufdataset den alip bir label icinde gosterdim
ama bufdataset icerigini dbgrid icinde gosteremedim.

neyi eksik yapiyorum acaba
bufdataset'i close yaptığınız zaman içindeki veriler silinir, siz hem close hemde free yapıp datasource ile bağlamak istemişsiniz, accessviolation hatası vermesi gerekir o zaman zaten.
(11-01-2025, Saat: 08:55)esistem Adlı Kullanıcıdan Alıntı: [ -> ]bufdataset'i close yaptığınız zaman içindeki veriler silinir, siz hem close hemde free yapıp datasource ile bağlamak istemişsiniz, accessviolation hatası vermesi gerekir o zaman zaten.

anladim  hocam
dbgrid icine bufdataset icerigini nasil aktarabiliriz 
Form1.DBGrid1.DataSource.DataSet:=BufDb
bu sekilde partik bir yontem varmi
saygilar
Merhaba,
forma bir datasource koymanız yeterli, dataseti datasource bağlayın, gridi de datasource ye bağlayın.
(14-01-2025, Saat: 09:12)esistem Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba,
forma bir datasource koymanız yeterli, dataseti datasource bağlayın, gridi de datasource ye bağlayın.

HOCAM SAYGILAR oncelikle bir kac seyi calistirmayi basardim verdiginiz ornegi ayarlayarak datayi dbgrid icinde gosterebildim. cok sagolun orenklerle denemeye devam ediyorum
ama bir sorunla karsilastim.

forma 1 adet BufDataset1 koydum  1 adet DataSource1 koydum ve 1 adet dbgrid koydum gerekli tanimlamalari yaptim.

formdaki BufDataset1 secip FileldDefs alaninda ADI alanini ekledim. kodla tanimlamak yerine kompenant uzerinden alanlari kendim tanimlamak icin 

sonra koddaki tanimlama kismini iptal edip ayni kodu calistirdim ama dbgride datayi gosteremedim.

ad:='ali';
 // BufDb:=TBufDataset.Create(nil);
try
 //BufDataset1.FieldDefs.Add('ADI',ftString,20);
 BufDataset1.CreateDataSet;
 BufDataset1.Open;
 BufDataset1.Append;
 BufDataset1.FieldByName('ADI').Value:=ad;
 BufDataset1.Post;

 BufDataset1.Open;
 DataSource1.DataSet:=BufDataset1;
 DBGrid1.DataSource:=DataSource1; 

sizin verdiginiz ornekte tum tanimlamalari kodla yapiyorduk ve calisti bense forma bir bufdataset koyup tanimlamalari onun uzerinde yapmak istedim ama olmadi
neyi eksik yapiyorum acaba

saygilarimla
cok tesekkurler
Sayfalar: 1 2 3