Lazarus + SQLite – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Lazarus + SQLite – Delphi – Fórum – Programujte.comLazarus + SQLite – Delphi – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
kriplozoik
~ Anonymní uživatel
16 příspěvků
19. 6. 2013   #1
-
0
-

Zdravím komunitu.

Chtěla jsem najít (jakkoli primitivní) funkční příklad pro použití SQLite3 v Lazaru. Na první pohled se zdá, že nebude problém a že všeho je přehršel. Ale každý – a tím myslím opravdu KAŽDÝ – příklad, který jsem si stáhla, byl ve formě, ve které nešel zkompilovat a házel chyby, které jsem nedokázala odladit (syntaktické i sémantické, jdoucí hluboko do těch nejobecnějších a nejstandardnějších zdrojáků Lazaru). Zkoušela jsem i různé videocasty a opět u každého z nich jsem se dostala do bodu, kdy autorovi videa něco šlo a mě ne. Nedokážu popsat, jak moc jsem z toho frustrovaná, že jsem mohla na takové relativně jednoduché věci pohořet.

Je tu někdo, kdo v Lazaru dělá a má příklad s SQLite, který opravdu funguje? Byl by tak hodný a vložil sem zdroják (klidně v té nejosekanější formě - jen připojení k databázi)? Popřípadě poradil, co všechno je k tomu potřeba (nastavení projektu apod.)?

Budu vděčná za jakoukoli dobrou radu.

(Btw. Dynamickou knihovnu mám stáhnutou a přiloženu v adresáři projektu. Mám naprosto standardní a typickou instalaci Lazaru, verze 1.0.6.)

Nahlásit jako SPAM
IP: 213.151.77.–
Reklama
Reklama
mjseven0
Návštěvník
21. 6. 2013   #2
-
0
-

Jde to třeba nějak takhle:

unit frmMain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, sqlite3conn, sqldb, DB, FileUtil, Forms, Controls,
  Graphics, Dialogs, DBGrids, StdCtrls;

type

  { TMainForm }

  TMainForm = class(TForm)
    btnCreateTable: TButton;
    btnReadData: TButton;
    btnInsertRecord: TButton;
    conDatabase: TSQLite3Connection;
    dsGet: TDatasource;
    DBGrid1: TDBGrid;
    qrSend: TSQLQuery;
    qrGet: TSQLQuery;
    trnDatabase: TSQLTransaction;
    procedure btnCreateTableClick(Sender: TObject);
    procedure btnReadDataClick(Sender: TObject);
    procedure btnInsertRecordClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.lfm}

{ TMainForm }

procedure TMainForm.btnCreateTableClick(Sender: TObject);
begin
  try
    if not conDatabase.Connected then
      conDatabase.Connected := True;

    qrSend.SQL.Clear;
    qrSend.SQL.Add(
      'create table if not exists test (id integer primary key, name varchar(20))');
    qrSend.ExecSQL;

    trnDatabase.CommitRetaining;
  except
    trnDatabase.Rollback;
  end;

end;

procedure TMainForm.btnReadDataClick(Sender: TObject);
begin
  try
    if qrGet.Active then
      qrGet.Close;

    qrGet.SQL.Clear;
    qrGet.SQL.Add('Select * from test order by id');
    qrGet.Open;

  except

  end;
end;

procedure TMainForm.btnInsertRecordClick(Sender: TObject);
begin
  try
    if qrSend.Active then
      qrSend.Close;

    qrSend.SQL.Clear;
    qrSend.SQL.Add('insert into test (id, name) values (1, ''Petr'')');
    qrSend.ExecSQL;

    trnDatabase.CommitRetaining;
  except
    on E:Exception do
    begin
      MessageDlg('Chyba',Format('Data nelze vložit! %s',[#13#10 + E.Message]), mtError, [mbOK],0);
      trnDatabase.Rollback;
    end;
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  // tohle neni myslim nutne, ale pokud by bylo treba pouzit dll urcite verze tak tudy vede cesta
  SQLiteLibraryName := 'sqlite3.dll';

  //naledujici kroky lze naklikat na formu, zde je to jen pro ukazku
  //nastavim jmeno databaze (vcetne cesty, ja mam db u exe, tak staci jen nazev souboru)
  conDatabase.DatabaseName:= 'data.sdb';
  //propojim komponnetu transakce s komponentou pripojeni
  conDatabase.Transaction := trnDatabase;
  //propojim komponenty dotazu (query) s pripojenim
  qrGet.DataBase := conDatabase;
  qrSend.DataBase := conDatabase;
  //propojim komponentu datasource s dotazem
  dsGet.dataset := qrGet;
  //propojim DBgrid s datasource
  DBGrid1.DataSource := dsGet;
end;

end.                                
Nahlásit jako SPAM
IP: 213.151.83.–
kriplozoik
~ Anonymní uživatel
16 příspěvků
21. 6. 2013   #3
-
0
-

@mjseven: Smím se zeptat, jakou máš verzi Lazaru a pro jaký OS?

Nahlásit jako SPAM
IP: 213.151.77.–
mjseven0
Návštěvník
21. 6. 2013   #4
-
0
-

Tohle konkrétně je z 1.0.8 na win7. 
Každopádně princip by měl být stejný i na 1.0.6.
Napiš sem případně přesné znění chyb, které tě brzdí v rozletu.
 

Nahlásit jako SPAM
IP: 213.151.83.–
prdelnatý anděl
~ Anonymní uživatel
33 příspěvků
21. 6. 2013   #5
-
0
-

Pozor, 64bitová verze Lazaru vůbec nemá TSQLite3Connection.

Nahlásit jako SPAM
IP: 213.151.77.–
kriplozoik
~ Anonymní uživatel
16 příspěvků
22. 6. 2013   #6
-
0
-

Je to tak. Už funguje. Díky.

Zdrojáky a související soubory jsem hodila sem - http://uloz.to/xV9ALT6z/lazarus-sqlite3-example-zip

Snad to těm, kteří mají stejný problém jako jsem doposud měla já, pomůže.

Nahlásit jako SPAM
IP: 213.151.77.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Podobná vlákna

SQLite — založil Sibyx

SQLite — založil joudicek

Bezpečnost sqlite — založil TomášJančík

Jak na sqlite — založil Jelcin

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý