Query'de Field Not Found Hatası..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Query'de Field Not Found Hatası..

Mesaj gönderen neu84 »

Hayırlı pazarlar arkadaşlar,
SqlServerdan veritabanın en son yedek tarihini alıyorum, ancak delphi cannot convert type unicodestring into double falan diyodu boş gelince, birde farklı bişey deniyim dedim. ancak sorgu içinde kendim tanıttıgım aliası field olarak bulamıyor.3 gündür uğraşıyorum ilerleyemedim bi türlü..
Field 'varMi' not found diyor. kodlarım şöyle..

Kod: Tümünü seç

IF (SELECT MAX(bs.backup_finish_date) as Tarih FROM sys.sysdatabases sd
inner join msdb.dbo.backupset bs ON bs.database_name = sd.name where bs.database_name='BenimDB'
group by sd.Name) is null 
begin
select 'yok' as varMi 
end
else
begin
SELECT MAX(bs.backup_finish_date) as Tarih FROM sys.sysdatabases sd
inner join msdb.dbo.backupset bs ON bs.database_name = sd.name where bs.database_name='BenimDB'
group by sd.Name
end
Delphide de
if(QuerySonYedekTarih.FieldValues['varMi']='yok')then
begin
ShowMessage('yokmuş');
end
bu şekilde bakmaya çalışıyorum varMi nin degeri yokmu diye. Önerileriniz lütfennnn...
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Query'de Field Not Found Hatası..

Mesaj gönderen sabanakman »

if şartına uyan sorgu varMi isimli alanla sonuç üretse de else şatındaki sorgu Tarih isminde tek alanlı sonuç üretmektedir. Kısacası iki sorgudan üretilen tabloların alan isimleri alakasız ve 2. sorgu çalıştığı durumda hata almanız normaldir. Buna göre sorguyu değiştirebilirsiniz veya alan isimleri önemli değil ilk alandan gelen değer lazım derseniz

Kod: Tümünü seç

if(QuerySonYedekTarih.Fields[0].AsString='yok')then
begin
ShowMessage('yokmuş');
end
şeklinde de kullanabilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Query'de Field Not Found Hatası..

Mesaj gönderen neu84 »

sabanakman yazdı:if şartına uyan sorgu varMi isimli alanla sonuç üretse de else şatındaki sorgu Tarih isminde tek alanlı sonuç üretmektedir. Kısacası iki sorgudan üretilen tabloların alan isimleri alakasız ve 2. sorgu çalıştığı durumda hata almanız normaldir. Buna göre sorguyu değiştirebilirsiniz veya alan isimleri önemli değil ilk alandan gelen değer lazım derseniz

Kod: Tümünü seç

if(QuerySonYedekTarih.Fields[0].AsString='yok')then
begin
ShowMessage('yokmuş');
end
şeklinde de kullanabilirsiniz.

Çok tşk ederim, deniyip tekrar dönerim.. Bu şekilde kullanışları bilmiyorum tam olarak. bunu da bilmiyodum. takıldıgım bi yer daha vardı bunu deniyim olmazsa eger o konuda da yardım rica ederim.. görüşmek üzere..
neu84
Üye
Mesajlar: 307
Kayıt: 06 Oca 2011 11:27

Re: Query'de Field Not Found Hatası..

Mesaj gönderen neu84 »

@sabanakman
kardeş çok tşk ederim sonunda yapmak istediğimi yapabildim, günlerdir deliriyodum o hatalar yüzünden..
Sorgumu aşagıdaki gibi düzenledim. sorgu içinde if e gerek kalmadı.

Kod: Tümünü seç

sql1:='SELECT sd.Name as DBadim ,MAX(bs.backup_finish_date) as Tarih FROM sys.sysdatabases sd';
  sql2:=' inner join msdb.dbo.backupset bs ON bs.database_name = sd.name where bs.database_name=:dbAdi group by sd.Name order by sd.Name ';

Kod: Tümünü seç

if (QuerySonYedekTarih.Fields[0].AsString='')
      or (QuerySonYedekTarih.Fields[0].AsString=null)
      or (QuerySonYedekTarih.Fields[0].AsString=QuotedStr('')) then
      begin
      Result:=-1;
      end
      else
      begin
      yedektarihi:=QuerySonYedekTarih.Fields[0].AsDateTime;
      minutebetween:=MinutesBetween(bugun,yedektarihi);
      result:= minutebetween;
      end;
bu şekilde de delphi tarafında kontrol ediyorum. Senin söyledigin Fields[0].AsString sayesinde oldu, bilmiyordum öyle bi kullanış tarzını, sadeca hayal etmiştim keşke öyle bişey olsa diye. Hani parametre yollarken ParamByName('dbAdi').AsString gibi kullanıyoruz ya, gelen degerler için kullanılabildigini bilmiyodum. Çok sagol tekrar..
Cevapla