AutoIt3: folosind SQLite


MySQL este minunat, dar… nu e foarte portabil. Dacă vrem să facem o mică aplicaţie care să folosească o bază de date ne trebuie ceva adaptat. Ceva (uşor-lite) gen… SQLite. Din fericire AutoIt se “combină” bine cu SQLite. Atât de bine încât e uşor să dezvolţi aplicaţii chiar complexe cu baze de date. Cum noi suntem tot la capitolul “să vedem cât de uşor este să faci… puncte puncte”, vom lua ceva simpluţ: o agendă. Evident că am putea să salvăm informaţiile într-un fişier şi să le citim din acel fişier. Dar s-ar duce pe apa sâmbetei puterea bazelor de date, mai exact puterea interogărilor SQL. Am construit deci un program banal care adaugă nume şi telefoane într-o bază de date.

imagine

Din doar 50 de linii de cod putem face aşa ceva. Desigur, lipsesc facilităţi importante: ştergere, modificare, mai ales căutare. Dar scheletul există mai jos. Despre GUI nu mai vorbim acum, căci am tot vorbit în ultimele articole. Trecem deci la linia 20 unde iniţiem comunicarea cu SQLite, după care deschidem baza de date agenda.db. Partea frumoasă este că, dacă nu există, va fi creată. Vine o altă linie, 22, tot frumoasă: dacă baza de date e goală, creăm o tabelă. O parcurgem apoi, cu o interogare SQL, şi dacă sunt date le afişăm în GUI, în ListView.

[PHP]#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

Local $query,$linie,$dim
$hGUI=GUICreate("Agenda cu SQLite",500,320)
GUISetIcon("shell32.dll", -161)
$agenda = GUICtrlCreateListView("Nr|Nume|Telefon", 10, 10, 250, 300, $LVS_SORTASCENDING)
_GUICtrlListView_SetExtendedListViewStyle($agenda, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
GUICtrlCreateLabel("Nume",280,10)
$nume = GUICtrlCreateInput("",280,30,200,20)
GUICtrlCreateLabel("Telefon",280,60)
$telefon = GUICtrlCreateInput("",280,80,200,20)
$adauga = GUICtrlCreateButton("Adaugă în agendă",280,120,200,30)
GUICtrlCreateLabel("Această aplicaţie este o simulare de agendă telefonică. Doar că simularea…merge! Adică puteţi cu adevărat să adăugaţi nume şi telefoane, iar ele vor fi salvate. Testaţi, adăugaţi câteva, închideţi aplicaţia şi reporniţi-o: veţi regăsi datele introduse anterior.",280,190,200,150)
GUISetState()

_SQLite_Startup ()
_SQLite_Open("agenda.db")
_SQLite_Exec(-1, "create table if not exists agenda (id integer, nume text, numar text);")
$dim=0
_SQlite_Query (-1, "SELECT * FROM agenda ORDER BY id DESC;", $query)
While _SQLite_FetchData ($query, $linie) = $SQLITE_OK
GUICtrlCreateListViewItem($linie[0] & "|" & $linie[1] & "|" & $linie[2], $agenda)
$dim += 1
WEnd

Do
$msg = GUIGetMsg()
If $msg = $adauga Then
$valnume = GUICtrlRead($nume)
$valtelefon = GUICtrlRead($telefon)
If StringLen($valnume)>0 And StringLen($valtelefon) Then
$dim += 1
_SQLite_Exec(-1, "insert into agenda values (" & $dim & ", ‘" & $valnume & "’, ‘" & $valtelefon & "’);")
GUICtrlCreateListViewItem($dim & "|" & $valnume & "|" & $valtelefon, $agenda)
GUICtrlSetData($nume,"")
GUICtrlSetData($telefon,"")
_GUICtrlListView_SortItems($agenda, GUICtrlGetState($agenda))
Else
MsgBox(48,"Atenţie!","Ambele câmpuri, nume şi telefon, trebuie să conţină ceva!")
EndIf
EndIf
Until $msg = $GUI_EVENT_CLOSE
GUIDelete()

_SQLite_Close()
_SQLite_Shutdown()[/PHP]

Apoi mai este partea cu butonul $adauga. Citim numele şi telefonul şi, dacă nu sunt goale, inserăm valorile în tabela SQLite şi în controlul ListView. La final, ultimele două linii, închidem comunicarea cu SQLite. În mare şi explicat mai „băbeşte” cam aşa stau lucrurile. Puteţi lua codul şi „purica” suplimentar.

PS: Toate fişierele acestei serii de tutoriale sunt publice şi descărcabile de aici. Exemplul de aici este sqlite-agenda.au3, compilat în agenda.exe.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (1 evaluări, media: 5,00 din 5)
Loading...Loading...

6 comentarii

  1. jürgen.toth spune:

    Fain, fain, dar şi mai utilă ar fi o completare cu un câmp pentru adresa email.

  2. radu.capan spune:

    Câteva linii de cod de adăugat :). Structura de bază e făcută.

  3. jocker spune:

    Am facut eu cu email, doar ca am o problema cand se adauga in lista se inverseaza imi apare la email numele si la nume email-ul. 😐

  4. radu.capan spune:

    Codul modificat pt adaugarea emailului e aici:
    http://www.box.net/shared/hmbc3joeib
    (poate ajuta)

  5. jocker spune:

    Sa innebunesc daca vad unde am gresit. Am facut exact ca tine. :)

  6. jocker spune:

    Poate nu ai observat dar daca modifici liniile

    _SQLite_Startup („System.Data.SQLite.dll”)
    _SQLite_Open(„agenda2.age”)
    _SQLite_Exec(-1, „pragma key = ‘0sm274mls93′”)

    baza de date nu se mai creeaza. 😛


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *