[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]
_________________
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]
_________________
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]
_________________
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.
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.
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]
_________________
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]
_________________
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.
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]
_________________
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.
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.
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]
_________________