Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Android sqlite FDTableHighScores.Active problemi
#1
Bu fonksiyonda yanlış olan nedir? Windows'ta hiç bir problem yok. Telefonda FDTableHighScores.Active bu satırda No Such Table HighScores hatası veriyor. Ne yaptıysam düzelmedi. Tpath.GetPublicPath yolunda dosya var görüyorum. Tabloda var. İçinde veri de var hepsini ben görebiliyorum. Telefon görmüyor.

Function TFrameHighScores.baglan : Boolean;
var
 DB: string;
begin
   DB := Tpath.GetPublicPath + Pathdelim + 'HighScores.s3db';
//    Tfile.Delete(DB);
   FireScoresList.DriverName := 'SQLite';
   FireScoresList.Params.Values['Database'] := DB;
   FireScoresList.Params.Values['CharacterSet'] := 'utf8';
   if not FileExists(DB) then 
   begin
     FireScoresList.ExecSQL('CREATE TABLE IF NOT EXISTS HighScores (Name TEXT NOT NULL, Score INTEGER)');
   end;
   FireScoresList.Connected := True;
   if FireScoresList.Connected = True then
   begin
     FDTableHighScores.Connection := FireScoresList;
     FDTableHighScores.TableName := 'HighScores';
     FDTableHighScores.Active := True;
   end;
   Result :=  FireScoresList.Connected;
end;
Cevapla
#2
verdiği hata nedir?
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#3
Gördüğüm olabilecek sorunlar 
  1. Connected True yapılmadan EXECSQL çalıştırılması.
  2. not fileexits gerek yok zaten create cümlesinde o var.
  3. Birde sadece tahmin kolon ismi name olduğu için const dek geliyor olabilir.
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#4
(05-02-2022, Saat: 16:47)Jakarta2 Adlı Kullanıcıdan Alıntı: Bu fonksiyonda yanlış olan nedir? Windows'ta hiç bir problem yok. Telefonda FDTableHighScores.Active bu satırda No Such Table HighScores hatası veriyor. Ne yaptıysam düzelmedi. Tpath.GetPublicPath yolunda dosya var görüyorum. Tabloda var. İçinde veri de var hepsini ben görebiliyorum. Telefon görmüyor.

Function TFrameHighScores.baglan : Boolean;
var
 DB: string;
begin
   DB := Tpath.GetPublicPath + Pathdelim + 'HighScores.s3db';
//    Tfile.Delete(DB);
   FireScoresList.DriverName := 'SQLite';
   FireScoresList.Params.Values['Database'] := DB;
   FireScoresList.Params.Values['CharacterSet'] := 'utf8';
   if not FileExists(DB) then 
   begin
     FireScoresList.ExecSQL('CREATE TABLE IF NOT EXISTS HighScores (Name TEXT NOT NULL, Score INTEGER)');
   end;
   FireScoresList.Connected := True;
   if FireScoresList.Connected = True then
   begin
     FDTableHighScores.Connection := FireScoresList;
     FDTableHighScores.TableName := 'HighScores';
     FDTableHighScores.Active := True;
   end;
   Result :=  FireScoresList.Connected;
end;


Bağlantı nesnesinin OnBeforeConnect olayında aşağıdaki gibi atama yapmalısınız. 
procedure TForm1.FireScoresListBeforeConnect(Sender: TObject);
begin
 {$IF DEFINED(iOS) or DEFINED(ANDROID)}
 FireScoresList.Params.Values['Database'] :=
     TPath.Combine(TPath.GetPublicPath, 'HighScores.s3db');
 {$ENDIF}
end;
Begin : = end / 2;
Cevapla
#5
(06-02-2022, Saat: 21:03)mcuyan Adlı Kullanıcıdan Alıntı: verdiği hata nedir?

Telefonda FDTableHighScores.Active bu satırda No Such Table HighScores hatası veriyor. 

(07-02-2022, Saat: 08:21)narkotik Adlı Kullanıcıdan Alıntı: Gördüğüm olabilecek sorunlar 
  1. Connected True yapılmadan EXECSQL çalıştırılması.
  2. not fileexits gerek yok zaten create cümlesinde o var.
  3. Birde sadece tahmin kolon ismi name olduğu için const dek geliyor olabilir.

1) dosya yoksa execsql çalıştır diyorum. Dosya var. oraya hiç girmiyor zaten.
2) fileexists eğer dosya yoksa oluştur demek gerek var ona.
kolon ismi ve name const'u ben de düşündüm değiştirdim ama işe yaramadı. Ayrıca bilgisayarda da hata vermesi gerek. Bilgisayarda  sorunsuz çalışıyor.

