DataSource.DataSet' e Runtime Değer Atama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

Merhaba;

Runtime'da Bir nesnenin DataSource.DataSet'ini değiştirmeye çalışıyorum.

Kod: Tümünü seç

DataSource.DataSet :=ADOQuery1Data_Source.AsString;

Kod: Tümünü seç

[dcc32 Error] Main.pas(283): E2010 Incompatible types: 'TDataSet' and 'string'
Aşağıda hatayı alıyorum. Text'i Dataset olarak nasıl gönderebilirim?

Saygılarımla
Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen ikra »

Kod: Tümünü seç

DataSource.DataSet := AdoQuery1Data_Source; // TAdoQuery oldugunu varsayiyorum.
kıdemsiz üye
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

ikra yazdı:

Kod: Tümünü seç

DataSource.DataSet := AdoQuery1Data_Source; // TAdoQuery oldugunu varsayiyorum.

Hocam AdoQuery nesnesindeki Data_Source isimle alandan veriyi çekeceğim. Yani tablodaki bir veriden.

Teşekkürler.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen ikra »

yanlis anlamadiysam DataSource.DataSet'in ismi veritabaninda kayitli ve sen veritabanindan bu ismi cekip DataSet olarak atamak istiyorsun.
O halde

Kod: Tümünü seç

DataSource.DataSet := TDataSet(FindComponent(AdoQuery1Data_Source.AsString));
yapmalisin. Isim ile bileseni bulup TDataSet'e cast etmelisin.
kıdemsiz üye
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

Merhaba;

Hocam bir yanlış anlama var.
Benim Dataset ismim zaten elimde yani Tezt veri olarak tablodaki bir alanda. Yapmak istediğim bu alanı nesnenin datasetine yazmak.

Örnek olarak direk sabit metin kabul edib.
DataSource.DataSet := 'BenimDatasetim';

Buradaki 'BenimDatasetim' string ya Dataset to String gibi birşey gerekiyor :)
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen ikra »

senin elinde olan string. DataSource'nin DataSet'i ise TDataSet class'ini bekleyen bir property. bu nedenle elindeki ismi cast edip TDataSet'e cevirmen gerekiyor. TDataSet'e cast etmeden önce bu bileseni öncelikle findcomponent fonksyonu ile bulman gerekiyor.
yani BenimDataSetim isminde bir bileseninin var olmasi, bulunmasi ve bulunan component'in TDataSet(FindComponent) seklinde cast edilmesi sart. Aksi taktirde Class bekleyen bir property'e string tanimlayamazsin.
kıdemsiz üye
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

ikra yazdı:senin elinde olan string. DataSource'nin DataSet'i ise TDataSet class'ini bekleyen bir property. bu nedenle elindeki ismi cast edip TDataSet'e cevirmen gerekiyor. TDataSet'e cast etmeden önce bu bileseni öncelikle findcomponent fonksyonu ile bulman gerekiyor.
yani BenimDataSetim isminde bir bileseninin var olmasi, bulunmasi ve bulunan component'in TDataSet(FindComponent) seklinde cast edilmesi sart. Aksi taktirde Class bekleyen bir property'e string tanimlayamazsin.
Haklısınız.
Aşağıdaki şekilde yazdığımda yine hata alıyorum.

Kod: Tümünü seç

DataSource.DataSet := TDataSet(FindComponent(AdoQuery1Data_Source.AsString));

Kod: Tümünü seç

[dcc32 Error] Main.pas(283): E2003 Undeclared identifier: 'TDataSet'
TDataset te hata alıyorum.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen ikra »

uses'e DB yaz. DB.pas dosyasini tanitman gerekiyor. TDataSet nesnesi DB dosyasinda tanimli.
kıdemsiz üye
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

Merhaba;

Zaman ayırdığınız için teşekkür ederim.
Aşağıdaki gibi yazıyorum fakat hata alıyorum.

Kod: Tümünü seç

DataSource  := TDataSource(UniMainModule.ADOQuery1Data_Source.Text);

Kod: Tümünü seç

Access violation at adress 006E9EA4 in module Project1.exe Read of adres 00000008
Program derlenirken sorun olmuyor fakat işlemi yaptığımda bu hatayı alıyorum.
Debug da gelen değeri kontrol ettiğimde değer doğru geliyor.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen ikra »

Ama sen benim dedigim gibi degil, kendi istedigin gibi yapmissin.
findcomponent bir fonksyondur ve result'u TComponent dir. parametre olarak string alir. sen text'ini findcomponent'e parametre olarak vereceksin. o da sana bileseni bulup TComponent olarak döndürecek. sen de dönen TComponent degerini TDataSet diyerek cast edeceksin.
kıdemsiz üye
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

