Delphi Can
Android sqlite FDTableHighScores.Active problemi - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Android sqlite FDTableHighScores.Active problemi (/showthread.php?tid=6590)



Android sqlite FDTableHighScores.Active problemi - Jakarta2 - 05-02-2022

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;



Android sqlite FDTableHighScores.Active problemi - mcuyan - 06-02-2022

verdiği hata nedir?


Cvp: Android sqlite FDTableHighScores.Active problemi - narkotik - 07-02-2022

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.



Cvp: Android sqlite FDTableHighScores.Active problemi - RAD Coder - 07-02-2022

(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;



Cvp: Android sqlite FDTableHighScores.Active problemi - Jakarta2 - 08-02-2022

(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;


Cvp: Android sqlite FDTableHighScores.Active problemi - RAD Coder - 08-02-2022

(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?