(07-02-2022, Saat: 09:41)RAD Coder Adlı Kullanıcıdan Alıntı:
(05-02-2022, Saat: 16:47)Jakarta2 Adlı Kullanıcıdan Alıntı: Bu fonksiyonda yanlış olan nedir? Windows'ta hiç bir problem yok. Telefonda FDTableHighScores.Active bu satırda No Such Table HighScores hatası veriyor. Ne yaptıysam düzelmedi. Tpath.GetPublicPath yolunda dosya var görüyorum. Tabloda var. İçinde veri de var hepsini ben görebiliyorum. Telefon görmüyor.

Function TFrameHighScores.baglan : Boolean;
var
 DB: string;
begin
   DB := Tpath.GetPublicPath + Pathdelim + 'HighScores.s3db';
//    Tfile.Delete(DB);
   FireScoresList.DriverName := 'SQLite';
   FireScoresList.Params.Values['Database'] := DB;
   FireScoresList.Params.Values['CharacterSet'] := 'utf8';
   if not FileExists(DB) then 
   begin
     FireScoresList.ExecSQL('CREATE TABLE IF NOT EXISTS HighScores (Name TEXT NOT NULL, Score INTEGER)');
   end;
   FireScoresList.Connected := True;
   if FireScoresList.Connected = True then
   begin
     FDTableHighScores.Connection := FireScoresList;
     FDTableHighScores.TableName := 'HighScores';
     FDTableHighScores.Active := True;
   end;
   Result :=  FireScoresList.Connected;
end;


Bağlantı nesnesinin OnBeforeConnect olayında aşağıdaki gibi atama yapmalısınız. 
procedure TForm1.FireScoresListBeforeConnect(Sender: TObject);
begin
 {$IF DEFINED(iOS) or DEFINED(ANDROID)}
 FireScoresList.Params.Values['Database'] :=
     TPath.Combine(TPath.GetPublicPath, 'HighScores.s3db');
 {$ENDIF}
end;

Yok hocam böyle de olmadı. Zaten ilk başta onbeforeconnect ve onafterconnect'de yaptım. Olmadı ondan sonra fonksiyon yazdım. Yine olmadı. Yalnız bilgisayarda çalışıyor hiç bir hata yok. Telefonda veriyor hatayı. Delphi 11'de fmx fdconnection çalışma mantığımı değişti acaba? Bug mı var? 2 telefonda denedim ikisinde de aynı hatayı veriyor. So Such Table (ikisinde de dosya var. Kendi de oluştursa manuel de kopyalasam yemiyor)

Daha önce: Bu şekildeydi
procedure TFrameHighScores.FireScoresListAfterConnect(Sender: TObject);
begin
FireScoresList.ExecSQL
('CREATE TABLE IF NOT EXISTS HighScores (Name TEXT NOT NULL, Score INTEGER)');
end;

procedure TFrameHighScores.FireScoresListBeforeConnect(Sender: TObject);
begin
FireScoresList.Params.Values['Database'] := TPath.GetDocumentsPath + PathDelim
+ 'HighScores.s3db';
end;
Cevapla
#6
(08-02-2022, Saat: 14:27)Jakarta2 Adlı Kullanıcıdan Alıntı: Yok hocam böyle de olmadı. Zaten ilk başta onbeforeconnect ve onafterconnect'de yaptım. Olmadı ondan sonra fonksiyon yazdım. Yine olmadı. Yalnız bilgisayarda çalışıyor hiç bir hata yok. Telefonda veriyor hatayı. Delphi 11'de fmx fdconnection çalışma mantığımı değişti acaba? Bug mı var? 2 telefonda denedim ikisinde de aynı hatayı veriyor. So Such Table (ikisinde de dosya var. Kendi de oluştursa manuel de kopyalasam yemiyor)

Daha önce: Bu şekildeydi
procedure TFrameHighScores.FireScoresListAfterConnect(Sender: TObject);
begin
 FireScoresList.ExecSQL
   ('CREATE TABLE IF NOT EXISTS HighScores (Name TEXT NOT NULL, Score INTEGER)');
end;

procedure TFrameHighScores.FireScoresListBeforeConnect(Sender: TObject);
begin
 FireScoresList.Params.Values['Database'] := TPath.GetDocumentsPath + PathDelim
   + 'HighScores.s3db';
end;

Deployment'a HighScores.s3db veri tabanını eklediniz mi?
Eklediyseniz remote path alanının değeri nedir?
Begin : = end / 2;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android Uygulama İkonu ARM 2 400 11-11-2025, Saat: 12:15
Son Yorum: ARM
  Android SDK kajmerantime 1 385 28-10-2025, Saat: 14:53
Son Yorum: cinarbil
  Android El Terminali Barkod Okuyucu Verisi tuna 0 334 17-10-2025, Saat: 01:07
Son Yorum: tuna
  Android işlem öneriliyor uyarısı! Coban 9 1.863 07-08-2025, Saat: 12:07
Son Yorum: RAD Coder
  FMX Android Adaptive Icons kullanabilir miyiz? egeven 1 2.157 30-06-2025, Saat: 21:46
Son Yorum: emozgun



Konuyu Okuyanlar: 1 Ziyaretçi