Hocam bahsettiğiniz şekilde de aynı hatayı alıyorum.

Aslında şöyle yazayım.
1-Önce DataSource yazılmalı.
2-Sonrara Dataset
3-Sonra da DataField

Bu sıralamada DataSource önce yazılmayınca zaten hataya düşmesi normal

Şimdi;
Aşama
1- DataSource := TDataSource(FindComponent(ADOQuery1Data_Source.Text)); //Bu kod çalışıyor.

2- DataSource.DataSet := TDataSet(FindComponent(ADOQuery1Data_Set.Text)); //Hata alıyorum.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen ikra »

iki ihtimal var, DataSource olusturulmadigi icin nil dönüyor olabilir. nil olan bir bilesenin dataset propertisine ulasmaya calisman access violation vermesine sebep olur. datasource nil mi degil mi kontrol et.
ben tam olarak ne yapmaya calistigini, neden datasource'u create edip kullanmak yerine isime göre bulup islem yapmaya calistigini anlamis degilim.
kıdemsiz üye
Kullanıcı avatarı
badkursat
Üye
Mesajlar: 84
Kayıt: 03 Mar 2014 08:58

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen badkursat »

Dataseti XML olarak alıp 'XMLToDataset' fonksiyonunu kullanaiblirsin. 'SQLToXML' + 'XMLToDataSet' araştır
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen thelvaci »

pro_imaj yazdı:Hocam bahsettiğiniz şekilde de aynı hatayı alıyorum.

Aslında şöyle yazayım.
1-Önce DataSource yazılmalı.
2-Sonrara Dataset
3-Sonra da DataField

Bu sıralamada DataSource önce yazılmayınca zaten hataya düşmesi normal

Şimdi;
Aşama
1- DataSource := TDataSource(FindComponent(ADOQuery1Data_Source.Text)); //Bu kod çalışıyor.

2- DataSource.DataSet := TDataSet(FindComponent(ADOQuery1Data_Set.Text)); //Hata alıyorum.
Aşağıdaki kodu bir denermisiniz:

Kod: Tümünü seç

var
  AComponent : TComponent;
begin
  AComponent := FindComponent(ADOQuery1Data_Set.Text);
  
  if Assigned(AComponent) 
  then ShowMessage(AComponent.Name + ' isminde ' + AComponent.ClassName + ' türünde bir nesne bulundu')
  else raise Exception.Create('Hiçbir şey bulunamadı.!');
end;
Yukarıdaki kod size ne veriyor bir kontrol etmelisiniz. İlgili formunuzda ADOQuery1Data_Set.Text 'den gelen component ismine sahip bir component'iniz gerçekten var ise bir ShowMessage görmeniz lazım; aksi taktirde bir hata almalısınız.
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Re: DataSource.DataSet' e Runtime Değer Atama

Mesaj gönderen pro_imaj »

thelvaci yazdı:
pro_imaj yazdı:Hocam bahsettiğiniz şekilde de aynı hatayı alıyorum.

Aslında şöyle yazayım.
1-Önce DataSource yazılmalı.
2-Sonrara Dataset
3-Sonra da DataField

Bu sıralamada DataSource önce yazılmayınca zaten hataya düşmesi normal

Şimdi;
Aşama
1- DataSource := TDataSource(FindComponent(ADOQuery1Data_Source.Text)); //Bu kod çalışıyor.

2- DataSource.DataSet := TDataSet(FindComponent(ADOQuery1Data_Set.Text)); //Hata alıyorum.
Aşağıdaki kodu bir denermisiniz:

Kod: Tümünü seç

var
  AComponent : TComponent;
begin
  AComponent := FindComponent(ADOQuery1Data_Set.Text);
  
  if Assigned(AComponent) 
  then ShowMessage(AComponent.Name + ' isminde ' + AComponent.ClassName + ' türünde bir nesne bulundu')
  else raise Exception.Create('Hiçbir şey bulunamadı.!');
end;
Yukarıdaki kod size ne veriyor bir kontrol etmelisiniz. İlgili formunuzda ADOQuery1Data_Set.Text 'den gelen component ismine sahip bir component'iniz gerçekten var ise bir ShowMessage görmeniz lazım; aksi taktirde bir hata almalısınız.
Hiçbirşey Bulunamadı mesajını alıyorum.

Bu arada tablodaki bilgileri ve var olan bilgileri yazıyorum.

Formda ADOQuery1 ve DataSource1 tasarım anında nesne olarak ekli şekilde duruyor. Adoquery de Active := True

Veri çektiği yani Adoquery deki alanlar ve bilgileride şöyle.
Data_Source Data_Field Data_Set
DataSource1 Bilesen_Adi ADOQuery1
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Cevapla